İki nota verildiğinde, bu iki notanın oluşturduğu aralığın sessiz veya uyumsuz olup olmadığını belirleyen bir program yazmanız gerekir.
Giriş
Batı müziğinde, sadece 12 "farklı" ton var. En düşükten en yükseğe doğru sıralanır İsimleri, bunlar: C, C#, D, D#, E, F, F#, G, G#, A, A#, B
. Dizi döngüseldir, yani sonsuzdan C
sonra birbiriyle devam eder B
.
İki ton arasındaki mesafeye aralık adı verilir . Yukarıdaki seriye bitişik olan herhangi iki nota arasındaki aralığa (örneğin C — C#
veya E — F
) yarım ton denir . Daha uzak notalar arasındaki aralık, birinciden diğerine geçmek için gereken yarı ton adımlarının sayısı olarak tanımlanmaktadır (muhtemelen sekansın etrafına sarılırken). Bazı örnekler: D to E
= 2 yarı ton, C to G
= 7 yarı ton, B to D#
= 4 yarı ton (bu sekans etrafına sarılır). 1
Şimdi, bu aralıklar iki kategoriye ayrılır: ünsüz (iki notayı aynı anda çalarsanız hoşça çalar) ve uyumsuz (çok fazla değil).
Ünsüz aralıklarını şu şekilde tanımlayalım: 0, 3, 4, 5, 7, 8 ve 9 yarı tonlar.
Geri kalanları uyuşmuyor, yani: 1, 2, 6, 10 ve 11 yarı tonlar.
Meydan okuma
Aşağıdakileri yapmak için bir "program" (kelimenin genel olarak geniş anlamında: bir işlev mükemmel bir şekilde tamam) yazın:
Giriş olarak iki not adı (yukarıdaki diziden dizeler) alın. Onları ne istersen alabilirsin (stdin'den, argüman olarak, istediğin şekilde ayırarak, onları bir karakter listesi olarak almaktan çekinmeyin (örneğin
["C","#"]
). Ancak, notlara başka isimler atamazsın (özellikle sen 0 ile 11 arasında numaralandırılamaz ve rakamları kullanabilir).Dışarıda müzik meraklıları için, notlar oktav olmadan belirtilecektir. Bu durumda, notların hangi sırada gelip hangilerinin daha düşük, hangilerinin daha yüksek olduğu da önemli değildir. Son olarak, yukarıdaki listede bulunmayan isimleri kullanmanıza gerek yoktur.
E#
Daire, çift değişiklik ve benzeri hiçbir başka enharmonik yok.İki farklı değer seçin. Girişinizdeki iki notanın oluşturduğu aralık ünsüz, diğeri değilse, programınız bunlardan birini çıkarmalıdır. (Olabilir
True
veFalse
, ama π ve e eğer istersen :))Bu bir kod golfü. Her dilde bayt cinsinden en kısa program kazanır. İyi eğlenceler!
Örnekler ve Test Durumları
Note 1 Note 2 Output Interval [semitones]
C D Dissonant 2
A# A# Consonant 0
G D Consonant 7 (wraparound)
D# A Dissonant 6
F E Dissonant 11
A C Consonant 3
Bunlardan hiçbirini eklemiyorum, çünkü bu konuda hain bir durum olmadığı için.
Bu benim için ilk zorluk, bu yüzden yapıcı eleştiriler sıcak bir şekilde kabul edilir: --). Teori açıklama özensiz bulursanız, sorular sormaya çekinmeyin. Son olarak, lütfen bunun bunun ya da bunun bir kopyası olduğunu söyleme . Olmadığından emin oldum. (İkincisi oldukça benzer fakat daha karmaşık. Biraz daha basit bir meydan okuma hazırlamanın insanların katılmasını kolaylaştıracağını düşündüm.)
1 : Bu açıklamayı mümkün olduğunca basitleştirmeye çalıştım. Aralıklar hakkında çok daha fazla teori var. Lütfen beni dışarıda bıraktığım için üzülme.