คุณอาจเคยเห็นบันไดของยาโคบในพิพิธภัณฑ์วิทยาศาสตร์สำหรับเด็ก หากคุณไม่คุ้นเคยกับสิ่งที่พวกเขามีลักษณะเหมือนมีภาพหลายภาพและวิดีโอตัวอย่างในวิกิพีเดีย ความท้าทายในวันนี้คือการสร้างอุปกรณ์ไฟฟ้ารุ่น ASCII แบบเคลื่อนไหว ในท้ายที่สุดควรมีลักษณะดังนี้:
การก่อสร้างบันได
นี่คือรูปร่างพื้นฐานของบันไดที่มีความสูง ( H ) 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
ตัวเลขทางด้านซ้ายแสดงถึงหมายเลขแถวของตัวอย่างนี้และไม่ควรรวมอยู่ในผลลัพธ์ เราจะอ้างถึงแถวที่กำหนดโดยหมายเลข ( R ) 0 ¯¯
แถวเป็นด้านล่าง แต่ละแถว 1 ถึงHประกอบด้วยสี่ส่วน:
- มีการเว้นวรรค
(U + 0020) ซ้ำ ( H - R ) ครั้ง
- สแลชหลัง
\
(U + 005C) - เว้นวรรค
(U + 0020) ซ้ำแล้วซ้ำอีก (2 * R ) ครั้ง
- สแลช
/
(U + 002F)
แถว 0 เหมือนกันยกเว้นทั้งสองสแลชจะถูกแทนที่ด้วย macron ¯
(U + 00AF) ช่องว่างต่อท้ายที่ส่วนท้ายของแต่ละบรรทัดหรือใต้บันไดนั้นก็โอเค ช่องว่างชั้นนำไม่ใช่
การก่อสร้างส่วนโค้ง
เมื่อสร้างบันไดแล้วคุณสามารถสร้างส่วนโค้งระหว่างด้านซ้ายและด้านขวา หนึ่งโค้งมีทั้งที่อยู่ในแถวและแทนที่ช่องว่างระหว่างชั้นนำและต่อท้าย\
/
ดังนั้นแถวที่ 2 จะมี 4 อักขระในส่วนโค้งแถวที่ 3 จะมี 6 ตัวและอื่น ๆ แต่ละส่วนโค้งประกอบด้วยกฎต่อไปนี้:
- อักขระที่ใช้ได้คือ
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C) - เพื่อให้แน่ใจว่ามีลักษณะที่ราบรื่นใด ๆ
¯
หรือ/
ต้องตามมาด้วย¯
หรือ\
- เพื่อให้แน่ใจว่ามีลักษณะที่ราบรื่นใด ๆ
_
หรือ\
ต้องตามมาด้วย_
หรือ/
- กฎทั้งสองข้างต้นนำไปใช้กับขอบของบันไดเช่นกัน
- กฎทั้งสามดังกล่าวข้างต้นได้อย่างมีประสิทธิภาพหมายความว่าตัวอักษรตัวแรกในโค้งต้อง
_
หรือ/
และตัวอักษรตัวสุดท้ายจะต้องเป็น_
หรือ\
(\¯\_//
ไม่ถูกต้องที่ปลายทั้งสอง แต่\_/¯\/
ก็โอเค) - ต้องมีโอกาสที่ไม่เป็นศูนย์สำหรับแต่ละอักขระที่อนุญาตที่จะเกิดขึ้น ณ จุดที่กำหนด
- แต่ละส่วนโค้งเป็นอิสระจากส่วนโค้งอื่น ๆ
นิเมชั่น
ชีวิตของส่วนโค้งเดียวถูกสร้างขึ้นโดยเริ่มจากแถวที่ 1 และ "ย้าย" แถวขึ้นทีละครั้งจนกว่าจะถึงด้านบน IE แรกสร้างส่วนโค้งที่แถว 1 จากนั้นตั้งค่ากลับเป็นช่องว่างและสร้างส่วนโค้งที่แถว 2 และอื่น ๆ ให้ส่วนโค้งที่จะแสดง ( N ) จำนวนหนึ่งแสดงชีวิตที่สมบูรณ์ของส่วนโค้งจำนวนมากทีละรายการโดยใช้แนวทางต่อไปนี้:
- หนึ่งอาร์คควรจะ "มีชีวิตอยู่" ในเวลาใดก็ได้ ส่วนต่อไปไม่สามารถเริ่มได้จนกว่าอันที่มีอยู่จะไปถึงด้านบนแล้วดับ
- ชีวิตของอาร์คแต่ละแถวควรแสดงในหนึ่งเฟรม
- ควรมีหนึ่งเฟรมของแค่บันไดขั้นพื้นฐาน (โดยไม่มีส่วนโค้ง) ก่อนที่จะเริ่มการอาร์คใหม่ (ไม่จำเป็นก่อนการอาร์คครั้งแรก)
- อนิเมชั่นควรแสดงชีวิตที่เต็มไปด้วยอาร์คN ถ้าN = 0 มันจะสุ่มอาร์คแบบเคลื่อนไหวตลอดไปจนกว่าจะหยุด
- หากN > 0 คุณอาจยังคงวนลูปภาพเคลื่อนไหวตลอดไป แต่ต้องเป็นลูปของส่วนโค้งเดียวกันซ้ำไปซ้ำมา (ตัวอย่าง GIF ที่ด้านบนของโพสต์นี้มีH = 6 และN = 3 แต่มันวนซ้ำตลอดไป)
- ภาพเคลื่อนไหวควรเกิดขึ้นในสถานที่ กล่าวคือแต่ละเฟรมควรเขียนทับเฟรมถัดไปโดยสมบูรณ์และอยู่ในตำแหน่งเดียวกัน
- ความยาวของแต่ละเฟรมสามารถเป็นสิ่งที่คุณต้องการ แต่ทำให้มันสามารถมองเห็นได้โดยมนุษย์ (IE ใช้สามัญสำนึกของคุณ: 0.01 วินาที / เฟรมและ 30 วินาที / เฟรมนั้นไม่สามารถยอมรับได้)
อินพุต / เอาต์พุต
- อินพุตและเอาต์พุตสามารถอยู่ในรูปแบบมาตรฐานใด ๆ
- คุณสามารถส่งออก GIF เขียนข้อความไปที่หน้าจอส่งออกไฟล์เดียวสำหรับแต่ละเฟรมหรือวิธีการอื่นที่เหมาะสม
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- ความสูงของบันไดHจะเป็นจำนวนเต็มบวก
- จำนวนของอาร์คเพื่อแสดงNจะเป็นจำนวนเต็มไม่เป็นลบ
- ทั้งHและNถูกนำมาเป็นอินพุตในลำดับใด ๆ ที่คุณเลือก (โปรดระบุคำสั่งในคำตอบของคุณ)
สภาพการชนะ
นี่คือโค้ดกอล์ฟเพื่อให้โค้ดที่สั้นที่สุดชนะ
the first character in the arc must be _ or / and the last character must be _ or \
There must be a non-zero chance for each allowable character to occur at a given point
เพื่อให้มีความสมมาตรตัวละครทั้งตัวแรกและตัวสุดท้ายจะต้องเป็น_
ทุกครั้งซึ่งหมายความว่าไม่มีโอกาส/
เกิดขึ้นหรือ `` ` เป็นศูนย์