พิจารณาบล็อกสี่เหลี่ยมของข้อความโดยมีความกว้างไม่เกิน N ตัวสำหรับจำนวนเต็มคี่ N ที่มากกว่า 1
เป็นตัวอย่างให้ N = 5 และข้อความเป็น:
MLKJI
NWVUH
OXYTG
PQRSF
ABCDE
โปรดสังเกตว่านี่คือตัวอักษร (นอกเหนือจาก Z) วนรอบทวนเข็มนาฬิกาจากมุมซ้ายล่าง มันเหมือนกับพรมม้วนขึ้นมา
"Unrolling" ข้อความทีละหนึ่งรอบจะหมุนตามเข็มนาฬิกาดังนั้นจึงFGHI
อยู่ในระดับเดียวกับABCDE
ผลลัพธ์ใน:
PONM
QXWL
RYVK
STUJ
ABCDEFGHI
การคลายออกนี้สามารถทำได้อีก 7 ครั้งจนกว่าข้อความจะเป็นบรรทัดเดียว:
SRQP
TYXO
UVWN
ABCDEFGHIJKLM
UTS
VYR
WXQ
ABCDEFGHIJKLMNOP
WVU
XYT
ABCDEFGHIJKLMNOPQRS
XW
YV
ABCDEFGHIJKLMNOPQRSTU
YX
ABCDEFGHIJKLMNOPQRSTUVW
Y
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
ท้าทาย
ความท้าทายคือการเขียนโปรแกรมที่เป็นบล็อก N × N ของข้อความที่ส่งออกจำนวนครั้งที่มันมี "unrolled" โดยการเปิดหนึ่งในสี่เมื่อมีการจัดเรียงใหม่ในรูปแบบการเปิดและเรียกใช้
มีการแข่งขันสองรายการที่นี่: (หวังว่าจะไม่ยุ่งเกินไป)
- ทำสิ่งนี้ด้วย N ที่เล็กที่สุด (ลงไปจนถึงขีด จำกัด N = 3)
- ทำสิ่งนี้กับ N. ที่ใหญ่ที่สุด (ไม่ จำกัด )
จะไม่มีคำตอบที่ยอมรับ แต่ผู้ชนะในแต่ละหมวดหมู่เหล่านี้จะได้รับตัวแทนอย่างน้อย 50 ค่าหัวจากฉัน ในกรณีที่ผูกคำตอบที่เก่าแก่ที่สุดชนะ
ตัวอย่าง
หากรหัสบล็อกของคุณคือ
MyP
rog
ram
รันตามที่ควรจะเป็นเอาท์พุท 0
วิ่ง
rM
oy
ramgP
ควรส่งออก 1
วิ่ง
or
ramgPyM
ควรส่งออก 2
วิ่ง
o
ramgPyMr
ควรส่งออก 3
ในที่สุดการรันramgPyMro
ควรเอาต์พุต 4
รายละเอียด
- เอาต์พุตควรถูกพิมพ์ไปที่ stdout (หรือตัวเลือกที่ใกล้เคียงที่สุด) ด้วยตัวเอง ไม่มีอินพุต
- คุณสามารถใช้ASCII ที่พิมพ์ได้ (รหัสเลขฐานสิบหก 20 ถึง 7E ซึ่งมีช่องว่าง) ในรหัสของคุณ
- ช่องว่างเติมช่องว่างในการเตรียมการ unrolling (นอกเสียจากว่าคุณจะคลี่คลายไปทางซ้าย)
- เฉพาะการจัดเรียงจากสี่เหลี่ยมจัตุรัสจนถึงแบนราบเท่านั้นจึงจะต้องมีเอาต์พุตที่ถูกต้อง จะไม่มีการจัดการอื่น ๆ
- คุณไม่สามารถอ่านต้นฉบับของคุณได้
- คุณสามารถใช้ความคิดเห็น
- N = 1 ไม่รวมอยู่ในหลาย ๆ ภาษาโปรแกรม
0
จะทำงาน หากต้องการคุณสามารถคลี่คลายไปทางซ้ายมากกว่าด้านขวา เช่น
MyP rog ram
กลายเป็น
Pg yo Mrram
และอื่น ๆ ไม่มีการเพิ่มช่องว่างเมื่อหมุนด้วยวิธีนี้ เส้นก็จบลง
(ที่เกี่ยวข้อง: เขียนโปรแกรมรูปสี่เหลี่ยมผืนผ้าที่แสดงจำนวนครั้งที่หมุน )