คำถามนี้เป็นแรงบันดาลใจคำถามเควิน Cruijssen ของ
ตอนนี้เราวางพรมออกแล้ว งานของคุณคือการเขียนโปรแกรมที่ใช้สตริงและส่งกลับเกลียวที่ทำจากสายนี้ (แสดงถึงพรมที่ถูกรีดจากด้านข้าง)
ขั้นตอนสำหรับการรีดพรมหนึ่งขั้นตอนมีดังต่อไปนี้ มีตัวอย่างเพื่ออธิบายสิ่งที่ฉันหมายถึง ขอให้สังเกตว่าตัวอย่างเริ่มต้นด้วยพรมรีดบางส่วนเพื่อความเข้าใจที่ดีขึ้น:
ac
rpet
- แยก "หัว" ออกจาก "หาง" ของพรม: หัวคือสิ่งที่ได้รับการม้วนจนถึงหางเป็นสิ่งที่เหลืออยู่จะต้องรีด
Head: ac Tail:
rp et
- หมุนหัว 90 °ตามเข็มนาฬิกา
Rotated head: ra Tail (unchanged):
pc et
- ถ้าความกว้างของหัวใหม่ (ที่นี่
2) น้อยกว่าหรือเท่ากับความยาวของหาง (ที่นี่2)- จากนั้นวางไว้บนหาง
- มิฉะนั้นพรม (เหมือนที่จุดเริ่มต้นของขั้นตอน) ถูกรีด
New carpet: ra
pc
et
ทำซ้ำขั้นตอนซ้ำหลาย ๆ ครั้งตามต้องการ
สองตัวอย่างแสดงขั้นตอนทั้งหมดของการกลิ้งพรม:
carpet
c
arpet
ac
rpet
ra
pc
et
0123456789
0
123456789
10
23456789
21
30
456789
432
501
6789
บางประการ:
- คุณไม่จำเป็นต้องแสดงขั้นตอนกลางทั้งหมดเฉพาะพรมรีด (เช่นหากคุณพบวิธีที่ไม่ซ้ำในการคำนวณผลลัพธ์มันสมบูรณ์แบบ) นอกจากนี้คุณไม่จำเป็นต้องพิมพ์ช่องว่างนำหน้าในตัวอย่างด้านบนฉันแสดงให้พวกเขาจัดตำแหน่งสิ่งต่างๆเท่านั้น
- อินพุตเป็นสตริงรายการ / อาร์เรย์ของถ่าน
- เอาต์พุตถูกพิมพ์ไปยัง stdout หรือไปที่ไฟล์
- อินพุตเป็นสิ่งที่ดี: ความยาวอย่างน้อย 1 อักขระและอย่างน้อยที่สุดก็มีขนาดเล็กพอที่จะไม่ทำให้เกิดปัญหา แต่คุณไม่สามารถใช้ค่าคงที่นั้นในโปรแกรมของคุณ เนื้อหาของสตริงเป็นเพียงอักขระที่สวยงาม ([a-zA-Z0-9]) ซึ่งเข้ารหัสตามความต้องการของคุณ
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
- นอกจากนี้ให้เพิ่มคำอธิบายสำหรับคำตอบของคุณหากคุณคิดว่าจำเป็น
ProgrammingPuzzlesAndCodeGolf- ความยาวหางสุดท้ายที่มากกว่า 1 ทำให้ฉันสะดุด
print lambda