修道士シミュレーター


73

Tは、彼らが誰かが作る見るたびに、彼セントGolfusの順簡潔からの兄弟は短い祈りを暗唱の伝統を持っている十字架の印を。最近観光客の間で測定された罪のレベルが高いため、彼らは修道院にCCTVを設置し、AIの時代に古い伝統を生き続けるためにあなたを雇いました。

あなたの仕事は、兄弟の指追跡ソフトウェアからの出力を分析し、どれだけの祈りが必要かを伝えることです。入力は、0〜4の整数を含む行列です。1,2,3,4は、連続する瞬間の指の位置を表します。0は非指を表します。

自分自身を横断するOne True Way TMは次のとおりです。

.1.
3.4
.2.

(「。」は任意の数字に一致します)。ただし、カメラの回転に関する不確実性と、群衆の中に敬意を表す東方正教会の同胞(One True 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.

1つの数字が複数の十字の一部である場合があります。.pray()上記の3x3サブマトリックスがいくつ存在するかを数えることで、兄弟がAIの回数を判断するのを助けます。プログラムまたは関数を作成します。合理的で便利な形式で入力してください。

遺言の場合:

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

「最短の最短者に祝福されます、それは賛成の王国を勝ち取るからです。」-聖ゴルフの書13:37

「抜け穴を使ってはならない。ルシファーの邪悪な作品だからだ」-メタへの手紙13:666

十字架を作る人々のわずかな可視化


@Tschallackaの視覚化に感謝します。


57
最後の詩の+1、彼らは私に良い笑いを与えた:D
HyperNeutrino

6
1つの数字を複数の十字の一部にできますか?
マーティンエンダー

9
ああ、甘いイエスよ、あなたは修道士シミュレーターを作りました。
魔法のタコ

1
最初の「T」がリンクされているのはなぜですか?
JakeGould

4
@JakeGouldこの質問を「T」が導く質問にリンクするように。
エリックアウトゴルファー

回答:


19

グライム、20バイト

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

オンラインでお試しください!

仕様の非常にリテラルな実装:

  • n` Grimeが一致をもたらす入力のサブ長方形の数を数えるようにします。
  • .\1./\3.\4/.\2. 3x3の正方形を定義します:

    .1.
    3.4
    .2.
    

    どこ.でも任意の文字にすることができます。

  • oOは、この長方形を任意の回転または反射で表示できるようにする方向修飾子です。v下に使用されているo私たちは広場の周りに括弧を必要としないように、sの優先。

7
最初の2つのテスト、最後のセグメンテーション違反を修正します。プログラムが原則として正しく、リソースによってのみ制限されている限り、これは問題ないはずです。
-ngn

参考までに、最後のテストケースをテストしたところ、うまくいきました。
3D1T0R

16

カタツムリ17 16バイト

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

オンラインでお試しください!

説明

ASnailが入力全体で一致する可能性のあるパスの数をカウントするようにします。o開始方向を任意の直交方向に設定します(東向きではなく)。パターン自体は2行目にあります。

\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

ハスケル、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

オンラインでお試しください!

正規表現なし。パターンマッチ

.t.
l.r
.b.

マトリックスの左上隅で、1if (l*r-1)*(t*b-1)==11を取得し、再帰的に右(ドロップ.l.)および下(最初の行をドロップ)に移動します。パターンを一致させることができない場合(右または下の境界で)を取ります0。すべての結果を合計します。

編集:@xnorのおかげで-9バイト。


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の正方形をすべて探します。後読みは、インデントを2回キャプチャし、2行目と3行目でバランスを取ることができます。入力は長方形であると想定されるため、グループのバランスを確認する必要はありません。次に、下/上の中央のセルと左/右の中央のセルがキャプチャされます。

/../_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]

Jonathan Allan(2)とMr. Xcoder(3)のおかげで-3バイト(合併)


@ngn lolドットはD。私の悪い、修正済み。
ハイパーニュートリノ

...Fµ€ċ4R¤ではなく2バイトを保存します...Ḍµ€ċ1234(1つを保存するために1234置き換えることもできます⁽¡ḋ
ジョナサンアラン

Z3Ƥ代わりにṡ3Z€およびの⁼J$µ€S代わりに使用することで26バイトḌµ€ċ1234
氏Xcoder

@ジョナサンアランああクール、ありがとう
-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

、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 APL30 29 28 27 26バイト(SBSC

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

オンラインでお試しください!


とても良い!⌽∘⊖×⊢2バイト短くなる可能性がありますが、どのように推測できますか?
-ngn

@ngn本当に欲しいのはøのような記号です;)
H.PWiz

@ngn私が持っている×∘⌽∘⊖⍨
-H.PWiz

これは短いです:(⌽×⊖)
ngn

ああ、それは賢い、あなたは自分撮り(...⍨)を左に移動して⊢/、さらに-1にした。私はそれを考えていませんでした。この状況では、私を信用しないでください。
ngn


2

Clean255 ... 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)、tails3行以上の行を取り、各行の最初の3セットの列のうち何がtailsクロスのパターンに一致するかを同期的にチェックします。

これは、順序付けられた数カウントと等価であるtails-of- 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でなければならないという事実を使用し、すべての異なる方向をカバーするセットと比較します。入力を整数の2D配列として受け取ります。


1
f=スコアにカウントする必要はありません
ngn

2

Japt -x39 38 33バイト

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

オンラインでお試しください!

@Shaggyのおかげで-1バイト。

配列のリファクタリングによる@ETHproductionsのおかげで-5バイト。

開梱と仕組み

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]
シャギー

あなたは取り除くことができます2ではë2
オリバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.