จำลอง Friar


73

Tเขาเป็นพี่น้องชายจากคำสั่งของเซนต์ Golfus รัดกุมมีประเพณีของการท่องสวดมนต์สั้น ๆ เมื่อใดก็ตามที่พวกเขาเห็นใครบางคนให้เป็นเครื่องหมายกางเขน เนื่องจากความบาปในระดับสูงที่วัดได้ในหมู่นักท่องเที่ยวเมื่อเร็ว ๆ นี้พวกเขาได้ติดตั้งกล้องวงจรปิดในอารามและพวกเขาได้ว่าจ้างให้คุณช่วยให้พวกเขารักษาประเพณีเก่าแก่ที่ยังมีชีวิตอยู่ในยุคของ AI

งานของคุณคือการวิเคราะห์ผลลัพธ์จากซอฟต์แวร์ติดตามนิ้วของนักบวชและบอกว่ามีการสวดอ้อนวอนกี่ครั้ง อินพุตเป็นเมทริกซ์ที่มีจำนวนเต็มระหว่าง 0 ถึง 4 1,2,3,4 แสดงตำแหน่งของนิ้วมือในช่วงเวลาที่ต่อเนื่องกัน 0 หมายถึงไม่ใช่นิ้ว

One True Way TM ที่จะข้ามตนเองคือ:

.1.
3.4
.2.

("." ตรงกับตัวเลขใด ๆ ) อย่างไรก็ตามเนื่องจากความไม่แน่นอนเกี่ยวกับการหมุนของกล้องและการปรากฏตัวของพี่น้องออร์โธดอกตะวันออกที่เคร่งศาสนาในฝูงชน (ซึ่ง One True Way Way TMอยู่ในทิศทางตรงกันข้าม) คุณควรนับการหมุนและการสะท้อนทั้งหมดเช่นกัน:

.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.

ตัวเลขหนึ่งหลักอาจเป็นส่วนหนึ่งของการข้ามหลายครั้ง ช่วยพวกนักบวชกำหนดจำนวนครั้งที่ AI ของพวกเขาควรจะ.pray()นับจำนวนเมทริกซ์ย่อย 3x3 ข้างต้นที่มีอยู่ เขียนโปรแกรมหรือฟังก์ชั่น รับความสะดวกสบายในรูปแบบที่เหมาะสม

กรณีพันธสัญญา:

// 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

"ความสุขเป็นสิ่งที่สั้นที่สุดของความบกพร่องเพราะมันจะชนะอาณาจักรของผู้มีชื่อเสียง" หนังสือของ St Golfus 13:37

"เจ้าอย่าใช้ช่องโหว่เพราะเป็นงานที่ชั่วร้ายของลูซิเฟอร์" - ส่งไปยัง Meta 13: 666

การมองเห็นเล็กน้อยของผู้คนที่กำลังทำไม้กางเขน


ขอบคุณ @Tschallacka สำหรับการสร้างภาพข้อมูล


57
+1 สำหรับข้อสุดท้ายพวกเขาทำให้ฉันหัวเราะได้ดี: D
HyperNeutrino

6
ตัวเลขหนึ่งหลักสามารถเป็นส่วนหนึ่งของการกากบาทหลาย ๆ
Martin Ender

9
โอ้ที่น่ารักของพระเยซูคุณทำจำลอง Friar
Magic Octopus Urn

1
ทำไมการเชื่อมโยง“ T” ครั้งแรก
JakeGould

4
@ JakeGould เพื่อเชื่อมโยงคำถามนี้กับคำถามที่ "T" นำไปสู่
Erik the Outgolfer

คำตอบ:


19

สิ่งสกปรก 20 ไบต์

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

ลองออนไลน์!

