Ini kebalikan dari Musik: ada apa di chord ini? , yaitu untuk mencetak catatan dalam akord yang diberikan. Kali ini inputnya adalah daftar catatan dalam akor, dan tugas Anda adalah untuk menghasilkan akor mana.
Program Anda harus mendukung akord triadik berikut. Contoh diberikan dengan root C. Akord dengan root lain adalah akord yang sama dengan semua nada diputar sehingga C akan menjadi catatan root, misalnya Dmaj terdiri dari D, F # dan A.
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
Cmaj C E G
Cm C D# G
Caug C E G#
Cdim C D# F#
Csus4 C F G
Csus2 C D G
Perhatikan bahwa Caug sama dengan Eaug dan G # aug, dan Csus4 sama dengan Fsus2. Anda dapat menampilkan salah satu tetapi ada bonus jika Anda menampilkan semuanya.
Dan akord ketujuh untuk bonus tercantum dalam tabel berikut:
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
C7 C E G A#
Cm7 C D# G A#
Cmmaj7 C D# G B
Cmaj7 C E G B
Caug7 C E G# A#
Cdim7 C D# F# A
Aturan
- Anda dapat menulis program atau fungsi yang lengkap.
- Input adalah daftar catatan, dipisahkan oleh spasi atau karakter lain yang sesuai. Ini juga bisa berupa array string (jika mengambil input dari argumen fungsi) atau representasi string array tersebut.
- Input tidak harus dalam urutan tertentu.
- Mungkin ada duplikat catatan di input. Mereka harus diperlakukan dengan cara yang sama karena hanya ada satu dari mereka.
- Outputnya adalah nama chord. Dalam hal ini akan menampilkan beberapa nama, aturan yang sama untuk input berlaku.
- Jika input bukan kunci yang didukung, Anda harus mencetak catatan apa adanya. Program Anda juga dapat mendukung akor lain yang tidak tercantum dalam tabel di atas (yang valid tetapi tidak memiliki bonus).
- Anda dapat menggunakan notasi lain yang tercantum dalam artikel Wikipedia . Tetapi jika Anda memilih
C
untuk C mayor, Anda harus menambahkan awalan yang dapat dibaca manusia dalam kedua kasus untuk membedakan akor dengan satu not. - Anda tidak dapat menggunakan fungsi bawaan untuk tugas ini (jika ada).
- Ini adalah kode-golf. Kode terpendek dalam byte menang.
Contohnya
- Input:
C D# G
Output:Cm
. - Input:
C Eb G
Output:Cm
. - Input:
C Eb F#
Output:Cdim
. - Input:
F A C#
Output:Faug
,Aaug
,C#aug
,Dbaug
atauFaug Aaug C#aug
,Faug Aaug Dbaug
dalam urutan apapun. - Input:
F D F F F F A A F
Output:Dm
. - Input:
C D
Output:C D
.
Bonus
- -30 jika mencetak semuanya jika ada lebih dari satu interpretasi (untuk aug, sus4 / sus2 dan dim7).
- -70 jika itu juga mendukung akord ketujuh.
- -200 jika menerima input MIDI dan mencetak setiap chord yang telah diterimanya. Perhatikan bahwa catatan tidak harus dimulai atau berakhir pada saat yang sama. Anda memutuskan apa yang terjadi di kondisi perantara (selama tidak macet atau berhenti bekerja). Anda dapat berasumsi tidak ada catatan di saluran perkusi (atau hanya ada satu saluran jika itu nyaman). Disarankan juga untuk menyediakan versi teks (atau larik) untuk pengujian, terutama jika itu tergantung platform.
B#
,Cb
, dllCsus4 is the same as Gsus2
. Saya pikir maksudCsus2 is the same as Gsus4
Anda bukan?Jawaban:
Pyth 190 karakter - 30 - 70 = 90
Tidak begitu senang dengannya. Menggunakan akord kode keras.
Pemakaian:
Cobalah di sini: Pyth Compiler / Executor . Nonaktifkan mode debug dan gunakan
"C D# G"
sebagai input.Penjelasan:
Pertama beberapa persiapan:
Kemudian fungsi yang mengubah catatan menjadi bilangan bulat
Kemudian untuk setiap not, geser coord dan cari dalam tabel
sumber
Perl 5: 183 - 100 = 83
Sunting: Saya berhasil memotong beberapa karakter tambahan jadi saya juga mengubah nama akor seperti pada solusi Python, jadi saya bisa berpura-pura sejenak bahwa saya sedang memimpin.
Contoh:
sumber
Python 2, 335 byte - 30 - 70 = 235
Upaya pertama pada golf yang sedikit lebih panjang, jadi saya mungkin kehilangan beberapa trik yang jelas.
Komentar:
Output sampel
sumber