Friar simülatörü


73

T o St Golfus Özlü düzeninden kardeşlerden de birilerinin yapmak gördüklerinde kısa bir dua okuyarak geleneğine sahip haç işareti . Son zamanlarda turistler arasında ölçülen günah düzeyinin yüksek olmasından dolayı, manastıra CCTV kurmuşlar ve eski geleneği AI çağında yaşamalarına yardımcı olmak için sizi işe aldılar.

Göreviniz, meraklıların parmak takip yazılımlarından çıkan çıktıları analiz etmek ve kaç tane dua gerektiğini söylemek. Girdi, 0-4 arasında bir tamsayı içeren bir matristir, 1,2,3,4, zamanın ardışık momentlerinde parmakların pozisyonlarını temsil eder. 0, parmak olmayanları temsil eder.

Kendini geçmek için One True Way TM :

.1.
3.4
.2.

("." herhangi bir rakamla eşleşir). Ancak, kameranın dönüşü ve kalabalığın içindeki dindar Doğu Ortodoks kardeşlerinin mevcudiyeti konusundaki belirsizlik nedeniyle (One True Way TM ters yönde olan), tüm rotasyonları ve yansımaları da hesaba katmalısınız:

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

Bir hane çoklu çarpıların bir parçası olabilir. .pray()Yukarıdaki 3x3 alt-matriküllerin ne kadarının mevcut olduğunu sayarak, meraklıların AI'larının sayısını kaç kez belirlemelerine yardımcı olun . Bir program veya işlev yazın. Herhangi bir makul uygun formda girişi alın.

Ahit davaları:

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

“Kutsanmış olan en kısa olanı kutsayın, çünkü o, yükseliş krallığını kazanır.” St Golfus'un Kitabı 13:37

"Siz boşluk kullanmayacaksınız, çünkü Lucifer'in kötü işleri." -Meta 13: 666'ya Mektup

Haç yapan insanların hafif görselleştirme


Görüntüleme için @Tschallacka teşekkürler.


57
Sonunda ayetler için +1, bana iyi bir kahkaha
attılar

6
Bir hane çoklu çarpıların bir parçası olabilir mi?
Martin Ender,

9
Aman Tanrım, bir Friar simülatörü yaptın.
Magic Octopus Urn

1
İlk “T” neden bağlantılı?
JakeGould

4
@JakeGould Bu soruyu "T" nin yönlendirdiği soruya bağlamak için.
Outgolfer Erik,

Yanıtlar:


19

Kir , 20 bayt

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

Çevrimiçi deneyin!

Spec bir çok değişmez bir uygulama:

  • n` Grime, eşleşmeyi sağlayan girdinin alt dikdörtgen sayısını sayın.
  • .\1./\3.\4/.\2. 3x3 karesini tanımlar:

    .1.
    3.4
    .2.
    

    .Herhangi bir karakter nerede olabilir.

  • oObu dikdörtgenin herhangi bir döndürme veya yansımada görünmesini sağlayan bir yönlendirme değiştiricisidir. Bu v, os önceliğini düşürmek için kullanılır, böylece karenin etrafındaki parantezlere ihtiyacımız olmaz.

7
İlk iki test için doğru, sonuncu için segfault. Program ilke olarak doğru ve sadece kaynaklarla sınırlı olduğu sürece, bunun doğru olması gerektiğini düşünüyorum.
ngn

Bilginize: Son test olayını yeni test ettim ve bu benim için iyi geçti.
3D1T0R, 30:18

16

Salyangozlar , 17 16 bayt

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

Çevrimiçi deneyin!

açıklama

ASalyangozların tüm girdideki olası eşleşme yollarının sayısını saymasını sağlar. obaşlangıç ​​yönünü herhangi bir ortogonal yöne ayarlar (yalnızca doğuya değil). Desenin kendisi ikinci satırdadır:

\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 bayt

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

Çevrimiçi deneyin!

Regex yok. Desen eşleşmesi

.t.
l.r
.b.

matrisin sol üst köşesinde, bir 1if al (l*r-1)*(t*b-1)==11ve tekrar tekrar sağa (bırak .l.) ve aşağıya git (ilk satırı bırak). Desen eşleşemiyorsa (sağ veya alt sınırda) a 0. Tüm sonuçları topla.

Düzenleme: @ xnor sayesinde -9 bayt.


Ben önerecektim 2^(l*r)+2^(t*b)==4100numaralarını kontrol etmek, ama öyle görünüyor hem bizim çözümleri ile kandırdın edilmektedir 2,6yerine 3,4.
xnor

@xnor ancak sayılar sınırlı0..4
Οurous

3
@ Οurous Teşekkürler, bunu özledim. Ardından, aritmetik ifadeler gibi daha da optimize edilebilir (l*r-1)*(t*b-1)==11.
xnor

7

Perl, 70 bayt

İçin +2 içerir 0p

Giriş matrisini STDIN'de boşluksuz basamak bloğu olarak verin:

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

Basamağı döndürerek haçı döndürür


6

Retina , 92 83 bayt

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

Çevrimiçi deneyin! Açıklama:

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

Örtüşen tüm 3x3 kareleri arayın. Bir gözbaşı girintiyi iki kez yakalar, böylece ikinci ve üçüncü çizgilerde dengelenebilir. Girdilerin dikdörtgen olduğu varsayılmıştır, bu yüzden grupların dengelerini kontrol etmemize gerek yoktur. Alt / üst orta hücreler ve sol / sağ orta hücreler daha sonra yakalanır.

/../_O`.

