Dalam teori musik, interval adalah perbedaan antara dua nada. Setiap nada ditentukan oleh jumlah setengah langkah (Perbedaan antara C dan C #) atau seluruh langkah (Perbedaan antara C dan D). Satu langkah penuh sama dengan dua setengah langkah. Berikut adalah daftar semua interval default dan jumlah setengah langkah yang diwakilinya:
0 Perfect Unison
2 Major Second
4 Major Third
5 Perfect Fourth
7 Perfect Fifth
9 Major Sixth
11 Major Seventh
12 Perfect Octave
Ada 3 variasi pada interval default, minor , diminished , dan augmented .
Sebuah minor Interval adalah salah satu setengah langkah lebih rendah dari interval besar, tetapi tidak interval sempurna. Jadi Anda memiliki minor kedua (1), sepertiga minor (3), minor keenam (8), dan minor tujuh (10). Tidak ada yang namanya minor keempat, minor kelima, serempak kecil atau oktaf kecil karena ini semua interval sempurna.
Sebuah berkurang interval satu setengah langkah lebih rendah dari minor atau interval yang sempurna. Ada berkurang Kedua (0), berkurang ketiga (2), berkurang keempat (4), berkurang kelima (6), berkurang keenam (7), berkurang ketujuh (9) dan berkurangnya oktaf (11).
Sebuah augmented interval satu setengah langkah lebih tinggi dari interval besar atau sempurna. Kami memiliki Augmented Unison (1), Augmented Second (3), Augmented third (5), Augmented Fourth (6), Augmented kelima, (8), Augmented keenam (10), dan Augmented ketujuh (12).
Tantangan:
Anda harus menulis program atau fungsi yang mengambil sejumlah setengah langkah atau seluruh langkah dan kemudian mencetak salah satu deskripsi bahasa Inggris yang valid dari interval ini. Tidak masalah deskripsi yang Anda pilih, asalkan cocok dengan tabel IO. Anda dapat menganggap ini sebagai satu string
"5w" == 5 whole steps
"3h" == 3 half steps
atau sebagai angka dan string / char.
5, "w" == 5 whole steps
3, "h" == 3 half steps.
Anda dapat berasumsi bahwa setiap input akan antara 0 dan 12 setengah langkah.
Meja IO
Berikut adalah daftar lengkap memetakan jumlah setengah langkah untuk semua output yang dapat diterima.
0 Perfect unison, Diminished second
1 Minor second, Augmented unison
2 Major second, Diminished third
3 Minor third, Augmented second
4 Major third, Diminished fourth
5 Perfect fourth, Augmented third
6 Diminished fifth, Augmented fourth
7 Perfect fifth, Diminished sixth
8 Minor sixth, Augmented fifth
9 Major sixth, Diminished seventh
10 Minor seventh, Augmented sixth
11 Major seventh, Diminished octave
12 Perfect octave, Augmented seventh
Berikut ini beberapa contoh I / O:
5w Minor Seventh
5h Augmented Third
12h Perfect Octave
12w UNDEFINED
1w Diminished third
2h Major Second
Jawaban:
Ruby, Rev B 138 byte
5 byte disimpan dengan tidak mengulangi
Augmented/Diminished
. 1 byte disimpan dengan menggunakan?h
.Ruby, Rev A 144 byte
Idenya adalah untuk meminimalkan jumlah interval dasar (ketujuh ketujuh dan hanya serentak) dan mengambil keuntungan dari fakta bahwa ketujuh dan perlima memiliki hubungan analog dengan yang antara pertiga dan serentak.
Ada empat jenis ketujuh / ketiga dan 3 jenis kelima / serentak sehingga variabel indeks
i
diatur ke 12 dikurangi jumlah setengah langkah, sehingga istilah pertama dari ekspresii%7/4 + i/7*2
akan memilih jenis interval dasar dengan benar.ungolfed dalam program tes
keluaran
Input perilaku tidak terdefinisi: Fungsi ini memberikan jawaban yang benar
diminished union
untuk -1 langkah setengah, tetapi gagal untuk input lebih dari 12. Misalnya, outputperfect unison
untuk 14 setengah langkah, karena algoritma ini didasarkan pada siklus 14 bukan 12.sumber
Python 2, 149 byte
Pertama, seluruh langkah dikonversi menjadi setengah langkah.
Kemudian,
Diminished
vsAugmented
dicetak. Ini bergantian untuk yang berdekatann
kecuali itun=5
dann=6
memberikan yang sama, yang dicapai dengan pertama-tama menempatkan mereka melintasi modulo batas angka ganjil.Akhirnya, jarak dicetak, dihitung melalui tabel pencarian tiga-bit. Ini lebih pendek daripada melakukan
int('6746543230210'[n])
.sumber
Python 2.7, 155 byte
sumber
Retina, 153 byte
Nomor input pertama dikonversi ke unary, kemudian digandakan jika diikuti oleh
w
, dan huruf apa pun dihapus, hanya menyisakan nomor unary. Jumlah ini kemudian dikonversi kembali ke desimal. Akhirnya, beberapa pencarian dan penggantian diterapkan untuk membangun hasil akhir.Contoh berjalan:
Cobalah online!
sumber
Vitsy , 166 byte
Nah, ini pasti bisa golf lebih lanjut.
Ini berfungsi dengan mendefinisikan jumlah minimum item yang mungkin, kemudian memanggil item-item tersebut melalui sintaksis metode.
Cobalah secara Online!
sumber
Javascript 189 byte
sumber
Java,
225224 byteHarus ada cara yang lebih baik untuk mengemas string ini tetapi saya tidak punya ide.
Bertakuk:
sumber
if(s=='w')i*=2;
dengani*=s=='w'?2:1;