ゼリー、14 12バイト
J’ƲœṗZ⁻¦µU⁼
オンラインでお試しください!
バックグラウンド
入力文字列の0から始まるインデックスを調べることから始めます。
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
三角形の行を取得するために、我々はインデックスの前に文字列を分割することができる1、+ 3 = 4 1、1 + 3 + 5 = 9、及び1 + 3 + 5 + 7 = 16。ので、(N + 1)²=n²+(2N + 1)、これらの和を正確インデックスリスト内の正、完璧な正方形です。文字列も0の前に分割する場合、これは完全な正方形であるすべての0ベースのインデックスの前に分割するのと同じくらい簡単です。
分割後、次の文字列を取得します。
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
次に、最初の空の文字列を最初の列のすべての文字に置き換えます。
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
タスクは、すべての文字列を反転して同じ文字列配列が生成されるかどうかをチェックするようになりました。
使い方
最初にJ
入力文字列のすべての1ベースのインデックスを生成しJ
、次にそれらをデクリメントして’
すべての0ベースのインデックスを生成します。Ʋ
すべての0ベースのインデックスの直角度をテストします。上記の例では、これにより次のブール配列が生成されます。
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
次に、œṗ
入力文字列を分割するために呼び出します。たとえば、
H H e H H e l e H H e l l l e H H e l l o l l e H
すべて1の前(実際には、すべての真実の要素)。この例では、次の文字列配列が生成されます。
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
間違いなくこの答えの中で最も興味深い部分です。Z1¦
最初に、より簡単なものを分析しましょう。
¦
あるスパース迅速に。具体的1
にZ
はこの場合、スタックから2つのリンクを消費します。最初にZ
引数に適用されます:前からの文字列配列。Z
あるジップ原子と列により文字列配列/ 2Dの文字列を読み出し、得
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
以前は入力文字列の左側で、文字列配列の最初の列が最初の文字列になりました。
ここ¦
で1
、単一のインデックス1を覗いて見つけます。したがって、元の文字列配列の最初の文字列は、Z
;の戻り値の最初の文字列に置き換えられます。他のインデックスの文字列は影響を受けません。
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
この配列をAと呼びましょう。
のZ⁻¦
代わりに使用しましたがZ1¦
、これには違いはありません。⁻
文字列配列と入力文字列の不等式を比較し、等しくないため1を返します。2つの違いは、2 Z⁻¦
項であるということです。つまり⁻
、のœṗZ⁻¦
代わりに書くことができœṗ¹Z1¦
ます。これは、dyad(œṗ
)に続くモナド(œṗ¹Z1¦
)がフォークである(モナドがチェーンの引数/入力文字列に適用され、戻り値がに正しい引数として渡されるœṗ
)一方で、dyadの後に別のダイアドが続くためです(またはチェーンの最後)はフックです。つまり、その正しい引数はチェーンの引数です。
あとは、回文性をチェックするだけです。µ
引数がAである新しい(単項)チェーンを開始します。upend原子U
逆転するすべての文字列A(ただし、Aそのもの)、その後⁼
で結果を比較するA平等のために。返されるブール値1は、完全な回文三角形を示します。他の文字列は0を返します。