พื้นหลัง
ในเพลงตะวันตกโน้ตเพลงทุกเพลงมีชื่อที่กำหนด ภายในแต่ละคู่มีแปดโน้ตที่ไม่ซ้ำกันในลำดับต่อไปนี้: "CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C" ซึ่งสุดท้าย C เป็นหนึ่งคู่เหนือคนแรก
ในการบอกความแตกต่างระหว่างโน้ตของอ็อกเทฟที่แตกต่างกันตัวเลข (สำหรับการท้าทายนี้ จำกัด เพียงตัวเลขหลัก) จะถูกต่อท้ายชื่อโน้ต ดังนั้น C5 คือโน้ตที่มีหนึ่งระดับแปดเสียงเหนือ C4 Bb6 สูงกว่า B5
ข้อเท็จจริงที่สำคัญคือ B5 และ C6 เป็นโน้ตที่อยู่ติดกันและ C0 และ B9 เป็นโน้ตที่ต่ำที่สุดและสูงที่สุด
ระหว่างโน้ตสองอันนั้นมีระยะทางซึ่งเป็นจำนวนเซมิโคลอนระหว่างโน้ต Bb4 คือหนึ่ง semitone ต่ำกว่า B4 ซึ่งเป็นหนึ่ง semitone ต่ำกว่า C5 มีสิบสอง semitones ในอ็อกเทฟดังนั้น Bb4 จึงเป็นระยะทาง 12 จาก A # 3 เนื่องจากเป็นอ็อกเทฟด้านบน (สังเกตว่าโน้ตเดี่ยวสามารถมีได้ถึงสองชื่อ)
ความท้าทาย
ความท้าทายของคุณคือการเขียนโปรแกรมที่สั้นที่สุดที่สามารถบันทึกรายการเพลงจาก STDIN และพิมพ์รายการการเปลี่ยนแปลงช่วงเวลาเป็น STDOUT
อินพุตจะเป็นรายการบันทึกเพลงคั่นด้วยช่องว่าง แต่ละโน้ตจะประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่ AG ตัวเลือก b หรือ # sign และตัวเลขหลักเดียว คุณจะไม่ต้องจัดการกับ E # / Fb หรือ B # / Cb อินพุตตัวอย่าง:
C4 D4 E4 F4 G4 A4 B4 C5 C4
เอาต์พุตจะเป็นรายการจำนวนเต็มซึ่งคั่นด้วยช่องว่างซึ่งเป็นตัวแทนของระยะห่างระหว่างโน้ตแต่ละอันต่อเนื่องโดยมีเครื่องหมาย + หรือ - นำหน้าเสมอเพื่อแสดงว่าโน้ตนั้นเรียงจากน้อยไปมากหรือมากไปน้อย จะมีจำนวนน้อยหนึ่งเอาต์พุตที่มากกว่าโน้ตที่ป้อนเข้า ตัวอย่างเอาต์พุตสำหรับอินพุตด้านบน:
+2 +2 +1 +2 +2 +2 +1 -12
ตัวอย่างอินพุตเพิ่มเติม:
E5 D#5 E5 B4 E5 F#5 E5 B4
C0 B0 Bb1 A2 G#3 G4 F#5 F6
G4 Ab4 Gb4 A4 F4 A#4
และผลลัพธ์ที่สอดคล้องกัน:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
กฎและข้อ จำกัด
ผู้ชนะจะพิจารณาจากจำนวนอักขระในซอร์สโค้ด
โปรแกรมของคุณควรประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น
คุณไม่ได้รับอนุญาตให้ใช้ฟังก์ชั่นในตัวที่เกี่ยวข้องกับเพลงหรือเสียง
นอกจากนั้นจะใช้กฎมาตรฐานของรหัสกอล์ฟ
+0
หรือ-0
หรือ0
สำหรับบันทึกย่อที่เหมือนกันสองรายการ