Tugas
Tulis program untuk menentukan nada yang dibunyikan, bersama dengan berapa sen yang tidak selaras, dari senar yang disetel ke frekuensi tertentu dan tekan ke bawah pada titik tertentu.
Demi kesederhanaan, anggaplah bahwa frekuensi suara yang dihasilkan dan panjang tali di sebelah kanan tempat penekanannya berbanding terbalik.
Catatan: tugas ini hanya membahas nada dasar, dan tidak dengan nada tambahan / harmonik lainnya.
Memasukkan
Program Anda diberi dua bagian data:
String yang panjangnya sewenang-wenang, mewakili string yang dimaksud. String ini akan ditandai dengan X di mana string harus ditekan.
[-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used is 5/6) [-X--] is a string pressed at 2/5 of the length of the string. (Length used is 3/5)
Asumsikan nada dibunyikan menggunakan bagian dari string di sebelah kanan
X
.- Angka (tidak harus bilangan bulat), menandakan frekuensi di mana string disetel. Ketepatan angka ini akan paling banyak empat digit melewati desimal.
Dapat diasumsikan bahwa frekuensi yang dilewati akan berada di antara 10 Hz
dan 40000 Hz
.
Input dapat diberikan dalam format pilihan Anda. Silakan tentukan bagaimana input diterima ke dalam program Anda dalam jawaban Anda.
Keluaran
Program Anda harus menampilkan kedua nada terdekat * dalam sistem tuning temperamen sama dua belas nada, dan jumlah sen jauh dari nada terdekat bahwa suara yang dilambangkan oleh string akan (dibulatkan ke sen terdekat).
+n
sen harus digunakan untuk menunjukkan n
sen tajam / di atas not, dan -n
sen untuk flat / di bawah not.
Catatan tersebut harus dikeluarkan dalam notasi pitch ilmiah. Asumsikan A4 disetel ke 440Hz
. Gunakan b dan # untuk nada datar / tajam. Catatan: Baik tajam atau rata dapat digunakan. Untuk catatan di 466.16Hz
, baik A#
atau Bb
dapat dikeluarkan untuk catatan.
Format output terserah Anda, selama output hanya berisi dua informasi yang ditentukan sebelumnya (yaitu mencetak setiap output yang mungkin tidak diperbolehkan).
* catatan terdekat mengacu pada catatan yang paling dekat dengan suara yang dilambangkan dengan input, diukur dalam jumlah sen (oleh karena itu, catatan yang berada dalam 50 cents
suara). Jika suara 50 cents
jauh dari dua not yang berbeda (setelah pembulatan), maka salah satu dari kedua not tersebut dapat dikeluarkan.
Contohnya
Program Anda harus bekerja untuk semua kasus, bukan hanya contoh-contoh berikut.
Output Input Frequency Input String
A4, +0 cents 220 [-----X-----]
A5, +0 cents 220 [--------X--]
D5, -2 cents 440 [--X--------]
B4, -49 cents 440 [X----------]
A#4, +19 cents* 314.1592 [X-]
Eb9, +8 cents* 400 [-----------------------X]
Eb11,+8 cents* 100 [--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------X]
D#1, +49 cents* 10 [--X]
A0, -11 cents 11.7103 [---X--]
* Baik tajam atau rata bisa dihasilkan.
Tautan yang Berpotensi Bermanfaat
Ini kode-golf sehingga jawaban terpendek menang.
[-X--]
string dibagi di 4 tempat (dan karenanya menjadi 5 bagian), dan ditekan pada bagian kedua dari pembagian ini. Dengan demikian, ditekan pada 2/5
, dan panjang yang digunakan adalah 3/5
.
-
pada dasarnya mewakili posisi divisi, terima kasih telah menjelaskan!
[--X--]
string ditekan di tengah divisi di manax
ditempatkan, sedangkan yang terakhir[-X--]
akan berada di 3/8 (bukan 2/5) saat mengikuti logika ini. Atau apakah saya mengerti sesuatu yang salah?