Mô phỏng thứ sáu


73

Các anh em từ dòng St Golfus the Concise có truyền thống đọc một lời cầu nguyện ngắn bất cứ khi nào họ thấy ai đó làm dấu thánh giá . Do mức độ tội lỗi cao được đo lường trong số khách du lịch gần đây, họ đã lắp đặt camera quan sát trong tu viện và họ đã thuê bạn để giúp họ giữ truyền thống cũ tồn tại trong thời đại AI.

Nhiệm vụ của bạn là phân tích đầu ra từ phần mềm theo dõi ngón tay của anh em và cho biết có bao nhiêu lời cầu nguyện. Đầu vào là một ma trận chứa các số nguyên nằm trong khoảng từ 0 đến 4. 1,2,3,4 thể hiện vị trí của các ngón tay tại các thời điểm liên tiếp theo thời gian. 0 đại diện cho những ngón tay không.

One True Way TM để vượt qua chính mình là:

.1.
3.4
.2.

("." Phù hợp với bất kỳ chữ số nào). Tuy nhiên, do sự không chắc chắn về góc quay của máy ảnh và sự hiện diện của anh em Chính thống giáo phương Đông trong đám đông (có One True Way TM ở hướng đi ngược chiều), bạn cũng nên đếm tất cả các góc quay và phản xạ:

.4. .2. .3. .1. .3. .2. .4.
1.2 4.3 2.1 4.3 1.2 3.4 2.1
.3. .1. .4. .2. .4. .1. .3.

Một chữ số có thể là một phần của nhiều chữ thập. Giúp các huynh đệ xác định số lần AI của họ .pray()bằng cách đếm xem có bao nhiêu trong số các mô hình con 3x3 ở trên. Viết chương trình hoặc hàm. Lấy đầu vào trong bất kỳ hình thức thuận tiện hợp lý.

Các trường hợp di chúc:

// in
[[0,4,2,0],
 [1,3,2,4],
 [2,3,1,0]]

// out
2

// in
[[4,3,3,2,4,4,1,3,2,2],
 [0,3,0,2,1,1,2,3,2,3],
 [0,3,1,3,2,4,3,3,1,1],
 [4,3,2,3,2,4,1,4,2,3],
 [0,4,2,3,4,0,2,3,2,4],
 [2,1,0,0,2,0,0,1,2,4],
 [4,0,3,1,3,2,0,3,2,3],
 [1,4,3,3,1,4,0,1,4,4],
 [0,2,4,3,4,3,1,3,0,4],
 [3,0,1,0,4,0,3,3,3,3]]

// out
3

