มาร์ตินเอนเดอร์เพิ่งตี 100K และมีภาษาที่ยอดเยี่ยม เรากำลังจะได้สนุกไปกับหนึ่งในนั้นคือHexagony (และ regex สำหรับRetina )
ในภาพรวมโดยย่อคุณต้องเขียนโปรแกรมที่ป้อนกริด Hexagony และกำหนดว่ามีเส้นทางบนกริดนั้นที่ตรงกับสตริงข้อความหรือไม่
ฝ่ายผลิต
Hexagony สร้าง hexagons จากสตริงข้อความโดยใช้ขั้นตอนต่อไปนี้:
- คำนวณขนาดหกเหลี่ยมขั้นต่ำ (ใช้ความยาวของสตริงและปัดเศษขึ้นเป็นเลขฐานสิบหกที่ใกล้ที่สุด)
- การตัดข้อความเป็นรูปหกเหลี่ยมของขนาดด้านบน
.
กรอกสถานที่ที่เหลือด้วย
ตัวอย่างเช่นสตริงข้อความabcdefghijklm
ต้องมีรูปหกเหลี่ยมด้านยาว 3 จึงกลายเป็น:
a b c
d e f g
h i j k l
m . . .
. . .
สังเกตว่ามี 6 ทิศทางที่เป็นไปได้ที่คุณสามารถเดินทางเป็นรูปหกเหลี่ยมได้ ยกตัวอย่างเช่นในรูปหกเหลี่ยมข้างต้นอยู่ติดกับe
abfjid
ห่อ
นอกจากนี้ใน Hexagony, hexagons wrap:
. . . . . 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 . .
หากคุณดูตัวอย่างที่ 2 และ 4 ให้สังเกตว่า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
Input / Output
โปรแกรมของคุณควรใช้สองสาย (ในลำดับใดก็ได้) [a-zA-Z0-9]
สายแรกจะว่างและประกอบด้วยตัวอักษรและตัวเลขเท่านั้น สิ่งนี้จะแสดงถึงรูปหกเหลี่ยมที่คุณกำลังใช้งาน สตริงที่สองจะประกอบด้วยอักขระที่พิมพ์ได้
คุณจำเป็นต้องส่งกลับค่าความจริงถ้ามีเส้นทางในรูปหกเหลี่ยมที่ตรงกับสตริงข้อความที่กำหนดมิฉะนั้นเป็นค่าเท็จ
กรณีทดสอบ
Truthy:
"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"
Falsy:
"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"
นี่คือรหัสกอล์ฟเพื่อให้คำตอบของคุณสั้นที่สุดในภาษาที่คุณชื่นชอบ