Kemarin, saya membeli harmonika:
Gambar 1: Harmonika.
Namun, impian saya untuk dapat memainkan harmonika blues yang menggetarkan jiwa yang menggerakkan orang dan menyebabkan seorang pria dewasa menangis dengan cepat hancur oleh dua masalah:
- Harmonika hanya dapat memainkan not tertentu;
- Saya sangat buruk bermain harmonika.
Terlepas dari kurangnya keterampilan saya di harmonika, masih ada beberapa lagu yang bisa saya mainkan di sana. Namun, tidak segera jelas apakah saya dapat memainkan musik di harmonika atau tidak. Dengan memberikan not pada sebuah karya musik, tulislah sebuah program untuk menentukan apakah saya dapat memutarnya di harmonika atau tidak.
Seperti yang ditunjukkan gambar di atas, harmonika saya memiliki sepuluh lubang di dalamnya. Dengan setiap lubang, saya bisa menghembuskannya atau menghirupnya - lubang yang saya pilih, dan apakah saya menghirup atau menghembuskannya, mengubah nada suara yang dihasilkan. Setiap lubang memiliki nada yang berbeda untuk mengeluarkan dan menghirup, tetapi ada beberapa kombinasi yang menghasilkan nada yang sama. Secara keseluruhan, harmonika saya dapat memainkan 19 nada yang berbeda. Pitch-pitch tersebut disajikan dalam notasi ilmiah musikal - surat itu mewakili not tersebut, dan angka tersebut menunjukkan oktaf mana.
Hole Breathing Note
1 Exhale C4
1 Inhale D4
2 Exhale E4
2 Inhale G4
3 Exhale G4
3 Inhale B4
4 Exhale C5
4 Inhale D5
5 Exhale E5
5 Inhale F5
6 Exhale G5
6 Inhale A5
7 Exhale C6
7 Inhale B5
8 Exhale E6
8 Inhale D6
9 Exhale G6
9 Inhale F6
10 Exhale C7
10 Inhale A6
Misalnya, jika saya menghembuskan napas di lubang 3, saya akan mendapat G4
catatan. Jika saya menghirup pada lubang 2, saya juga akan mendapatkan G4
catatan. Jika saya menghembuskan napas pada lubang 7, saya akan mendapatkan C6
.
Ketika saya bernapas ke harmonika, selain menghembuskan napas atau menghirup, saya juga dapat memilih apakah akan bernapas tipis atau luas . Pernapasan tipis menyebabkan hanya satu lubang untuk berbunyi, sedangkan bernapas secara luas menyebabkan satu lubang dan kedua lubang di kedua sisi lubang itu berbunyi. Saya tidak memiliki keterampilan embouchure untuk meniup ke dua lubang - itu salah satu atau tiga.
Sebagai contoh, jika saya mengeluarkan sedikit ke lubang 4, hanya lubang 4 akan terdengar, jadi saya akan mendapatkan suara C5. Jika saya banyak dihembuskan ke lubang 4, lubang 3, 4, dan 5 akan terdengar, dan saya akan mendapatkan kunci G4, C5, E5. Jika saya secara luas menghirup ke lubang 4, lubang 3, 4, dan 5 akan terdengar tetapi mereka akan memainkan nada tarik napas sebagai gantinya, yang menghasilkan akord B4, D5, F5. Perhatikan bahwa untuk lubang di kedua ujungnya, jika saya menarik napas secara luas ke dalamnya, hanya dua lubang yang akan berbunyi (karena tidak ada lubang 0 atau lubang 11).
Namun, saya tidak bisa menghirup dan menghembuskan napas secara bersamaan. Misalnya, saya bisa menghembuskan napas ke dalam lubang 4, 5, dan 6 untuk menghasilkan nada C5, E5, dan G5 yang terdengar bersamaan, membentuk akor. Namun, saya tidak bisa menghirup dan menghembuskan napas pada saat yang sama, jadi tidak mungkin bagi saya untuk memainkan akor C5, F5, A5 karena saya harus entah bagaimana menghembuskan napas di lubang 4 dan menghirup di lubang 5 dan 6. Jika ini masih belum jelas, utas komentar ini mungkin berguna.
Masukan adalah catatan musik. Catatan tersebut dinotasikan dengan cara yang sama seperti yang disebutkan di atas dalam tabel, dan dipisahkan dengan koma. Catatan yang dibungkus dengan kurung keriting mewakili akor Contohnya:
C4,D4,G4,{D5,F5,A5},B5
Ini berarti, "C4, lalu D4, lalu G4, lalu D5, F5, dan A5 pada saat yang sama, lalu B5." Program Anda akan mengambil string dalam format ini sebagai input dan output True
jika mungkin bagi saya untuk memainkan musik pada harmonika saya, atau False
sebaliknya. Untuk input dan output sampel, contoh di atas harus berupa output True
. Input {C5,F5,A5}
di sisi lain akan ditampilkan False
.
Ini kode golf, jadi entri terpendek menang.
Berikut ini beberapa kasus uji:
Input (skala AC Mayor):
C4,D4,E4,F4,G4,A4,B4,C5
Keluaran:
False
(karena harmonika tidak dapat memainkan F4 atau A4)
Input (2 bilah pembuka dari Let It Go ):
E6,F6,A5,E6,F6,F6,E6,A5,F6,E6
Keluaran:
True
Memasukkan:
{E6,G6,F6}
Keluaran:
False
Memasukkan:
{G4,C5,E5},{F5,A5,B5}
Keluaran:
True
Anda dapat mengasumsikan bahwa akor akan datang dalam urutan nada yang lebih rendah ke yang lebih tinggi.