Yıl 930 ve Gregoryen Kilisesi bir sorun yaşıyor. Binlerce sayfa zikir müziği var, ama sorun şu ki, tüm notalar herhangi bir gerçek organizasyon sistemine sahip olmak yerine bir yığın üzerine atıldı:
Görüntü Haritacıları Loncası'nda kullanıcı oyun yazarı tarafından .
Kilise tüm notaları organize etmelidir, bu yüzden onlar için bir program düzenlemek için bir ortaçağ yazılım mühendisi tuttular. İşe alınan yazılım mühendisisiniz. Bununla birlikte, ortaçağ dönemlerinde derleme süreci, programın yavaş İncil yazarlarından oluşan bir ekip tarafından kağıda yazılmasını içerir. Scribler ekibinin kodunuzu derlemesi için geçen süreyi azaltmak için programı olabildiğince küçük hale getirmelisiniz.
Kilise tezahürat müziğinin yazıldığı müzikal skalaya göre düzenlenmesini istiyor. Kilisenin tezahürat müziğinin tamamı Dorian skalalarında yazılıyor . Belirli bir müzik parçasının notları göz önüne alındığında, programınız içinde bulunduğu Dor ölçeğini çıkaracaktır. Burada, tam olarak bir Dor ölçeğinin ne olduğunu açıklayacağım. Zaten biliyorsanız, bu bölümü atlayabilirsiniz.
Herhangi bir melodide 12 olası nota vardır. İşte sırayla:
C C# D D# E F F# G G# A A# B
bir yarım ton (a kullanılarak temsil edilir S
) etrafa sarılarak bir adım sağa doğru artar (böylece B'den yarım ton C'ye geri döner). Bir ton (a kullanılarak temsil edilir T
) iki yarı tondur . Örneğin, F # 'dan bir yarı ton G olur. F #' dan bir ton G # olur.
Bir Dorian ölçeği oluşturmak için listedeki herhangi bir nottan başlıyoruz ve ardından karşılaştığımız notları listeleyen aşağıdaki kalıpta ilerliyoruz:
T, S, T, T, T, S
Bir örnek. A'dan başlıyorum. Dorian ölçeğimin notları şöyle olur:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
Ölçek A, B, C, D, E, F # ve G notalarına sahiptir. A'dan başladığım için buna Dor ölçeği . Bu nedenle, her biri başladıkları nottan sonra adlandırılan 12 farklı Dorian ölçeği vardır. Her biri farklı bir konumdan başlayarak aynı tonları ve yarı tonları kullanır. Açıklamam tutarlı değilse Wikipedia'ya da başvurabilirsiniz .
Programın girişi programınız için uygun olan her şeyden verilebilir (örn. STDIN, komut satırı argümanı, raw_input()
). Bir değişkende önceden başlatılmamış olabilir. Giriş, parçanın melodisini temsil eden virgülle ayrılmış notların bir listesi olacaktır. Tekrarlanan notlar olabilir. Girdide her zaman parçanın ölçeğini kesin olarak çıkarabilmek için yeterli sayıda farklı not olacaktır. Örnek bir giriş:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
Programın çıktısı string olmalıdır Dorian scale in X
burada X, ölçeğin başlangıç notudur. Örnek girişin çıktısı:
Dorian scale in B
Bunu B ( B C# D E F# G# A
) ' deki Dor ölçeği ile karşılaştırarak melodinin tüm notalarının bu ölçek içinde olduğunu görüyoruz. Bu durumda C # notu kullanılmaz. Bununla birlikte, B Dorian'ı doğru bir anahtar olarak net bir şekilde tanımlamak için yeterli notlar vardır. Başka hiçbir Dorian ölçeği uymuyor, çünkü denediğimiz diğer ölçek ne olursa olsun, ölçeğe ait olmayan melodinin her zaman en az bir notu vardır.
Bu kod golf, bu yüzden en az karakter içeren giriş kazanır. Sorularınız varsa yorumlarda sorun.