// in
[[3,2,3,1,0,3,4,2,1,1,1,1,4,0,1,3,1,1,2,1,1,3,0,1,0,1,1,0,0,1,0,3,4,0,1,1,2,3,1,2,4,1,0,2,3,0,2,4,3,2],
 [2,4,1,1,0,3,0,2,4,2,3,2,1,3,0,2,3,2,4,4,4,3,2,1,1,3,2,1,2,3,2,4,0,3,1,4,4,1,1,0,1,1,0,2,2,3,1,2,0,2],
 [3,4,0,0,4,4,0,3,4,4,1,3,2,1,3,2,3,2,2,0,4,0,1,2,3,0,4,3,2,2,2,0,3,3,4,4,2,2,1,4,4,1,3,1,1,2,0,1,1,0],
 [1,4,2,2,2,1,3,4,1,1,2,1,4,0,3,2,2,4,1,3,3,0,4,1,1,0,0,1,2,2,1,3,4,0,4,1,0,1,1,0,2,1,3,1,4,4,0,4,3,2],
 [4,4,2,0,4,4,1,1,2,2,3,3,2,3,0,3,2,1,0,3,3,4,2,2,2,1,1,4,3,2,1,1,4,3,4,2,4,0,1,0,2,4,2,2,0,3,3,0,3,2],
 [4,3,3,1,3,1,1,3,3,1,0,1,4,3,4,3,4,1,2,2,1,1,2,1,4,2,1,1,1,1,1,3,3,3,1,1,4,4,0,0,3,3,1,4,4,3,2,3,3,0],
 [1,4,1,4,0,0,1,3,1,2,2,1,1,2,3,3,2,0,3,4,3,2,1,2,2,3,3,1,4,2,1,1,4,1,3,2,0,0,0,1,2,4,1,1,3,0,4,2,3,1],
 [2,2,3,0,0,4,2,1,2,3,1,2,4,1,0,1,0,2,4,1,3,4,4,0,0,4,0,4,4,2,0,0,2,2,3,3,4,1,0,3,2,1,0,1,1,0,3,0,3,2],
 [1,2,4,3,4,3,1,2,2,3,0,1,2,4,4,4,3,1,2,3,4,3,3,2,0,0,2,0,3,4,4,2,3,2,0,2,4,3,0,0,0,4,4,0,4,4,0,3,3,3],
 [4,4,1,2,0,2,2,0,0,3,2,3,2,3,4,1,0,2,3,0,3,2,1,1,4,3,0,2,3,1,0,4,1,2,4,1,1,4,4,4,2,2,2,3,0,1,0,3,0,1],
 [4,0,3,0,2,2,0,3,2,2,2,4,0,4,0,1,0,1,4,3,3,2,3,1,2,2,4,4,0,3,2,3,1,4,1,0,3,2,3,2,2,0,1,2,4,0,3,0,4,4],
 [0,4,0,1,0,2,3,2,1,3,1,1,2,0,3,2,1,4,0,1,4,4,1,3,4,4,1,0,4,1,0,3,4,0,3,2,4,3,3,3,3,1,2,2,3,3,3,1,3,4],
 [3,4,1,2,1,1,1,0,4,0,1,1,0,4,1,3,1,1,2,0,2,1,4,1,4,4,3,2,0,3,0,3,0,1,1,2,1,3,0,4,4,2,2,2,1,3,4,1,1,1],
 [3,0,1,4,2,0,0,3,1,1,1,4,4,0,2,2,0,4,0,3,1,0,2,2,4,4,4,0,4,4,4,4,4,4,3,0,4,4,4,1,2,4,4,3,0,0,4,0,4,2],
 [2,0,1,2,1,1,3,0,3,1,0,4,3,1,2,1,1,3,0,1,2,4,2,1,2,3,4,2,4,4,2,2,3,4,0,0,1,0,0,4,1,3,3,4,1,2,1,3,3,2],
 [4,0,2,0,3,1,2,1,1,1,1,2,3,0,3,1,0,4,3,0,0,0,2,0,1,4,0,2,1,3,4,2,2,4,2,3,1,2,0,2,0,2,4,0,1,2,3,4,1,3],
 [3,0,2,4,2,0,3,4,3,2,3,4,2,0,4,1,0,4,3,3,1,0,2,2,2,1,3,3,1,1,0,3,3,0,3,2,1,1,0,1,2,2,0,4,4,2,0,1,3,1],
 [0,4,4,4,0,3,0,3,0,2,2,0,1,2,3,3,4,3,0,4,1,2,3,3,0,2,2,3,0,0,0,2,4,2,3,4,2,3,4,0,2,0,1,1,3,4,2,2,4,4],
 [2,1,2,3,4,3,1,2,0,0,0,0,0,0,3,4,3,3,1,2,2,1,3,4,1,2,4,0,1,4,1,0,0,0,2,1,1,1,3,0,0,3,1,1,4,2,1,3,4,1],
 [1,0,3,0,2,1,4,2,3,3,1,1,3,4,4,0,1,2,1,3,0,3,1,1,3,0,2,4,4,4,2,3,1,4,3,4,0,1,4,1,1,1,4,0,0,2,3,4,0,4]]

// out
8

"May mắn là ngắn nhất của ngắn nhất, vì nó winneth vương quốc của những người thượng lưu." -Book của St Golfus 13:37

"Ngươi không được sử dụng sơ hở, vì chúng là những tác phẩm độc ác của Lucifer." -Letter đến Meta 13: 666

Hình dung nhẹ của người làm thánh giá


Cảm ơn @Tschallacka đã trực quan hóa.


57
+1 cho những câu thơ ở cuối, họ đã cho tôi một tiếng cười vui vẻ: D
HyperNeutrino

6
Một chữ số có thể là một phần của nhiều chữ thập không?
Martin Ender

9
Ôi Chúa ơi, bạn đã làm một mô phỏng Friar.
Bạch tuộc ma thuật Urn

1
Tại sao các món ăn đầu tiên được liên kết?
JakeGould

4
@JakeGould Vì vậy, để liên kết câu hỏi này với câu hỏi "T" dẫn đến.
Erik the Outgolfer

