Penyegaran musik cepat:
Keyboard piano terdiri dari 88 catatan. Pada setiap oktaf, ada 12 nada, C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
dan B
. Setiap kali Anda menekan 'C', polanya mengulang satu oktaf lebih tinggi.
Sebuah not diidentifikasi secara unik oleh 1) huruf, termasuk benda tajam atau flat, dan 2) oktaf, yang merupakan angka dari 0 hingga 8. Tiga not pertama keyboard, adalah A0, A♯/B♭
dan B0
. Setelah ini muncul skala kromatik penuh pada oktaf 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
dan B1
. Setelah ini muncul skala kromatik penuh pada oktaf 2, 3, 4, 5, 6, dan 7. Kemudian, nada terakhir adalah a C8
.
Setiap nada berhubungan dengan frekuensi dalam kisaran 20-4100 Hz. Dengan A0
mulai tepat pada 27.500 hertz, setiap not yang sesuai adalah not sebelumnya dikalikan akar kedua belas, atau sekitar 1.059463. Formula yang lebih umum adalah:
di mana n adalah jumlah not, dengan A0 menjadi 1. (Informasi lebih lanjut di sini )
Tantangan
Tulis program atau fungsi yang mengambil string yang mewakili catatan, dan mencetak atau mengembalikan frekuensi catatan itu. Kami akan menggunakan tanda pound #
untuk simbol tajam (atau tagar untuk Anda anak muda) dan huruf kecil b
untuk simbol datar. Semua input akan terlihat seperti (uppercase letter) + (optional sharp or flat) + (number)
tanpa spasi. Jika input berada di luar kisaran keyboard (lebih rendah dari A0, atau lebih tinggi dari C8), atau ada karakter yang tidak valid, hilang atau tambahan, ini adalah input yang tidak valid, dan Anda tidak harus menanganinya. Anda juga dapat dengan aman berasumsi bahwa Anda tidak akan mendapatkan input aneh seperti E #, atau Cb.
Presisi
Karena ketepatan tanpa batas tidak benar-benar mungkin, kami akan mengatakan bahwa apa pun dalam satu sen dari nilai sebenarnya dapat diterima. Tanpa masuk ke rincian berlebih, satu sen adalah akar ke dua dari 1200, atau 1.0005777895. Mari kita gunakan contoh nyata untuk membuatnya lebih jelas. Katakanlah input Anda adalah A4. Nilai pasti dari catatan ini adalah 440 Hz. Sekali datar sen 440 / 1.0005777895 = 439.7459
. 440 * 1.0005777895 = 440.2542
Oleh karena itu, tajam satu sen adalah angka yang lebih besar dari 439.7459 tetapi lebih kecil dari 440.2542 cukup tepat untuk dihitung.
Uji kasus
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.
Ingatlah bahwa Anda tidak harus menangani input yang tidak valid. Jika program Anda berpura-pura itu adalah input nyata dan mencetak nilai, itu dapat diterima. Jika program Anda macet, itu juga dapat diterima. Apa pun bisa terjadi ketika Anda mendapatkannya. Untuk daftar lengkap input dan output, lihat halaman ini
Seperti biasa, ini adalah kode-golf, sehingga celah standar berlaku, dan jawaban tersingkat dalam byte menang.
H
? H
artinya B adalah AFAIK hanya digunakan di negara-negara berbahasa Jerman. (di mana B
artinya Bb omong-omong.) Apa yang disebut orang Inggris dan Irlandia B disebut Si atau Ti di Spanyol dan Italia, seperti dalam Do Re Mi Fa Sol La Si.
H
digunakan di Jerman, Republik Ceko, Slovakia, Polandia, Hongaria, Serbia, Denmark, Norwegia, Finlandia, Estonia, dan Austria, menurut Wikipedia . (Saya juga bisa mengkonfirmasinya untuk Finlandia sendiri.)