การใช้งานสเป็คที่แท้จริงมาก:

  • n` ทำให้ Grime นับจำนวนของรูปย่อยย่อยของอินพุตที่ให้ผลการแข่งขัน
  • .\1./\3.\4/.\2. กำหนดตาราง 3x3:

    .1.
    3.4
    .2.
    

    ไหน.สามารถเป็นตัวอักษรใด ๆ

  • oOเป็นตัวปรับทิศทางซึ่งอนุญาตให้สี่เหลี่ยมนี้ปรากฏในการหมุนหรือการสะท้อนใด ๆ vถูกนำมาใช้เพื่อลดos ความสำคัญเพื่อที่ว่าเราไม่จำเป็นต้องวงเล็บรอบตาราง

7
ถูกต้องสำหรับการทดสอบสองครั้งแรก segfault สำหรับการทดสอบครั้งสุดท้าย ฉันเดาว่านี่น่าจะใช้ได้ตราบใดที่โปรแกรมนั้นถูกต้องในหลักการและถูก จำกัด ด้วยทรัพยากร
ก.ย.

FYI: ฉันเพิ่งทดสอบกรณีทดสอบล่าสุดและมันก็ใช้ได้ดีสำหรับฉัน
3D1T0R

16

หอยทาก , 17 16 ไบต์

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

ลองออนไลน์!

คำอธิบาย

Aทำให้หอยทากนับจำนวนเส้นทางการจับคู่ที่เป็นไปได้ในอินพุตทั้งหมด oกำหนดทิศทางเริ่มต้นไปยังทิศทางมุมฉาก (แทนที่จะไปทางตะวันออก) รูปแบบของตัวเองอยู่บนบรรทัดที่สอง:

\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 ไบต์

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

ลองออนไลน์!

ไม่มี regex การจับคู่รูปแบบ

.t.
l.r
.b.

ที่มุมซ้ายบนของเมทริกซ์ใช้ a 1if (l*r-1)*(t*b-1)==11และเรียกซ้ำไปทางขวา (drop .l.) และ down (drop first row) หากรูปแบบไม่สามารถจับคู่ (ที่ขอบด้านขวาหรือด้านล่าง) 0ใช้ รวมผลลัพธ์ทั้งหมด

แก้ไข: -9 ไบต์ขอบคุณ @xnor


ผมจะขอแนะนำ2^(l*r)+2^(t*b)==4100ในการตรวจสอบตัวเลข แต่ดูเหมือนว่าทั้งการแก้ปัญหาของเราจะถูกหลอกโดยในสถานที่ของ2,6 3,4
xnor

@xnor แต่ตัวเลขถูก จำกัด0..4
Οurous

3
@ Οurousขอบคุณฉันพลาดไป (l*r-1)*(t*b-1)==11จากนั้นการแสดงออกทางคณิตศาสตร์สามารถเพิ่มประสิทธิภาพมากยิ่งขึ้นเช่น
xnor

7

Perl, 70 ไบต์

รวมถึง +2 สำหรับ 0p

ให้อินพุตเมทริกซ์เป็นบล็อกตัวเลขโดยไม่มีช่องว่างใน STDIN:

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

หมุนกากบาทโดยหมุนตัวเลข


6

เรติน่า , 92 83 ไบต์

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

ลองออนไลน์! คำอธิบาย:

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

มองหาสี่เหลี่ยม 3x3 ที่ทับซ้อนกันทั้งหมด lookbehind จับการเยื้องสองครั้งเพื่อให้สามารถมีความสมดุลในบรรทัดที่สองและสาม การป้อนข้อมูลจะถือว่าเป็นรูปสี่เหลี่ยมดังนั้นเราไม่จำเป็นต้องตรวจสอบว่ากลุ่มสมดุล เซลล์กลางด้านล่าง / ด้านบนและเซลล์กลางด้านซ้าย / ขวาจะถูกจับ

/../_O`.

เรียงลำดับเซลล์แต่ละคู่ตามลำดับ

1234|3412

นับรูปแบบที่ถูกต้องที่เหลืออยู่


5

เยลลี่ 26 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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 ไบต์ขอบคุณ Jonathan Allan (2) และ Mr. Xcoder (3) (รวมแล้ว)


@ngn ฮ่า ๆ Dจุดจะหมายถึงการอยู่ภายใต้ ฉันไม่ดีคงที่
HyperNeutrino

บันทึก 2 ไบต์โดยใช้...Fµ€ċ4R¤แทน...Ḍµ€ċ1234(โปรดทราบว่า1234อาจถูกแทนที่ด้วย⁽¡ḋเพื่อบันทึกหนึ่งรายการ)
Jonathan Allan

