มาสร้างนาฬิกาและปฏิทิน ASCII ที่บอกเราเดือนปัจจุบันวันของเดือนวันในสัปดาห์ชั่วโมงนาทีและไม่ว่าจะเป็นกลางคืนหรือวัน (แต่ไม่ใช่ปีหรือวินาที)
เมื่อใดก็ตามที่ปฏิทินจะมีลักษณะดังนี้: (ดูดีขึ้นด้วยระยะห่างบรรทัดน้อยกว่า)
________________________________________________________________
|\ ____________________________________________________________ /|
| | ___ | |
| | _( ) | |
| | (___)__) -.- | |
| | | |
| | | |
| | -.- | |
| | -.- | |
| | ___ | |
| | _( ) | |
| | (___)__) | |
| | | |
| | ___ | |
| | _( ) | |
| | _ (___)__) | |
| | /|\ | |
| | / | \ | |
| | /__|__\ | |
| |____|____ | |
| |\_______/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-~~-~~~~~| |
| |____________________________________________________________| |
|/______________________________________________________________\|
มันเป็น "กรอบรูป" 66 อักขระ 23 ตัวซึ่งเส้นขอบไม่เคยเปลี่ยนแปลง
ภาพภายในเฟรมบอกเราเวลาและวันที่:
- ในระหว่างวัน (6:00 น. - 17.55 น.) เดือนจะถูกกำหนดโดยจำนวนนก (
-.-
) ในท้องฟ้า มกราคม = 1 นก, กุมภาพันธ์ = 2 นก ฯลฯ - ในช่วงคืน (18:00-05:59) นกจะถูกแทนที่ด้วย 3 ครั้งดาวเป็นจำนวนมาก (
*
) มกราคม = 3 ดาวกุมภาพันธ์ = 6 ดาว ฯลฯ นกและดวงดาวไม่เคยอยู่บนท้องฟ้าในเวลาเดียวกัน - วันของเดือนจะถูกกำหนดโดยจำนวนตัวอักษรระหว่างสองขีดกลาง (
-
) บนน้ำ เช่น~~-~~~~-~~
หมายความว่าเป็นวันที่สี่ของเดือน ขึ้นอยู่กับนาทีเรืออาจต้องอยู่ระหว่างขีดกลาง (ขีดกลางไม่วนรอบ) - วันของสัปดาห์จะถูกกำหนดโดยจำนวนของเมฆในท้องฟ้า (เมฆทั้งหมดเหมือนกัน) วันอาทิตย์ = 0 เมฆ , วันจันทร์ = 1 เมฆ, ... , วันเสาร์ = 6 เมฆ
- ชั่วโมงจะถูกกำหนดโดยระดับน้ำ (และเรือ) ที่ต่ำที่สุด (ดังกล่าวข้างต้น) คือ 1 นาฬิการะหว่าง 2 นาฬิกาจะมีหนึ่งตัวอักษรที่สูงขึ้นและสูงถึง 12 นาฬิกาจากนั้นกลับไปที่ 1 นาฬิกา (มันคือ 12 ไม่ใช่นาฬิกา 24 ชั่วโมง)
- นาทีจะถูกกำหนดโดยตำแหน่งแนวนอนของเรือ ที่ด้านบนของชั่วโมงเรือที่สัมผัสขอบซ้ายของกรอบ (ดังกล่าวข้างต้น) ในแต่ละนาทีต่อมาเรือจะแล่นไปทีละตัวละคร ในนาทีที่ 51 ถึง 59 มันวนซ้ำจากด้านขวาของกรอบกลับไปทางซ้าย
ดังนั้นจากตัวอย่างข้างต้นมีนก 3 ตัวเมฆ 3 ตัว 2 ตัวระหว่างขีดกลางน้ำที่ระดับต่ำสุดและเรือที่อยู่ทางด้านซ้ายสุดเราสามารถบอกได้ว่าวันนี้คือวันพุธที่ 2 มีนาคมและเวลาคือ 1: 12:00
นี่เป็นอีกตัวอย่างจากวันอาทิตย์ที่ 25 เมษายนเวลา 3:58 น.:
________________________________________________________________
|\ ____________________________________________________________ /|
| | | |
| | * * | |
| | * * * | |
| | * | |
| | | |
| | * | |
| | * * | |
| | | |
| | * | |
| | | |
| | * | |
| | _ | |
| | /|\ * | |
| |/ | \ | |
| |__|__\ /| |
| |__|____ __| |
| |______/~~~~~~~~~~~~~~~~~~~-~~~~~~~~~~~~~~~~~~~~~~~~~-~~~~~\_| |
| | | |
| | | |
| |____________________________________________________________| |
|/______________________________________________________________\|
เป้าหมาย
เป้าหมายของคุณคือการเขียนโปรแกรมที่สั้นที่สุดเท่าที่จะเป็นไปได้ซึ่งส่งออก ASCII art "calendars" เหล่านี้ไปยัง stdout โดยใช้เวลาที่โปรแกรมทำงาน
การรันของโปรแกรมทุกครั้งควรแสดงผลหนึ่งครั้ง การอัปเดตไม่ควรเป็นไปโดยอัตโนมัติ (หรือเคลื่อนไหว)
เมฆดวงดาวและนกควรถูกสุ่มวางบนท้องฟ้า (ดังนั้นการวิ่งทุกครั้งแม้ในเวลาเดียวกันอาจแตกต่างกัน) พวกเขาไม่ควรทับซ้อนเรือหรือกันและกัน (ด้วยเครื่องหมายขีดกลางของน้ำไม่ควรทับซ้อนกันกับตัวเรือ)
โปรดสังเกตว่าไม่มีสิ่งใดที่ฉันอธิบายได้ปรากฏใต้น้ำ นี่สำหรับคุณที่จะทำ ในช่วงเวลาหนึ่งชั่วโมงที่กำหนดไว้ล่วงหน้าของทุกสัปดาห์ (ตัวเลือกของคุณ) สิ่งที่น่าสนใจควรวาดลงไปใต้น้ำ อาจเป็นสัตว์ทะเลหรือเรือที่จมน้ำหรืออะไรก็ได้แล้วแต่คุณ ในช่วงเวลานั้นคุณอาจปรับเปลี่ยนการออกแบบของส่วนที่เหลือของฉาก (อยู่ในขอบเขตกรอบ)
เกณฑ์การให้คะแนน
นี่คือคำสั่งผสมการแข่งขันรหัสความนิยมกอล์ฟ
(bytes in program) - 4 * (upvotes - downvotes)
คะแนนของคุณคือ คะแนนต่ำสุดชนะ
ใช้http://mothereff.in/byte-counterเป็นตัวนับไบต์หากคุณใช้อักขระที่ไม่ใช่ ASCII
หมายเหตุและการปรับปรุง
คุณสามารถใช้ทุ่นแทนเส้นประได้เพราะให้หันหน้าเข้าหากันเพราะมันเหมาะสมกว่า:
| | ~~(_)~~~(_)~~ (3rd of the month)
เครื่องหมายขีดคั่น (หรือทุ่น) ไม่จำเป็นต้องมีการสุ่ม แต่มันจะดีถ้าพวกเขา
- "ชั่วโมงพิเศษ" ของคุณควรใช้เวลา 60 นาทีจากด้านบนของชั่วโมงถึง 1 นาทีก่อนถึงชั่วโมงถัดไป
- ในช่วงเวลาพิเศษสิ่งที่คุณวาดใต้น้ำอาจเคลื่อนไหวและอาจเปลี่ยนพื้นผิวและท้องฟ้าเมื่อมันสมเหตุสมผล (เช่นสัตว์ประหลาดในทะเลที่กำลังกินเรือหลุมดำที่ก่อตัวขึ้นที่พื้นทะเล ฯลฯ )