Skala utama (atau skala Ionia) adalah salah satu skala musik yang paling umum digunakan, terutama dalam musik Barat. Ini adalah salah satu skala diatonis. Seperti banyak skala musik, itu terdiri dari tujuh not: yang kedelapan duplikat pertama di dua kali frekuensi sehingga disebut oktaf lebih tinggi dari not yang sama.
Tujuh not musik adalah:
C, D, E, F, G, A, B , C (diulang untuk tujuan contoh)
Skala utama adalah skala diatonis. Ambil suksesi catatan sebelumnya sebagai skala utama (Sebenarnya, Ini adalah skala C Mayor) . Urutan interval antara not skala besar adalah:
utuh, utuh, setengah, utuh, utuh, utuh, setengah
di mana "keseluruhan" adalah nada keseluruhan (kurva merah berbentuk u pada gambar), dan "setengah" berarti semitone (garis putus-putus merah pada gambar).
Dalam hal ini, dari C ke D ada nada keseluruhan , dari D ke E ada nada keseluruhan , dari E ke F ada setengah nada, dll ...
Kami memiliki 2 komponen yang memengaruhi jarak nada antara catatan. Ini adalah simbol Sharp (♯) dan simbol datar (♭).
Simbol Tajam (♯) menambahkan setengah nada pada catatan. Contoh. Dari C ke D kami sebutkan bahwa ada nada keseluruhan, jika kami menggunakan C♯ alih-alih C maka dari C♯ ke D ada setengah nada.
Simbol Flat (♭) melakukan kebalikan dari simbol Sharp, mengurangi setengah nada dari catatan. Contoh: Dari D ke E kami sebutkan bahwa ada nada keseluruhan, jika kami menggunakan Db sebagai gantinya maka dari Db ke E ada nada setengah.
Secara default, dari Note to Note ada seluruh nada kecuali untuk E to F
dan B to C
di mana hanya setengah nada ada.
Catatan dalam beberapa kasus menggunakan pitch peningkatanarmonik dapat membuat setara dengan Skala Utama. Contoh dari ini adalah di C#, D#, E#, F#, G#, A#, B#, C#
mana E#
dan B#
enharmonic tetapi skalanya mengikuti urutan Skala Utama.
Tantangan
Diberikan skala, hasilkan nilai kebenaran jika itu Skala Besar atau setara, jika tidak, hasilkan nilai falsey.
Aturan
- Metode I / O standar diizinkan
- Aturan standar kode-golf berlaku
- Anda tidak perlu mempertimbangkan not ke-8. Asumsikan input hanya akan terdiri dari 7 catatan
- Asumsikan double flat ((), double sharp (♯♯) atau tanda natural (♮) tidak ada
Uji kasus
C, D, E, F, G, A, B => true
C#, D#, E#, F#, G#, A#, B# => true
Db, Eb, F, Gb, Ab, Bb, C => true
D, E, Gb, G, A, Cb, C# => true
Eb, E#, G, G#, Bb, B#, D => true
-----------------------------------------------
C, D#, E, F, G, A, B => false
Db, Eb, F, Gb, Ab, B, C => false
G#, E, F, A, B, D#, C => false
C#, C#, E#, F#, G#, A#, B# => false
Eb, E#, Gb, G#, Bb, B#, D => false
sumber
Jawaban:
Perl 6 ,
76656359 byte-4 byte terima kasih kepada Phil H
Cobalah online!
Penjelasan
sumber
Node.js v10.9.0 ,
78767169 byteCobalah online!
Bagaimana?
Pemberian yang mana:
'#'
'b'
sumber
JavaScript (Node.js) ,
150131125 byteCobalah online!
-19 byte berkat Luis felipe
-6 byte terima kasih kepada Shaggy
Tidak Terkumpul:
sumber
[...'C0D0EF0G0A0B']
bukannya'C0D0EF0G0A0B'.split('')
dan+""
bukannya.toString()
menyimpan beberapa bytex[1]=='#'|-(x[1]=='b')
alih-alihx[1]=='#'?1:(x[1]=='b'?-1:0)
menyimpan beberapa byte juga-10 % 12 == 2
. Meskipun dipikir-pikir ini mungkin gagal dalam beberapa kasus ...Dart ,
198 197 196189 byteCobalah online!
Port longgar dari jawaban Perl 6 yang lama /codegolf//a/175522/64722
Versi lama :
Dart , 210 byte
Cobalah online!
Tidak Terkumpul:
Seluruh langkah adalah 2, seperempat adalah 1. Mod 12 jika Anda melompat ke oktaf lebih tinggi. Iterasi semua not dan hitung perbedaan antara not ke-1 dan not ke-1. Menggabungkan hasilnya dan harus mengharapkan 221222 (2 keseluruhan, 1 setengah, 3 keseluruhan).
sumber
i=1
kei=0
dapat mengurangi byte dengan mengubahfor(;i<7;i++)
kefor(;++i<7;)
. Selain itu, kurung{}
dapat dihapus sekitar loop itu, dengan menempatkanj+=...
dalam bagian ketiga dari loop:for(;++i<7;j+='${(y[0]-y[1])%12}')
. Dan satu hal lagi yang berubahreturn j=='221222';
untukreturn'221222'==j;
menyingkirkan ruang. -6 ( 210 byte ) setelah modifikasi ini.if(k>9)k--;if(k>3)k--;
kek-=k>3?k>9?2:1:0;
dank+=m.length<2?0:m[1]=='#'?1:m[1]=='b'?-1:0;return k;
kereturn m.length<2?k:m[1]=='#'?k+1:m[1]=='b'?k-1:k;
. :)C (gcc) ,
-DA=a[i]
+ 183 = 191 byteCobalah online!
Berdasarkan jawaban Perl.
Mengambil input sebagai string lebar.
Tidak Terkumpul:
sumber
[Bahasa Wolfram (Mathematica) + Paket Musik`], 114 byte
Saya suka musik dan menemukan ini menarik, tapi saya keluar bermain golf nyata ketika peluang golf kode ini turun sehingga pengajuan saya agak lambat.
Saya pikir saya akan mencoba ini dengan cara yang sama sekali berbeda, memanfaatkan pengetahuan musik yang sebenarnya. Ternyata paket musik Mathematica tahu frekuensi dasar dari not yang disebutkan. Pertama saya mengonversi string input menjadi urutan catatan bernama. Selanjutnya, saya mengambil rasio masing-masing not berturut-turut dan menggandakan setiap yang kurang dari 2 (untuk memperhitungkan pergeseran oktaf). Kemudian saya membandingkan rasio ini dengan rasio skala Ionia yang memiliki sekitar 6% perbedaan frekuensi antara setengah nada dan 12% antara nada penuh.
Lebih dari setengah byte yang dihabiskan di sini adalah untuk mengubah input menjadi simbol bernama.
Cobalah online!
sumber
Python 3 ,
175136134114112 byteCobalah online!
Implementasi satu-baris Python 3.
Terima kasih kepada @Arnauld untuk ide menghitung nada menggunakan pembagian dan modulo.
Terima kasih kepada @ Jo King untuk -39 byte.
sumber
[Python]
269202 bytePerbaikan dari
Jo King
:Cobalah!
Tidak disatukan, dengan test driver:
sumber
Ruby , 109 byte
Cobalah online!
sumber