26 ไบต์โดยใช้Z3Ƥแทนṡ3Z€และแทน⁼J$µ€S Ḍµ€ċ1234
Mr. Xcoder

@JanathanAllan โอ้ยอดเยี่ยมขอบคุณ
HyperNeutrino

5

Java 8, 135 133 131 ไบต์

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 ไบต์ขอขอบคุณ@tehtmiสำหรับสูตรที่สั้นกว่า: (l*r-1)*(t*b-1)==11ถึง~(l*r)*~(t*b)==39

คำอธิบาย:

ลองออนไลน์

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
สูตรที่สั้นกว่า: ~(l*r)*~(t*b)==39(Haskell ไม่มีขนาด 1 ไบต์~)
tehtmi

3

Husk , 23 ไบต์

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

ลองออนไลน์!

คำอธิบาย

#ö§&¦ḣ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

Dyalog APL , 30 29 28 27 26 ไบต์ ( SBSC )

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

ลองออนไลน์!


ดีมาก! ⌽∘⊖×⊢อาจจะสั้นลง 2 ไบต์คุณสามารถเดาได้อย่างไร
ngn

@ngn สิ่งที่ฉันต้องการคือสัญลักษณ์เช่นø;)
H.PWiz

@ngn ฉันมี×∘⌽∘⊖⍨
H.PWiz

สั้นกว่านี้:(⌽×⊖)
1818

โอ้นั่นฉลาดคุณย้ายเซลฟี่ (... ⍨) ไปทางซ้ายของ⊢/อีก -1 ฉันไม่คิดอย่างนั้น ในสถานการณ์เช่นนี้คุณไม่ควรให้เครดิตกับฉัน
ngn


2

ทำความสะอาด , 255 ... 162 ไบต์

มันไม่เป็นประโยชน์ที่มักจะใช้ตัวกรองรูปแบบในความเข้าใจ แต่ในกรณีนี้มันเป็น

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]

ลองออนไลน์!

กำหนดฟังก์ชั่น$การใช้และกลับมา[[Int]]Int

ก่อนอื่นมันจะสร้างสมมาตรทั้งหมดของเมทริกซ์m(เปลี่ยนผ่านf) รับแถวtailsที่มีสามแถวขึ้นไปและตรวจสอบจำนวนคอลัมน์สามชุดแรกจากtailsแถวแต่ละแถวให้ตรงกับรูปแบบของกางเขน

นี่เทียบเท่ากับการนับจำนวนของการจับคู่รูปแบบที่สั่งtailsซึ่งtailsตรงกับ[[_,1,_:_],[3,_,4:_],[_,2,_:_]:_]เหตุผลเหมือนกับการตรวจสอบว่าสำหรับแต่ละเซลล์ในเมทริกซ์เซลล์นั้นเป็นมุมซ้ายบนของการหมุนของไม้กางเขน


2

Python 3, 120 118 ไบต์

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))

ลองออนไลน์!

ใช้ความจริงที่ว่าผลิตภัณฑ์ของจำนวนคู่ที่ตรงกันข้ามกันในกางเขนต้องเป็น 2 และ 12 ตามลำดับและเปรียบเทียบกับชุดที่ครอบคลุมการหมุนที่แตกต่างกันทั้งหมด รับอินพุตเป็นอาร์เรย์จำนวนเต็ม 2 มิติ


1
คุณไม่ต้องนับf=คะแนน
ngn

2

Japt -x , 39 38 33 ไบต์

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

ลองออนไลน์!

-1 ไบต์ขอบคุณ @Shaggy

-5 ไบต์ขอบคุณ @ETHproductions โดยการปรับโครงสร้างอาร์เรย์อีกครั้ง

เอาออกแล้วมันทำงานอย่างไร

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

ควรยังคงเป็นวิธีที่ดีกว่าในการทดสอบสำหรับข้าม ...


e[2C]คุณสามารถบันทึกไบต์โดยการแทนที่การตรวจสอบความเท่าเทียมกันในตอนท้ายด้วย
Shaggy

คุณสามารถกำจัดของ2ในë2?
Oliver
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.