Tahun adalah 930, dan Gereja Gregorian mengalami masalah. Mereka memiliki ribuan halaman nyanyian musik, tetapi masalahnya adalah bahwa semua lembaran musik hanya dibuang ke tumpukan alih-alih memiliki sistem organisasi yang nyata:
Gambar oleh pengguna gamerprinter di Cartographers 'Guild .
Gereja perlu mengatur semua lembaran musik, sehingga mereka telah menyewa seorang insinyur perangkat lunak abad pertengahan untuk menulis sebuah program untuk mengaturnya bagi mereka. Anda adalah insinyur perangkat lunak yang telah dipekerjakan. Namun, proses kompilasi di abad pertengahan melibatkan program yang dituliskan di atas kertas oleh tim penulis Alkitab yang lambat. Untuk mengurangi waktu yang dibutuhkan oleh tim juru tulis untuk mengkompilasi kode Anda, Anda harus membuat program sekecil mungkin.
Gereja ingin musik nyanyian disusun berdasarkan skala musik yang mereka tulis. Semua musik nyanyian Gereja ditulis dalam skala Dorian . Mengingat catatan dari sepotong musik tertentu, program Anda akan menampilkan skala Dorian yang ada di sini. Di sini, saya akan menjelaskan dengan tepat apa skala Dorian itu. Jika sudah tahu, Anda dapat melewati bagian ini.
Ada 12 nada yang memungkinkan dalam melodi apa pun. Berikut urutannya:
C C# D D# E F F# G G# A A# B
Sebuah semitone (diwakili menggunakan S
) adalah incrementing satu langkah ke kanan, membungkus di sekitar (jadi semitone naik dari B akan kembali ke C). Sebuah nada (diwakili menggunakan T
) adalah dua semitone. Misalnya, semitone yang naik dari F # adalah G. Nada yang naik dari F # adalah G #.
Untuk membuat skala Dorian, kita mulai dari catatan apa pun dalam daftar, dan kemudian naik ke atas dalam pola berikut, daftar catatan yang kita temui:
T, S, T, T, T, S
Sebuah contoh. Saya mulai dari A. Catatan skala Dorian saya menjadi:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
Skala ini memiliki catatan A, B, C, D, E, F #, dan G. Karena saya mulai dari A, kita akan menyebutnya skala Dorian di A . Oleh karena itu ada 12 skala Dorian yang berbeda, masing-masing diberi nama sesuai dengan catatan yang mereka mulai. Masing-masing dari mereka menggunakan pola nada dan semi-nada yang sama, hanya mulai dari posisi yang berbeda. Jika penjelasan saya tidak masuk akal, Anda juga dapat berkonsultasi dengan Wikipedia .
Input program dapat diberikan dari apa pun yang sesuai untuk program Anda (mis. STDIN, argumen baris perintah, raw_input()
). Ini mungkin tidak diinisialisasi dalam suatu variabel. Input akan berupa daftar catatan yang dipisah koma, mewakili melodi karya. Mungkin ada catatan berulang. Akan selalu ada cukup berbagai catatan dalam input untuk dapat secara meyakinkan menyimpulkan skala karya. Contoh input:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
Output dari program harus berupa string Dorian scale in X
, di mana X adalah nada awal dari skala. Output dari input contoh:
Dorian scale in B
Membandingkan ini dengan skala Dorian dalam B ( B C# D E F# G# A
) kita melihat bahwa semua nada melodi berada dalam skala ini. Catatan C # tidak digunakan dalam kasus ini. Namun ada catatan yang cukup untuk secara jelas mengidentifikasi B Dorian sebagai kunci yang benar. Tidak ada skala Dorian lain yang cocok, karena skala apa pun yang kami coba, selalu ada setidaknya satu nada melodi yang tidak termasuk dalam skala.
Ini adalah kode golf, jadi entri dengan jumlah karakter terpendek akan menang. Tanyakan dalam komentar jika Anda memiliki pertanyaan.