Birçok insan eğlence ve eğlence için müzik çalmayı sever. Ne yazık ki, müzik bazen oldukça zor. Bu yüzden buradasınız!
Görev
Onunla mücadele edenler için müzik okumayı daha kolay hale getirmek sizin işiniz. Bir müzikal kadroyu girdi olarak alan ve bu kadroya yazılan notların adlarını veren bir program veya işlev yazmanız gerekir.
Personel, nota anahtarı ve notlar
Bir müzikal personel veya stave, aralarında dört boşluk olan beş yatay çizgidir. Her çizgi veya boşluk, nota anahtarı bağlı olarak farklı bir notayı (tiz) temsil eder.
Aralarından seçim yapabileceğiniz çok az farklı müzik nota anahtarı var , ancak şimdilik sadece biriyle ilgileneceğiz: tiz nota anahtarı . Tiz nota anahtarı üzerinde, notlar personel üzerinde aşağıdaki gibi temsil edilir:
Çizgiler F ---------- D ---------- B ---------- G ---------- E ----------
Spaces ---------- E ---------- C ---------- bir ---------- F ----------
Girişin biçimlendirilmesi
Giriş aşağıdaki gibi tek bir dize olarak verilecektir:
--------------- --------------- --------------- --------------- ---------------
Personelin beş satırı ve dört boşluğu dokuz karakterlik sıradan oluşmaktadır. Personelin satırları -
(tire) karakterleri ve boşluklarla (boşluk) oluşturulur. Her satır bir sonrakinden tek bir yeni satır karakteriyle ayrılır, örneğin:
-----\n \n-----\n \n-----\n \n-----\n \n-----\n
Satırlar keyfi uzunluktadır (programlama diliniz tarafından işlenebilecek makul bir miktarda) ve her satır diğerleriyle aynı uzunluktadır. Ayrıca satırların her zaman üçe bölünebilen bir uzunlukta olacağını unutmayın (bir notun desenini ve ardından iki sütun notsuz olarak sığdırmak için).
Notlar bu personele uygun -
veya karakteri değiştirerek yerleştirilir
o
. Notlar ayrıca bir yarı ton (nota ve bitişik notaları arasındaki frekans farkının yaklaşık yarısı) ile perdede yükseltilebilir (keskin) veya alçaltılabilir (düz). Bu, karakterlerle #
ve b
sırasıyla yerine gösterilir o
. Her not bir sonrakinden tam olarak iki -
karakterle ayrılır ve ilk not her zaman -
ve (boşluk) karakterlerin ilk "sütununda" yer alır .
Not adlarını çıkarırken, programınız her zaman A B C D E F G
personel üzerinde verilen nota karşılık gelen büyük harf ( ) kullanmalıdır . Keskin (For #
() ve düz b
) notları, program ihtiyaçları eklemek #
ve b
nota tekabül mektuba sırasıyla. Keskin veya düz olmayan doğal bir not için bunun yerine bir (boşluk) eklenmelidir.
Misal
Giriş:
---------------------Ö-- Ö ---------------Ö-------- Ö --------- b -------------- Ö ---Ö-------------------- Ö ------------------------
* Bu örnekteki tüm "boşluk" un aslında (boşluk karakteri) olduğunu unutmayın.
Bu durumda (basit bir F ana ölçeği), programınız bunu çıktılamalıdır:
FGA Bb CDEF
Çıktının karakterleri arasındaki boşluğun, personel üzerindeki notlara tam olarak uyacak şekilde tam olarak yukarıda gösterildiği gibi olması gerektiğini unutmayın. Tüm nota adları arasında iki tane vardır arasına hariç (boşluk) karakterleri,
Bb
ve C
. b
Burada birini yerine (boşluk) karakterler.
Başka bir örnek
Giriş:
------------------------ Ö ------------------ # ----- # ------------Ö----------- Ö ------ # ----------------- # Ö-----------------------
Çıktı:
E F# G# A B C# D# E
İyi şanslar için bir örnek daha
:
--------------------- oooo --------------------- Ö --------------------- --------------- O - O- ---------------------
Çıktı:
E E E C E G G
kurallar
- Notlar sadece E çizgisine kadar F keskinliğine kadar olan beş satırlık personel aralığında verilecektir (zorluklar hariç, aşağıya bakın)
- Herhangi bir nota keskin veya düz olabilir, sadece müzikte yaygın olarak görülenler değil (örneğin, B # aslında sadece C olarak gerçekte çalınmasına rağmen, B # girişte hala oluşabilir)
- Her 3 sütun için tam olarak bir nota olacağını varsayabilirsiniz (bu nedenle akor veya bunun gibi bir şey olmayacak ve dinlenmeyecektir)
- Son notun ardından notsuz iki sütun geleceğini varsayabilirsiniz.
- Personelin son satırının bile tek bir yeni satır karakteri geleceğini varsayabilirsiniz.
- Giriş STDIN'den (veya dil eşdeğerinden) veya işlev parametresi olarak alınmalıdır
- Çıktı STDOUT (veya dil eşdeğeri) veya programınız bir işlevse dönüş sonucu olarak olmalıdır
- Standart boşluklara ve gömme deliklere izin verilir! Müzik denemek ve oyun oynamakla ilgilidir. Devam edin ve dilinizle eğlenin (bir boşluktan yararlanmanın en ilginç programı üretmeyebileceğini unutmayın)
- Bu kod golf , bayt en kısa program kazanır
Bonus zorluklar
- Programınız, personelin en üst satırının üzerindeki alanı (G, G #, Gb) başarıyla işleyebiliyorsa% -10.
- Programınız personelin alt satırının altındaki alanı da başarıyla işleyebiliyorsa% -10 (D, D #, Db)
- Bu durumlarda, programınız başlangıç ve bitişte ek bir satır olarak girer; bu satırlar diğer dokuz satırla tamamen aynı şekilde ele alınmalıdır