Her bir hücre çiftini sırayla sıralayın.

1234|3412

Kalan geçerli desenleri sayın.


5

Jöle , 26 bayt

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

Çevrimiçi deneyin!

açıklama

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]

Jonathan Allan (2) ve Mr. Xcoder (3) (birleştirilmiş) sayesinde -3 bayt


@ngn lol noktanın altında olması amaçlanmıştır D. Benim hatam düzeltildi.
HyperNeutrino,

Kullanılarak 2 bayt kaydet ...Fµ€ċ4R¤yerine ...Ḍµ€ċ1234(aynı zamanda unutmayın 1234yerini olabilirdi ⁽¡ḋbirini kurtarmak için)
Jonathan Allan

26 baytZ3Ƥ yerine ṡ3Z€ve ⁼J$µ€Syerine kullanarak Ḍµ€ċ1234.
Bay Xcoder


5

Java 8, 135 133 131 bayt

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 bayt sayesinde @tehtmi daha kısa bir formül: (l*r-1)*(t*b-1)==11ile~(l*r)*~(t*b)==39

Açıklama:

Çevrimiçi deneyin.

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
Daha kısa formül: ~(l*r)*~(t*b)==39(Haskell'in ~görünüşe göre 1 byte'ı yoktur .)
18:18

3

Kabuğu , 23 bayt

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

Çevrimiçi deneyin!

açıklama

#ö§&¦ḣ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 bayt ( SBSC )

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

Çevrimiçi deneyin!


çok iyi! ⌽∘⊖×⊢2 bayt daha kısa olabilir, nasıl olduğunu tahmin edebilir misiniz?
ngn

@ngn Gerçekten istediğim şey ø;) gibi bir semboldür
H.PWiz

@ ngn×∘⌽∘⊖⍨
H.PWiz

bu daha kısadır:(⌽×⊖)
ngn

Oh, çok zekice, sen özçekimi (... ⍨) bir tane daha bıraktı ⊢/. Bunu düşünmedim. Bu durumda bana kredi vermemelisin.
ngn


2

Temiz , 255 ... 162 bayt

Kalıp süzgeçlerini anlamada sıkça kullanmanın faydası yoktur, ancak bu durumda öyledir.

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]

Çevrimiçi deneyin!

Fonksiyonunu tanımlar $alarak [[Int]]ve dönen Int.

İlk önce üç veya daha fazla sıraya sahip olan matrisin tüm simetrilerini oluşturur m(dönüşüm yoluyla f), tailsher üç satırdan ilk üç sütun kümesinin kaçının tailsçarpı deseni ile eşleştiğini eşzamanlı olarak kontrol eder .

Bu, tailssırayla tailseşleşen [[_,1,_:_],[3,_,4:_],[_,2,_:_]:_]sırayla - sayının sayılmasına eşdeğerdir - bu da mantıksal olarak, matristeki her bir hücre için, o hücrenin haç dönmesinin herhangi bir sol üst köşesi olup olmadığını kontrol etmekle aynıdır.


2

Python 3, 120 118 bayt

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

Çevrimiçi deneyin!

Çaprazdaki zıt sayı çiftlerinin çarpımının sırasıyla 2 ve 12 olması gerektiği gerçeğini kullanır ve tüm farklı yönelimleri kapsayacak bir kümeyle karşılaştırır. Girdiyi bir tam sayı dizisi olarak alır.


1
Eğer saymak gerekmez f=puanında
ngn

2

Japt -x , 39 38 33 bayt

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

Çevrimiçi deneyin!

@Shaggy sayesinde -1 bayt.

Diziyi yeniden düzenleyerek @ETHproductions sayesinde -5 bayt.

Ambalajsız ve Nasıl Çalışır?

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

Orada gereken hala haç test etmek için iyi bir yol olması ...


Sonunda eşitlik kontrolünün yerini alarak bir bayttan tasarruf edebilirsiniz e[2C].
Shaggy

Eğer kurtulmak Can 2in ë2?
Oliver,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.