ทบทวนดนตรีด่วน:
คีย์บอร์ดเปียโนประกอบไปด้วย 88 โน้ต ในแต่ละคู่มี 12 บันทึกและC, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
B
ทุกครั้งที่คุณกดปุ่ม 'C' ลวดลายจะซ้ำอีกครั้งในระดับที่สูงขึ้น
หมายเหตุมีการระบุที่ไม่ซ้ำกันโดย 1) ตัวอักษรรวมทั้งเซียนหรือแฟลตใด ๆ และ 2) คู่ซึ่งเป็นตัวเลขตั้งแต่ 0 ถึง 8 โน้ตสามแรกของแป้นพิมพ์ที่มีและA0, A♯/B♭
B0
หลังจากนี้มาสีเกล็ดเต็มรูปแบบในคู่ที่ 1 และC1, C♯1/D♭1, D1, D♯1/E♭1, E1, F1, F♯1/G♭1, G1, G♯1/A♭1, A1, A♯1/B♭1
B1
หลังจากนี้มาขนาดสีเต็มรูปแบบในเลอะเลือน 2, 3, 4, 5, 6, และ 7 C8
จากนั้นบันทึกล่าสุดเป็น
โน้ตแต่ละตัวสอดคล้องกับความถี่ในช่วง 20-4100 Hz ด้วยการA0
เริ่มต้นที่ 27.500 เฮิร์ตซ์แต่ละโน้ตที่สอดคล้องกันคือโน้ตก่อนหน้านี้คูณด้วยรากที่สิบสองของสองหรือประมาณ 1.059463 สูตรทั่วไปเพิ่มเติมคือ:
โดยที่ n คือหมายเลขของโน้ตโดย A0 คือ 1 (ข้อมูลเพิ่มเติมที่นี่ )
ความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่รับสายเป็นตัวแทนโน้ตและพิมพ์หรือส่งคืนความถี่ของบันทึกย่อนั้น เราจะใช้เครื่องหมายปอนด์#
สำหรับสัญลักษณ์คม (หรือแฮชแท็กสำหรับคุณอายุน้อย) และตัวพิมพ์เล็กb
สำหรับสัญลักษณ์แบน อินพุตทั้งหมดจะดูเหมือน(uppercase letter) + (optional sharp or flat) + (number)
ไม่มีที่ว่าง หากอินพุตอยู่นอกช่วงของแป้นพิมพ์ (ต่ำกว่า A0 หรือสูงกว่า C8) หรือมีอักขระที่ไม่ถูกต้องขาดหายไปหรืออักขระพิเศษนี่เป็นอินพุตที่ไม่ถูกต้องและคุณไม่ต้องจัดการกับมัน คุณสามารถสันนิษฐานได้ว่าคุณจะไม่ได้รับอินพุตแปลก ๆ เช่น E # หรือ Cb
ความแม่นยำ
เนื่องจากความแม่นยำไม่มีที่สิ้นสุดเป็นไปไม่ได้เราจะพูดว่าอะไรก็ตามที่อยู่ในค่าร้อยละหนึ่งของมูลค่าที่แท้จริงเป็นที่ยอมรับ ร้อยละเป็นรากที่สองของ 1200 หรือ 1.0005777895 ลองใช้ตัวอย่างที่เป็นรูปธรรมเพื่อทำให้ชัดเจนยิ่งขึ้น สมมติว่าอินพุตของคุณคือ A4 แน่นอนค่าของบันทึกนี้เป็น 440 เฮิร์ตซ์ 440 / 1.0005777895 = 439.7459
เมื่อร้อยแบน หนึ่งครั้งที่คมชัดเป็นร้อย440 * 1.0005777895 = 440.2542
ดังนั้นจำนวนใด ๆ ที่มากกว่า 439.7459 แต่เล็กกว่า 440.2542 นั้นแม่นยำพอที่จะนับ
กรณีทดสอบ
A0 --> 27.500
C4 --> 261.626
F#3 --> 184.997
Bb6 --> 1864.66
A#6 --> 1864.66
A4 --> 440
D9 --> Too high, invalid input.
G0 --> Too low, invalid input.
Fb5 --> Invalid input.
E --> Missing octave, invalid input
b2 --> Lowercase, invalid input
H#4 --> H is not a real note, invalid input.
โปรดทราบว่าคุณไม่ต้องจัดการกับอินพุตที่ไม่ถูกต้อง หากโปรแกรมของคุณแสร้งทำเป็นว่าเป็นอินพุตจริงและพิมพ์ค่าออกมาเป็นที่ยอมรับได้ หากโปรแกรมของคุณขัดข้องก็ยอมรับได้เช่นกัน สิ่งที่สามารถเกิดขึ้นได้เมื่อคุณได้รับ สำหรับรายการอินพุตและเอาต์พุตแบบเต็มดูหน้านี้
ตามปกตินี่คือ code-golf ดังนั้นช่องโหว่มาตรฐานจะมีผลบังคับใช้และคำตอบที่สั้นที่สุดในหน่วยไบต์จะชนะ
H
? H
ความหมาย B คือ AFAIK ใช้เฉพาะในประเทศที่พูดภาษาเยอรมันเท่านั้น ( B
หมายถึง Bb ตามทาง) สิ่งที่อังกฤษและไอร์แลนด์เรียกว่า B คือ Si หรือ Ti ในสเปนและอิตาลีเช่นเดียวกับ Do Re Mi Fa Sol La Si
H
ถูกนำมาใช้ในประเทศเยอรมนี, สาธารณรัฐเช็ก, สโลวาเกีย, โปแลนด์, ฮังการี, เซอร์เบีย, เดนมาร์ก, นอร์เวย์, ฟินแลนด์, เอสโตเนียและออสเตรียตามวิกิพีเดีย (ฉันสามารถยืนยันได้สำหรับฟินแลนด์ด้วยตนเอง)