เมื่อได้รับชื่อโน้ตสองรายการคุณจะต้องเขียนโปรแกรมที่กำหนดว่าช่วงเวลาที่เกิดขึ้นจากบันทึกย่อสองรายการนั้นสอดคล้องกันหรือไม่สอดคล้องกัน
บทนำ
ในเพลงตะวันตกมีเพียงเสียง "แตกต่าง" เพียง 12 เดียวเท่านั้น C, C#, D, D#, E, F, F#, G, G#, A, A#, B
ชื่อของพวกเขาเรียงจากต่ำสุดไปสูงสุดเหล่านี้: ลำดับนั้นเป็นวัฏจักรคือมันจะดำเนินต่อไปกับอีกC
หลังจากB
นั้นอย่างไม่สิ้นสุด
ระยะห่างระหว่างสองโทนสีที่เรียกว่าช่วงเวลา ช่วงเวลาใด ๆ ระหว่างสองบันทึกที่มีที่อยู่ติดกันในซีรีส์ดังกล่าวข้างต้น (เช่นC — C#
หรือE — F
) เรียกว่าดนตรี ช่วงเวลาระหว่างบันทึกย่อที่ห่างไกลกว่าจะถูกกำหนดเป็นจำนวนของขั้นตอน semitone ที่จำเป็นในการรับจากลำดับแรกถึงสอง (ขณะที่อาจล้อมรอบลำดับ) ตัวอย่าง: D to E
= 2 semitones, C to G
= 7 semitones, B to D#
= 4 semitones (ซึ่งล้อมรอบลำดับ) 1
ตอนนี้ช่วงเวลาเหล่านี้จะถูกแบ่งออกเป็นสองประเภท: พยัญชนะ (ฟังดูเป็นสุขถ้าคุณเล่นโน้ตทั้งสองพร้อมกัน) และไม่สอดคล้องกัน (ไม่มาก)
มากำหนดช่วงเวลาของพยัญชนะเป็น: 0, 3, 4, 5, 7, 8 และ 9 semitones
ส่วนที่เหลือของพวกเขาจะไม่สอดคล้องกันคือ: 1, 2, 6, 10 และ 11 semitones
ความท้าทาย
เขียน "โปรแกรม" (ในความหมายทั่วไปของคำว่า: ฟังก์ชั่นก็ใช้ได้อย่างสมบูรณ์) เพื่อทำสิ่งต่อไปนี้:
ใช้ชื่อโน้ตสองชื่อ (สตริงจากลำดับด้านบน) เป็นอินพุต คุณอาจนำไปใช้ตามที่คุณต้องการ (จาก stdin ในฐานะที่เป็นข้อโต้แย้งคั่นด้วยสิ่งที่คุณต้องการแม้จะนำพวกเขาเป็นรายการของตัวละคร (เช่น
["C","#"]
) อย่างไรก็ตามคุณไม่สามารถกำหนดชื่ออื่นให้กับบันทึกย่อ (โดยเฉพาะคุณ ต้องไม่ใช้หมายเลขตั้งแต่ 0 ถึง 11 และใช้หมายเลข)สำหรับคุณที่ฟังเพลงออกไปมีการบันทึกจะถูกระบุโดยไม่ต้องระดับแปดเสียง ในกรณีนี้มันไม่สำคัญว่าจะมีการเรียงลำดับใดบ้างและต่ำกว่าและสูงกว่า สุดท้ายคุณไม่จำเป็นต้องจัดการชื่อใด ๆ ที่ไม่ได้อยู่ในรายการด้านบน ไม่มีการปรับปรุงอื่น ๆ เช่น
E#
ไม่มีแฟลตการเปลี่ยนแปลงสองครั้งและอื่น ๆเลือกค่าสองค่าใด ๆ โปรแกรมของคุณจะต้องส่งออกหนึ่งของพวกเขาเมื่อใดก็ตามที่ช่วงเวลาที่เกิดขึ้นโดยทั้งสองโน้ตในการป้อนข้อมูลเป็นพยัญชนะและอื่น ๆ ถ้าพวกเขาไม่ได้ (อาจเป็น
True
และFalse
แม้กระทั่งπและ e หากคุณต้องการ :))นี่คือรหัสกอล์ฟ โปรแกรมที่สั้นที่สุดเป็นไบต์ในแต่ละภาษาชนะ มีความสุข!
ตัวอย่างและกรณีทดสอบ
Note 1 Note 2 Output Interval [semitones]
C D Dissonant 2
A# A# Consonant 0
G D Consonant 7 (wraparound)
D# A Dissonant 6
F E Dissonant 11
A C Consonant 3
ฉันไม่ได้เพิ่มพวกเขามากขึ้นเพราะไม่มีคดีทุจริตโดยเฉพาะในเรื่องนี้
นี่เป็นความท้าทายครั้งแรกของฉันดังนั้นคำวิจารณ์เชิงสร้างสรรค์ใด ๆ ก็ยินดีต้อนรับอย่างอบอุ่น :—) หากคุณพบว่าคำอธิบายทางทฤษฎีเลอะเทอะอย่าลังเลที่จะถามคำถาม สุดท้ายโปรดอย่าบอกฉันว่านี่คือการล่อของนี้หรือนี้ ฉันทำให้แน่ใจว่ามันไม่ใช่ (อันหลังค่อนข้างคล้ายกัน แต่ซับซ้อนกว่าฉันคิดว่าการท้าทายที่เรียบง่ายขึ้นเล็กน้อยจะทำให้ผู้คนเข้าร่วมได้ง่ายขึ้น)
1 : ฉันพยายามทำให้คำอธิบายนี้ง่ายที่สุดเท่าที่จะทำได้ มีทฤษฎีมากขึ้นรอบระยะเวลา โปรดอย่าทุบตีฉันที่ทิ้งมันไว้