ผู้คนจำนวนมากชอบเล่นเพลงเพื่อความสนุกสนานและความบันเทิง น่าเสียดายที่บางครั้งเพลงก็ค่อนข้างยาก นั่นคือเหตุผลที่คุณมาที่นี่!
งาน
เป็นหน้าที่ของคุณที่จะทำให้การอ่านเพลงง่ายขึ้นสำหรับผู้ที่ต้องดิ้นรนกับมัน คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นที่ทำหน้าที่เป็นเจ้าหน้าที่ดนตรีและป้อนชื่อของบันทึกที่เขียนบนพนักงานนั้น
พนักงานโน๊ตและโน้ต
พนักงานดนตรีหรือไม้เท้าเป็นห้าเส้นแนวนอน inbetween ซึ่งเป็นสี่ช่องว่าง แต่ละบรรทัดหรือช่องว่างหมายถึงบันทึกย่อที่แตกต่างกัน (ระยะห่าง) ขึ้นอยู่กับโน๊ต
มีความยุติธรรมไม่กี่ Clefs ดนตรีที่แตกต่างกันเพื่อเลือกจากเราจะได้รับการจัดการกับหนึ่งสำหรับตอนนี้มี แต่ที่: โน๊ตสาม บนโน๊ตเสียงแหลมโน้ตจะถูกนำไปแสดงต่อพนักงานดังนี้:
เส้น ฉ ---------- D ---------- B ---------- G ---------- E ----------
ช่องว่าง ---------- E ---------- ค ---------- ---------- F ----------
การจัดรูปแบบของอินพุต
อินพุตจะถูกกำหนดเป็นสตริงเดี่ยวดังนี้:
--------------- --------------- --------------- --------------- ---------------
ห้าบรรทัดและสี่ช่องว่างของพนักงานสร้างจากอักขระเก้าแถว เส้นของพนักงานถูกสร้างด้วย-
อักขระ (เครื่องหมายขีดคั่น) และช่องว่างที่มี(ช่องว่าง) แต่ละแถวจะถูกแยกออกจากบรรทัดถัดไปด้วยอักขระบรรทัดเดียวเช่น:
-----\n \n-----\n \n-----\n \n-----\n \n-----\n
แถวมีความยาวตามอำเภอใจ (เป็นจำนวนที่เหมาะสมที่สามารถจัดการได้โดยภาษาการเขียนโปรแกรมของคุณ) และแต่ละแถวมีความยาวเท่ากันในตัวอักษรเหมือนกับแถวอื่น นอกจากนี้โปรดทราบว่าแถวจะมีความยาวที่หารด้วยสามได้เสมอ (เพื่อให้พอดีกับรูปแบบของโน้ตหนึ่งตามด้วยสองคอลัมน์โดยไม่มีโน้ต)
หมายเหตุจะอยู่ในทีมนี้โดยการแทนที่เหมาะสม-
หรือตัวละครด้วย
o
โน้ตยังสามารถยก (คม) หรือลดลง (แบน) ในระดับเสียงโดย semitone (ประมาณครึ่งหนึ่งของความแตกต่างความถี่ระหว่างโน้ตและโน้ตที่อยู่ติดกัน) นี้จะถูกแทนด้วยตัวอักษร#
และตามลำดับในสถานที่ของb
o
แต่ละโน้ตจะถูกแยกออกจาก-
ตัวอักษรถัดไปโดยมีอักขระสองตัวและโน้ตแรกจะเกิดขึ้นเสมอใน "คอลัมน์" แรกของตัวอักษร-
และ(เว้นวรรค)
เมื่อแสดงชื่อโน้ตโปรแกรมของคุณควรใช้ตัวพิมพ์ใหญ่ ( A B C D E F G
) ที่ตรงกับบันทึกที่ให้ไว้กับเจ้าหน้าที่ สำหรับบันทึกย่อที่แหลม ( #
) และแบน ( b
) โปรแกรมของคุณต้องผนวก#
และb
ตามลำดับตัวอักษรที่สอดคล้องกับบันทึกย่อ สำหรับโน้ตธรรมชาติที่ไม่แหลมหรือแบนควรเพิ่ม (เว้นวรรค) แทน
ตัวอย่าง
การป้อนข้อมูล:
--------------------- o-- โอ --------------- o -------- โอ --------- ข -------------- โอ --- o -------------------- โอ ------------------------
* หมายเหตุ "พื้นที่ว่าง" ทั้งหมดในตัวอย่างนี้เป็นจริง(อักขระเว้นวรรค)
ในกรณีนี้ (สเกลเมเจอร์ F แบบง่าย) โปรแกรมของคุณควรแสดงผลลัพธ์ดังนี้:
FGA Bb CDEF
หมายเหตุระยะห่างระหว่างตัวอักษรของเอาต์พุตควรตรงตามที่แสดงด้านบนเพื่อให้พอดีกับโน้ตบนเจ้าหน้าที่ ระหว่างทั้งชื่อทราบมีสอง(เว้นวรรค) ตัวละครยกเว้นระหว่างและ
Bb
นี่แทนที่หนึ่งในตัวละคร (เว้นวรรค) C
b
อีกตัวอย่างหนึ่ง
อินพุต:
------------------------ โอ ------------------ # ----- # ------------ o ----------- โอ ------ # ----------------- # o -----------------------
เอาท์พุท:
E F# G# A B C# D# E
อีกตัวอย่างหนึ่งสำหรับความโชคดี
อินพุต:
--------------------- oooo --------------------- โอ --------------------- --------------- o - o-- ---------------------
เอาท์พุท:
E E E C E G G
กฎระเบียบ
- หมายเหตุจะถูกมอบให้เฉพาะในกลุ่มพนักงานห้าสายของ E ที่มีขนาดแบนจนถึง F ที่คมชัด (ยกเว้นความท้าทาย, ดูด้านล่าง)
- หมายเหตุใด ๆ อาจคมชัดหรือแบนไม่เพียง แต่เห็นได้ทั่วไปในเพลง (เช่นแม้ว่า B # จริง ๆ แล้วเพิ่งเล่นเป็น C ในความเป็นจริง B # ยังสามารถเกิดขึ้นได้ในอินพุต)
- คุณสามารถสันนิษฐานได้ว่าจะมีบันทึกย่อหนึ่งรายการต่อ 3 คอลัมน์ (ดังนั้นจะไม่มีคอร์ดหรืออะไรทำนองนั้นและไม่มีการพัก)
- คุณสามารถสมมติว่าบันทึกสุดท้ายจะตามด้วยสองคอลัมน์โดยไม่มีหมายเหตุ
- คุณสามารถสันนิษฐานได้ว่าบรรทัดสุดท้ายของพนักงานจะตามด้วยอักขระขึ้นบรรทัดใหม่
- อินพุตควรถูกนำมาจาก STDIN (หรือเทียบเท่าภาษา) หรือเป็นพารามิเตอร์ของฟังก์ชัน
- เอาต์พุตควรเป็น STDOUT (หรือเทียบเท่าภาษา) หรือเป็นผลลัพธ์ส่งคืนหากโปรแกรมของคุณเป็นฟังก์ชัน
- อนุญาตให้มีช่องโหว่มาตรฐานและบิวด์อินได้! ดนตรีเป็นเรื่องเกี่ยวกับการทดลองและเล่น ไปข้างหน้าและสนุกกับภาษาของคุณ (แม้ว่าจะจำได้ว่าการใช้ช่องโหว่อาจไม่ทำให้โปรแกรมที่น่าสนใจที่สุด)
- นี่คือโค้ดกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ
ความท้าทายของโบนัส
- -10% ถ้าโปรแกรมของคุณสามารถประมวลผลพื้นที่ด้านบนของพนักงาน (G, G #, Gb) ได้สำเร็จ
- -10% ถ้าโปรแกรมของคุณสามารถประมวลผลพื้นที่ด้านล่างบรรทัดล่างของพนักงานได้สำเร็จ (D, D #, Db)
- ในกรณีเหล่านี้โปรแกรมของคุณจะรับข้อมูลเข้าเป็นแถวเพิ่มเติมเมื่อเริ่มต้นและสิ้นสุด แถวเหล่านี้ควรได้รับการปฏิบัติเหมือนกันกับอีกเก้าแถว