Câu trả lời:


19

Vết bẩn , 20 byte

n`.\1./\3.\4/.\2.voO

Hãy thử trực tuyến!

Một triển khai rất chính xác của spec:

  • n` làm cho Grime đếm số lượng hình chữ nhật của đầu vào mang lại kết quả khớp.
  • .\1./\3.\4/.\2. định nghĩa hình vuông 3x3:

    .1.
    3.4
    .2.
    

    Trường hợp .có thể là bất kỳ nhân vật.

  • oOlà một công cụ sửa đổi định hướng cho phép hình chữ nhật này xuất hiện trong bất kỳ phép quay hoặc phản xạ nào. Cái vnày được sử dụng để giảm mức ođộ ưu tiên để chúng ta không cần dấu ngoặc đơn quanh quảng trường.

7
Đúng cho hai thử nghiệm đầu tiên, segfault cho lần cuối cùng. Tôi đoán điều này sẽ ổn miễn là chương trình đúng về nguyên tắc và chỉ bị giới hạn bởi tài nguyên.
ngn

FYI: Tôi vừa thử nghiệm trường hợp thử nghiệm cuối cùng và nó chạy tốt cho tôi.
3D1T0R

16

Ốc , 17 16 byte

Ao
\1.=\2o=\3b\4

Hãy thử trực tuyến!

Giải trình

Alàm cho Ốc đếm số lượng đường dẫn phù hợp có thể có trong toàn bộ đầu vào. ođặt hướng bắt đầu thành bất kỳ hướng trực giao nào (thay vì chỉ hướng về phía đông). Bản thân mẫu nằm trên dòng thứ hai:

\1    Match a 1.
.     Match an arbitrary character (the one in the centre).
=\2   Check that the next character ahead is a 2, but don't move there.
o     Turn to any orthogonal direction. In practice, this will only be one
      of the two directions from the centre we haven't checked yet.
=\3   Check that the next character ahead is a 3.
b     Turn around 180 degrees.
\4    Match a 4 in that direction.

7

Haskell, 108 102 93 byte

f((_:t:x):w@((l:q@(_:r:_)):(_:b:z):_))=sum$f((t:x):q:[b:z]):f w:[1|(l*r-1)*(t*b-1)==11]
f _=0

Hãy thử trực tuyến!

Không có regex. Khớp mẫu

.t.
l.r
.b.

ở góc trên cùng bên trái của ma trận, hãy lấy 1if (l*r-1)*(t*b-1)==11và đệ quy đi sang phải (thả .l.) và xuống (thả hàng đầu tiên). Nếu mẫu không thể được khớp (ở viền bên phải hoặc dưới cùng), hãy lấy a 0. Tổng tất cả kết quả.

Chỉnh sửa: -9 byte nhờ @xnor.


Tôi sẽ đề nghị 2^(l*r)+2^(t*b)==4100kiểm tra các con số, nhưng có vẻ như cả hai giải pháp của chúng tôi đều bị lừa 2,6thay thế 3,4.
xnor

@xnor nhưng các số bị giới hạn ở0..4
Οurous

3
@ Οurous Cảm ơn, tôi đã bỏ lỡ điều đó. Sau đó, các biểu thức số học có thể được tối ưu hóa hơn nữa, như (l*r-1)*(t*b-1)==11.
xnor

7

Perl, 70 byte

Bao gồm +2 cho 0p

Đưa ra ma trận đầu vào dưới dạng một khối các chữ số không có khoảng trắng trên STDIN:

perl -0pe '$_=map{/.$/m+y/1-4/3421/;/(?=1.{@{-}}(3.4|4.3).{@{-}}2)/sg}($_)x4'
0420
1324
2310
^D

Xoay chữ thập bằng cách xoay các chữ số


6

Võng mạc , 92 83 byte

L$v`(?<=((.))*).(.)..*¶(?<-1>.)*(.).(.).*¶(?<-2>.)*.(.)
$6$3$4$5
/../_O`.
1234|3412

Hãy thử trực tuyến! Giải trình:

L$v`(?<=((.))*).(.)..*¶(?<-1>.)*(.).(.).*¶(?<-2>.)*.(.)
$6$3$4$5

Tìm tất cả các hình vuông 3x3 chồng chéo. Một cái nhìn bắt được thụt lề hai lần để nó có thể được cân bằng trên dòng thứ hai và thứ ba. Đầu vào được coi là hình chữ nhật, vì vậy chúng tôi không phải kiểm tra xem các nhóm có cân bằng không. Các ô giữa dưới cùng / trên cùng và các ô giữa trái / phải được bắt giữ.

/../_O`.

