Temp klasörünüzün derinliklerinde dolaşırken, piyano için bazı besteler bulabilirsiniz. Ne yazık ki, bu kompozisyonlar sadece not isimleri ve süreleri ile yazılmıştır ve sadece bir metin terminaline erişiminiz vardır. Bu nedenle, göreviniz kompozisyonları ASCII sanatı olarak göstermek için bir program yazmak.
Giriş
Programınız giriş olarak iki dizeyi kabul etmelidir. İlk dize üst kadro notlarını (tiz nota anahtarı ile) temsil ederken, ikinci dize alt kadro notlarını temsil edecektir.
Notlar bilimsel adımlarda gösterilecektir . Üst kadro notları her zaman arasında C4
ve C6
dahil olacaktır. Alt kadro notları her zaman arasında C2
ve C4
dahil olacaktır.
Her nota biri olacak bir süre, birlikte gelir: 1
, 2
, 4
, 8
. Bunlar sırasıyla tam bir notayı (semibreve), yarım notayı (minim), çeyrek notayı (kasık) ve sekizinci notayı (tuhaf) gösterir.
Başka bir sürenin notları girdide asla görünmeyecektir.
Notun ve sürenin nasıl ayrıldığı ve her notun girişteki diğer notlardan nasıl ayrıldığı sizin takdirinize bağlıdır. Aşağıdakiler üst düzey personel için örnek bir girdidir:
E4/4 A4/8 C#5/8 E5/2
Burada, notlar boşlukla ayrılır ve süre, nottan eğik çizgi ile ayrılır. Bu sınırlayıcılar sabit değildir ve bunları değiştirmeyi ya da tamamen atlamayı tercih edebilirsiniz.
Her personelde en az bir not olduğunu varsayabilirsin. Girişte hiç dinlenme yok.
Çıktı
Programınız, aşağıdaki açıklamalara uygun olarak, skoru ASCII sanatı olarak göstermektir.
Çıktılarınızın solundaki ilk şey nota anahtarı olmalıdır (iki asanın arasındaki mesafenin değişmemesi gerekir):
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
Not bir personelin orta çizgisinin altındaysa, bir notun gövdesi (dairenin yanındaki dikey çizgi) yukarı bakmalıdır. Not, bir personelin orta çizgisinin üzerinde ise aşağı doğru işaret etmelidir. Not orta çizgideyse, gövde her iki yöne de gelebilir. (Bunun tek istisnası, ikramiye içindir ve sekizinci notları sonradan tarif ederken bağlarken ortaya çıkar). Kök, dairenin üstündeki / altındaki çizgide başlamalı ve 6
çizgiler uzun olmalıdır.
Bütün notlar hariç her türlü notta kaynaklanıyor. Sekizinci notun bayrağı, farklı çizgilerdeki iki eğik çizgiyle temsil edilir (aşağıdaki örnek notlara bakın).
Doldurulmuş bir not başlığı (çeyrek ve sekizinci notlar için) ile gösterilir (@)
. Boş bir not başı (yarım ve tam notalar için) ile temsil edilir ( )
.
Kazalar (keskin uçlar, düzlükler, doğal maddeler), örnek notlarda gösterildiği gibi, kazayla sağ taraf ile not başının sol tarafı arasında tam olarak bir karakter olacak şekilde yerleştirilmelidir.
Defter çizgileri gerektiğinde kullanılmalı 7
ve not başlığı çevresinde ortalanmış uzunlukta karakterlerden oluşmalıdır .
Her notun 12
karakterleri geniş olması gerekir .
Örnek notlar:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
12 karakterlik nottan sonra, not çeyrek not ise 2 * 12 - 12 = 12
karakterleri boş bırakın (hatta veya
-
satıra bağlı olarak). Not yarım not ise 4 * 12 - 12 = 36
karakterleri boş bırakın . Not bir not ise, 8 * 12 - 12 = 84
karakterleri boş bırakın . Sekizinci notalar için fazladan karakter eklemeyin.
Her ölçünün sonunda (nota anahtarı veya çubuk çizgisinden sonra 96 karakter), bir çubuk çizgisi oluşturur. Bu, en üstteki ve en alttaki satırlar (herşey dahil) arasındaki her karakteri aşağıya ve ile
|
ve -
ile değiştirerek yapılır +
. (Sorunun altındaki örnek çıktıya bakın).
Parçanın sonunda, art arda 3 bar çizgi çıkartarak, ancak birinci ile ikinci arasında bir boşluk bırakarak müziğin sonunu verin. Yani:
+-++
| ||
+-++
| ||
. ..
. ..
Keskinliklerin, düzlüklerin ve doğalların ölçü sonuna kadar dayandığını unutmayın. Doğal işaret, yalnızca aynı önlemde daha önce kullanılan keskin veya düz olanları iptal etmek için kullanılmalıdır.
Bu görevin amacı için, keskin uçlar, yassılar ve doğal maddeler sadece bir oktavdaki ve bir notadaki notu etkiler (A5 keskinliği A4'ün keskinleşmesine neden olmaz ve üst kadrodaki C4'te düzlük olmaz C4 alt kadroda düzleşir).
Sadece bonus için bilgi
Bonus, sekizinci notaların doğru şekilde bağlanmasını içerir.
Çeyrek nota vuruşuyla aynı hizada olan iki ardışık sekiz nota olduğunda (diğer bir deyişle, ilk sekizinci notadan önceki karakter sayısı 24'ün katıdır), iki sekizinci nota bağlanmalıdır.
Not A personelin ortasından en uzaktaki not olmalıdır. Her iki not da ortala aynı mesafedeyse, notlardan biri A notu olabilir . Diğer notun notu B olsun .
Her iki sapın yönü, A notunun gövdesinin yönü olmalıdır .
Notlardan birinin 6
gövdesi, (genel olarak saplamalar için olduğu gibi) yüksek çizgiler içermeli ve diğer notun gövdesi, diğer notun ucuna kadar uzatılmalıdır.
Sapları ile bağlantılı olmalıdır _
.
Örnek bağlı sekizinci notlar:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
Örnek giriş ve çıkış
Giriş :
A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2
Çıktı :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
Gösteri uğruna, üçüncü önlemde, F#
sekizinci notalar birbirine bağlanırken, sekizinci notalar birbirine bağlanmaz G#
. Programınız, uygulanabilir olduğunda (bonus için) sekizinci notları birleştirmeli veya hepsini bağlantısız bırakmalıdır.
Diğer bilgiler
- Herhangi bir sondaki boşluk / satır miktarı kabul edilebilir.
- Notalardan önce fazladan boşluk kalmamalı, notlar arasında boşluk kalmamalı. Çıktıdan önce / sonra herhangi bir sayıda boş satır yayılabilir.
- Sekizinci notları bağlamak için bonus 0.75 * kaynak kod bayt sayısıdır .
- Bu kod golf , yani en kısa kod kazanır.