マーティン・エンダーは最近100Kに達し、いくつかの非常に素晴らしい言語を思いついた。私たちは、そのうちの一つ、と楽しみのビットを持っているつもりだHexagony(やのための正規表現のビット網膜)
簡単な概要として、六角形のグリッドを入力し、そのグリッド上にテキストの文字列に一致するパスがあるかどうかを判断するプログラムを作成する必要があります
生成中
Hexagonyは、次の手順を使用してテキスト文字列から六角形を生成します。
- 最小六角サイズを計算します(文字列の長さを取り、最も近い16進数に切り上げます)
- 上記のサイズの六角形にテキストをラップ
- 残りの場所をで埋め
.
ます。
たとえば、テキストの文字列にabcdefghijklm
は辺の長さが3の六角形が必要なので、次のようになります。
a b c
d e f g
h i j k l
m . . .
. . .
ここで、六角形を移動できる方向は6つあることに注意してください。たとえば、上の六角形でe
は、に隣接していabfjid
ます。
ラッピング
さらに、六角形では、六角形が次を包みます。
. . . . . a . . . . f . . a . .
a b c d e . . b . . . . g . . . b . . f
. . . . . . g . . c . . . . h . . a . c . . g .
. . . . . . . . h . . d . . . . u . . b . . d . . h . .
f g h i j k . i . . e . . j . . c . e . . i . .
. . . . . . j . . f k . . d . . . j . .
. . . . . k . . . . e . . k . .
あなたは第二と第四の例を見れば、予告どのようにa
してk
あなたは異なる方向にラッピングされているという事実にもかかわらず、同じスポットです。 このため、これらのスポットは他の5つの場所にのみ隣接しています。
これを明確にするために:
a b c d
e f g h i
j k l m n o
p q r s t u v
w x y z A B
C D E F G
H I J K
- エッジはそれらの反対側の隣にラップします(
b->I
およびG->j
)。 - 上下の角は、反対側の中央の角に折り返され、上下(
d->K,p
およびH->a,v
)になります。 - 中央の角は上下の角の両方に折り返します(
v->a,H
)
パス
パス同じ場所に戻ることなく、隣接する位置のシーケンスです。
a b c
d e f g
h i f k l
m . . .
. . .
上記の六角形でaefkgm
は、有効なパスです。ただし、abfd
は有効なパスf
でd
はなく(隣接していない)、abea
有効ではありません(a
場所に戻ります)。
これらのパスを使用して、テキスト(regexなど)に一致させることができます。英数字はそれ自体(およびそれ自体のみ)に.
一致し、任意の文字に一致します。例えば、パスがaej..lgm
一致しaej..lgm
、aejAAlgm
、aeja.lgm
、またはaej^%gm
。
入出力
プログラムは、2つの文字列を(任意の順序で)受け取る必要があります。最初の文字列は空ではなく、英数字のみで構成されます[a-zA-Z0-9]
。これは、操作している六角形を表します。2番目の文字列は、印刷可能な文字で構成されます。
与えられたテキストの文字列に一致する六角形のパスがある場合は真理値を返し、それ以外の場合は偽の値を返す必要があります。
テストケース
真実:
"a","a"
"ab","a"
"ab","b"
"ab","ba"
"ab","aba"
"ab","&"
"ab","#7.J!"
"ab","aaaaaa"
"ab","bgjneta"
"ab","cebtmaa"
"abcdefg","dfabcg"
"AbCDeFG","GCbAeFD"
"aaaabbb","aaababb"
"abcdefghijklmnopqrs","alq"
"abcdefghijklmnopqrs","aqnmiedh"
"abcdefghijklmnopqrs","adhcgkorbefjimnqlps"
"11122233344455","12341345123245"
"abcdefgh","h%a"
"abcdefghijklm","a)(@#.*b"
"abcdefghijklm","a)(@#.*i"
"abcdefghij","ja"
"abcdefghijklmno","kgfeia"
"abcdefghijklmno","mmmmmiea"
"abcdefghijklmno","mmmmmlae"
"abcdefghijklmno","ja"
"abcdefghijklmnopqrs","eijfbadhmnokgcsrql"
偽物:
"a","b"
"a","%"
"a","."
"a","aa"
"a","a."
"ab","#7.J!*"
"ab","aaaaaaa"
"ab","aaaabaaa"
"ab","123456"
"abcdefg","bfgedac"
"abcdefg","gecafdb"
"abcdefg","GCbaeFD"
"aaaabbb","aaaaabb"
"abcdefghijklmnopqrs","aqrcgf"
"abcdefghijklmnopqrs","adhlcgknbeifjm"
"abcdefghijklmnopqrs","ja"
"abcdefghijklm","a)(@#.*&"
"abcdefghijklmno","a)(@bfeijk"
"abcdefghijklmno","kgfeic"
"abcdefghijklmno","mmmmmmiea"
これはcode-golfなので、お気に入りの言語でできるだけ短く答えてください。