Sắp xếp từng cặp ô theo thứ tự.

1234|3412

Đếm các mẫu hợp lệ còn lại.


5

Thạch , 26 byte

Z3Ƥṡ€3ẎµFḊm2ṙ-s2Ṣ€ṢFµ€ċ4R¤

Hãy thử trực tuyến!

Giải trình

Z3Ƥṡ€3ẎµFḊm2ṙ-s2Ṣ€ṢFµ€ċ4R¤  Main Link
 3Ƥ                         For each 3 rows
Z                           Zip the rows
   ṡ€3                      Get all arrangements of 3 consecutive columns from these rows. At this step, we have all 3x3 contiguous submatrices
      Ẏ                     Unwrap by one layer; previously grouped by rows, now ungrouped
       µ           µ€       For each 3x3 submatrix
        F                   Flatten it
         Ḋ                  Get rid of the first element
          m2                Take every second element (this only keeps the edges)
            ṙ-              Rotate right 1 element
              s2            Group into pairs; now the top and bottom are grouped and the left and right are grouped
                Ṣ€          Sort each pair
                  Ṣ         Sort the pairs
                   F        Flatten
                      ċ4R¤  Count the number of occurrences of range(4); i.e. [1,2,3,4]

-3 byte nhờ Jonathan Allan (2) và ông Xcoder (3) (đã hợp nhất)


@ngn lol dấu chấm có nghĩa là dưới D. Xấu của tôi, cố định.
HyperNeutrino

Lưu 2 byte bằng cách sử dụng ...Fµ€ċ4R¤chứ không phải ...Ḍµ€ċ1234(cũng lưu ý rằng 1234có thể đã được thay thế bằng ⁽¡ḋđể lưu một)
Jonathan Allan

26 byte bằng cách sử dụng Z3Ƥthay vì ṡ3Z€⁼J$µ€Sthay vì Ḍµ€ċ1234.
Ông Xcoder


5

Java 8, 135 133 131 byte

m->{int r=0,i=0,j;for(;++i<m.length-1;)for(j=1;j<m[i].length-1;)if(~(m[i-1][j]*m[i+1][j])*~(m[i][j-1]*m[i][++j])==39)r++;return r;}

-2 byte nhờ @tehtmi cho một công thức ngắn hơn: (l*r-1)*(t*b-1)==11tới~(l*r)*~(t*b)==39

Giải trình:

Hãy thử trực tuyến.

m->{                     // Method with integer-matrix parameter and integer return-type
  int r=0,               //  Result-integer, starting at 0
      i=0,j;             //  Index integers
  for(;++i<m.length-1;)  //  Loop over the rows, skipping the first and last
    for(j=1;j<m[i].length-1;)
                         //   Inner loop over the columns, skipping the first and last
      if(~(m[i-1][j]*m[i+1][j])*~(m[i][j-1]*m[i][++j])==39)
                         //    If (-(bottom*top)-1) * (-(left*right)-1) is exactly 39:
        r++;             //     Increase the result-counter by 1
  return r;}             //  Return the result-counter

1
Công thức ngắn hơn: ~(l*r)*~(t*b)==39(Haskell không có 1 byte ~rõ ràng.)
tehtmi

3

Husk , 23 byte

#ö§&¦ḣ4SδΛ≈↔Ċ2tΣṁoX3TX3

Hãy thử trực tuyến!

Giải trình

#ö§&¦ḣ4SδΛ≈↔Ċ2tΣṁoX3TX3  Implicit input, a list of lists of integers.
                     X3  Length-3 slices.
                ṁ        Map over them and concatenate:
                    T     Transpose,
                 oX3      then get length-3 slices.
                         Now we have a list of 3x3-arrays of the (transposed) input.
#ö                       Return number of 3x3-arrays that satisfy this:
                          Take m = [[0,3,0],[2,4,1],[1,4,0]] as an example.
               Σ          Concatenate: [0,3,0,2,4,1,1,4,0]
              t           Tail: [3,0,2,4,1,1,4,0]
            Ċ2            Take every second element: c = [3,2,1,4]
  §&                      c satisfies both of the following:
    ¦                     1) It contains every element of
     ḣ4                      the range [1,2,3,4].
       Sδ                 2) If you zip c
           ↔                 with its reverse,
         Λ                   then each corresponding pair
          ≈                  has absolute difference at most 1.
                         Implicitly print the result.

