ความท้าทายนี้ได้รับแรงบันดาลใจจากคำตอบนี้ที่ Ask Ubuntu Stack Exchange
Intro
จำหน้าจอ Windows ME ด้วยไพพ์หรือไม่? ถึงเวลานำความคิดถึงกลับมาแล้ว!
ท้าทาย
คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่จะแสดงผลเป็นตัวแทน ASCII ของสกรีนเซฟเวอร์ ในสกรีนเซฟเวอร์ควรมีท่อเดียวซึ่งจะเติบโตในทิศทางกึ่งสุ่ม
จุดเริ่มต้นของท่อจะถูกวางแบบสุ่มที่ขอบใด ๆ ของหน้าจอและชิ้นส่วนท่อควรตั้งฉากกับเส้นขอบ (มุมแรก - ท่อสามารถเป็นแนวนอนหรือแนวตั้ง) แต่ละเห็บท่อจะเติบโตในทิศทางที่หันหน้าไปทาง (แนวนอน / แนวตั้ง) ที่80%
บังเอิญหรือมีมุมที่มี20%
โอกาส
ตัวแทนท่อ
ในการสร้างไปป์จะใช้อักขระ Unicode 6 ตัว
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
อินพุต
โปรแกรม / ฟังก์ชั่นจะรับค่า 3 ค่าซึ่งสามารถรวบรวมผ่านพารามิเตอร์ฟังก์ชันหรือแจ้งให้ผู้ใช้ทราบ
- จำนวนเห็บ
- ความกว้างของหน้าจอ
- ความสูงของหน้าจอ
จำนวนเห็บ
สำหรับทุกเห็บจะมีการเพิ่มชิ้นส่วนของท่อไปยังหน้าจอ ท่อจะเขียนทับชิ้นส่วนท่อเก่าถ้าวางไข่ในตำแหน่งเดียวกัน
ตัวอย่างเช่นใช้หน้าจอขนาด 3x3
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
เมื่อใดก็ตามที่ไปป์ออกจากหน้าจอเช่นในตัวอย่างสุดท้ายที่ 5 ขีดจากนั้นไปป์ใหม่จะวางไข่ที่ชายแดนแบบสุ่ม ตัวอย่างเช่น:
ticks == 6
│┐
└┘
─
ท่อใหม่ควรมีโอกาส 50% ที่จะเป็นแนวนอนหรือแนวตั้ง
ความกว้าง / ความสูงของหน้าจอ
ความกว้างและความสูงของหน้าจอสามารถรวมกันเป็นค่าเดียวหากเป็นที่ต้องการในภาษาที่คุณเลือก ความกว้างและความสูงของหน้าจอจะมีค่าต่ำสุดเสมอ 1 และค่าสูงสุด 255 หากภาษาที่คุณเลือกรองรับหน้าจอคอนโซลหรือหน้าจอแสดงผลซึ่งมีขนาดเล็กกว่า 255x255 ตารางของอักขระคุณอาจคิดว่าความกว้างและความสูงจะ อย่าเกินขอบเขตของคอนโซลของคุณ (ตัวอย่าง: หน้าต่าง Windows 80x25 cmd)
เอาท์พุต
ผลลัพธ์ของโปรแกรม / ฟังก์ชั่นของคุณควรพิมพ์ไปที่หน้าจอหรือส่งคืนจากฟังก์ชั่น สำหรับการรันโปรแกรมทุกครั้งชุดท่อที่แตกต่างกันควรถูกสร้างขึ้น
กรณีทดสอบ
กรณีทดสอบต่อไปนี้เป็นตัวอย่างแบบสุ่มทั้งหมดของผลลัพธ์ที่ถูกต้อง
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
เห็นได้ชัดว่ายิ่งเห็บเกิดขึ้นมากเท่าไหร่ก็ยิ่งพิสูจน์ได้ถึงความถูกต้องของโปรแกรมของคุณ ดังนั้นการโพสต์ gif ของผลงานของคุณจะเป็นที่ต้องการ หากเป็นไปไม่ได้โปรดโพสต์รหัสของคุณซึ่งรวมถึงการพิมพ์ผลลัพธ์ เห็นได้ชัดว่าสิ่งนี้จะไม่นับรวมคะแนนของคุณ
กฎระเบียบ
- นี่คือโค้ดกอล์ฟจำนวนไบต์ที่สั้นที่สุดชนะ
- ช่องโหว่มาตรฐานใช้
- หากคุณใช้อักขระไพพ์ยูนิโคดในซอร์สโค้ดของคุณคุณอาจนับเป็นไบต์เดียว
นี่เป็นความท้าทายที่ยากมากที่สามารถแก้ไขได้ด้วยวิธีการสร้างสรรค์มากมายคุณควรเขียนคำตอบด้วยภาษา verbose มากขึ้นแม้ว่าจะมีคำตอบใน esolang สั้น ๆ อยู่แล้ว สิ่งนี้จะสร้างแคตตาล็อกของคำตอบที่สั้นที่สุดต่อภาษา โบนัสอัปโหลดสำหรับ gif สีแฟนซี;)
มีความสุขในการเล่นกอล์ฟ!
ข้อจำกัดความรับผิดชอบ: ฉันรู้ว่าตัวอักษร Unicode ไม่ใช่ ASCII แต่ในกรณีที่ไม่มีชื่อที่ดีกว่าฉันเพิ่งเรียกมันว่า ASCII art ข้อเสนอแนะยินดีต้อนรับ :)