การเป็นโปรแกรมเมอร์การดูพวกเราดิ้นรนไม่น่าสนใจมาก วันนี้เราเปลี่ยนสิ่งนั้น! ในการท้าทายนี้คุณจะมีส่วนร่วมและยืดหยุ่น hexaflexagons
เกี่ยวกับ
สำหรับวิดีโอแนะนำดูวิดีโอวิหารบน flexagons
รูปทรงโค้งงอเป็นรูปทรงที่คุณสามารถโค้งงอเพื่อเผยให้เห็นใบหน้าอื่นนอกเหนือจากด้านบนและด้านล่าง เราสร้าง hexahexaflexagon ซึ่งมี 6 หน้า ดูภาพด้านล่างเกี่ยวกับวิธีพับ hexahexaflexagon จากแถบกระดาษ
A
แสดงให้เห็นถึงทั้งสองด้านของแถบ สามเหลี่ยมสีขาวสองอันติดกัน นี่คือวิธีที่คุณจะดิ้น:
ด้านล่างนี้เป็นแผนผังของรัฐที่เป็นไปได้และความสัมพันธ์:
วงกลมสีแสดงถึงสามเหลี่ยม 6 รูปด้วยหมายเลขเดียวกันจากภาพแรก เส้นแบ่งแต่ละอันมีสองสี - ด้านล่างส่วนใหญ่แสดงถึงด้านหลัง (สิ่งที่คุณจะเห็นว่าคุณจะพลิกงอของคุณไปรอบ ๆ ) ซึ่งคุณไม่ต้องพิจารณาในความท้าทายนี้
วงกลมสีเทาในพื้นหลังแทนวิธีที่คุณสามารถดิ้น flexagon คุณอยู่ในสถานะใดก็ตาม: มี 4 วิธีที่แตกต่างกันจะดิ้นมันที่เราเรียกเหล่านี้Left
, Right
, และUp
Down
คุณไม่ได้งอตามทิศทางเหล่านี้จริง ๆ บิตที่สำคัญคือบางอันอยู่ตรงข้ามกัน
หากคุณอยู่ในศูนย์กลางคุณสามารถใช้Left
และRight
ไปยังศูนย์อื่น ๆ จะได้รับจากศูนย์ที่คุณใช้และUp
Down
หากคุณไม่ได้อยู่ตรงกลางคุณจะไม่สามารถใช้งานได้Left
Right
หรือ
Left/Down = clockwise
Right/Up = anti-clockwise
ท้าทาย
สร้างฟังก์ชั่นหรือโปรแกรมที่ใช้เป็นอินพุตสิ่งที่ควรจะอยู่บนใบหน้าด้านหน้า 18 หน้าและใบหน้าด้านหลัง 18 รูปของเฟล็กกอนลำดับของซ้ายขวาขวาขึ้นและลงและกลับมามองเห็นใบหน้าทั้ง 8 หลังจากที่โค้งงอ
การคำนวณตัวอย่างที่ซับซ้อน:
flex "hexaflexaperplexia"
"flexagationdevices"
[Right, Right, Left]
Divide a strip of paper into 18 triangles:
1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3 Front
4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6 Back
Write "hexaflexaperplexia" on the front of the paper strip:
1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3
hexaflexaperplexia
123123123123123123
h a e p p x Face 1, Initially the front face
e f x e l i Face 2, Initially the back face
x l a r e a Face 3, Initially hidden
Write "flexagationdevices" on the back of the paperstrip:
4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6
flexagationdevices
445566445566445566
fl at ev Face 4, up from 3
ex io ic Face 5, up from 2
ag nd es Face 6, up from 1
Flex it [Right, Right, Left]
The initial visible face is 1: "haeppx"
flexing Right ..
The current visible face is 2: "efxeli"
flexing Right ..
The current visible face is 3: "xlarea"
flexing Left ..
The current visible face is 2: "efxeli"
flexed [Right, Right, Left]!
outputting "efxeli"
ตัวอย่างการนำไปใช้: http://jdoodle.com/a/18A
อินพุตและเอาต์พุตที่คาดหวัง:
> hexaflexaperplexia flexagationdevices RRL
= efxeli
> loremipsumdolorsit hexaflexamexicania RUU
= riuort
> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(
> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278
กฎระเบียบ
- คุณสามารถรับอินพุตและส่งคืนเอาต์พุตในวิธีที่สมเหตุสมผล
- หากอินพุตเป็นไปไม่ได้คุณควรระบุในบางวิธีที่แตกต่างจากเอาต์พุตปกติ
- ช่องโหว่มาตรฐานใช้
Codegolf
นี่คือ รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
|b/=0=[]!!1
คืออะไร? คุณสามารถบันทึกการเขียนใหม่บางฟังก์ชั่นในรูปแบบ pointfree ได้ไม่กี่ไบต์:\(a,_)(b,_)->a==b
->(.fst).(==).fst
,(!)=(q.).zip.cycle