Martin Ender는 최근 100K를 기록했으며 꽤 멋진 언어를 생각해 냈습니다 . 우리는 그들 중 하나 인 Hexagony (그리고 Retina에 대한 약간의 정규 표현식 ) 와 약간의 재미를 가질 것입니다.
간단한 개요로, Hexagony 그리드 를 입력하고 해당 그리드에 텍스트 문자열과 일치하는 경로가 있는지 판별 하는 프로그램을 작성해야 합니다.
생성
Hexagony는 다음 단계를 사용하여 텍스트 문자열에서 육각형을 생성합니다.
- 최소 육각형 크기를 계산하십시오 (끈의 길이를 취하고 가장 가까운 16 진수로 반올림하십시오 )
- 위의 크기의 육각형으로 텍스트 감싸기
- 로 나머지 위치를 채 웁니다
.
.
예를 들어, 텍스트 문자열은 abcdefghijklm
측면 길이 3의 육각형이 필요하므로 다음과 같이됩니다.
a b c
d e f g
h i j k l
m . . .
. . .
이제 6 각형으로 여행 할 수있는 6 가지 방향이 있습니다. 예를 들어, 위 육각형에서은에 e
인접합니다 abfjid
.
외장
또한 Hexagony에서는 육각형이 다음과 같이 랩핑됩니다.
. . . . . 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
위치).
이러한 경로를 사용하여 텍스트와 일치시킬 수 있습니다 (예 : 정규식) . 영숫자 문자는 자신과 .
일치하며 모든 문자와 일치합니다. 예를 들어, 경로가 aej..lgm
일치합니다 aej..lgm
, aejAAlgm
, aeja.lgm
, 또는 aej^%gm
.
입출력
프로그램은 어떤 순서로든 두 개의 문자열을 가져야합니다. 첫 번째 문자열은 비어 있지 않으며 영숫자로만 구성됩니다 [a-zA-Z0-9]
. 작동중인 육각형을 나타냅니다. 두 번째 문자열은 인쇄 가능한 문자로 구성됩니다.
주어진 텍스트 문자열과 일치하는 육각형 경로가 있으면 거짓 값을 반환해야합니다. 그렇지 않으면 거짓 값입니다.
테스트 사례
진실한 :
"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"
이것은 코드 골프 이므로 선호하는 언어로 가능한 한 빨리 답변하십시오.