3

Thuốc nhuộm APL , 30 29 28 27 26 byte ( SBSC )

+/∘,{12 2⍷×∘⌽⍨⊢/4 2⍴⍵}⌺3 3

Hãy thử trực tuyến!


rất tốt! ⌽∘⊖×⊢có thể ngắn hơn 2 byte, bạn có thể đoán thế nào không?
ngn

@ngn Điều tôi thực sự muốn là một biểu tượng như ø;)
H.PWiz

@ngn Tôi có×∘⌽∘⊖⍨
H.PWiz

cái này ngắn hơn:(⌽×⊖)
ngn

Ồ, thật là thông minh, bạn đã chuyển bức ảnh tự sướng (...) sang bên trái ⊢/cho -1 khác. Tôi đã không nghĩ về điều đó. Trong tình huống này bạn không nên tin tôi.
ngn


2

Sạch , 255 ... 162 byte

Việc sử dụng các bộ lọc mẫu để hiểu, nhưng trong trường hợp này là không có lợi.

import StdEnv,StdLib
? =reverse
@ =transpose
t=tails
$m=sum[1\\f<-[id,@,?,?o@,@o?,@o?o@,?o@o?o@,?o@o?],[a,b,c:_]<-t(f m),[_,1:_]<-t a&[3,_,4:_]<-t b&[_,2:_]<-t c]

Hãy thử trực tuyến!

Xác định chức năng $, lấy [[Int]]và trả lại Int.

Đầu tiên, nó tạo ra tất cả các đối xứng của ma trận m(biến đổi thông qua f), lấy một tailstrong số đó có ba hàng trở lên và kiểm tra đồng bộ bao nhiêu trong ba bộ cột đầu tiên từ tailsmỗi hàng khớp với mô hình của chữ thập.

Điều này tương đương với việc đếm số lượng thứ tự tails- tailskhớp với mẫu [[_,1,_:_],[3,_,4:_],[_,2,_:_]:_]- lần lượt về mặt logic giống như kiểm tra xem, đối với mỗi ô trong ma trận, ô đó là góc trên bên trái của bất kỳ phép xoay nào.


2

Python 3, 120 118 byte

lambda x:sum({x[i+1][j]*x[i+1][j+2],x[i][j+1]*x[i+2][j+1]}=={2,12}for i in range(len(x)-2)for j in range(len(x[0])-2))

Hãy thử trực tuyến!

Sử dụng thực tế là tích của các cặp số đối diện trong thập giá phải lần lượt là 2 và 12 và so sánh với một tập hợp để bao gồm tất cả các hướng khác nhau. Lấy đầu vào là một mảng 2D của số nguyên.


1
bạn không cần phải tính f=điểm
ngn

2

Japt -x , 39 38 33 byte

ã3 Ëmã3 y x@[XXy]®g1 ë2 ×Ãn e[2C]

Hãy thử trực tuyến!

-1 byte nhờ @Shaggy.

-5 byte nhờ @ETHproductions bằng cách tái cấu trúc mảng.

Giải nén & Cách thức hoạt động

Uã3 mD{Dmã3 y xX{[XXy]mZ{Zg1 ë2 r*1} n e[2C]

       Input: 2D Array of numbers
Uã3    Generate an array of length 3 segments of U
mD{    Map... (D = 2D array of numbers having 3 rows)
Dmã3     Map over each row of D to generate an array of length 3 segments
y        Transpose; make an array of 3x3 subsections
xX{      Map and sum... (x = 3x3 2D array of numbers)
[XXy]      Array of X and X transposed
mZ{        Map...
Zg1 ë2 r*1   Take row 1, take 0th and 2nd elements, reduce with *
}
n          Sort the array
e[2C]      Equals [2,12] element-wise?
           Implicit cast from boolean to number

       Result: 1D array of counts
-x     Sum of the result array

Có nên vẫn có một cách tốt hơn để kiểm tra chéo ...


Bạn có thể lưu một byte bằng cách thay thế kiểm tra đẳng thức ở cuối bằng e[2C].
Xù xì

Bạn có thể thoát khỏi 2trong ë2?
Oliver
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.