Menggali di kedalaman folder temp Anda, Anda menemukan beberapa komposisi untuk piano. Sayangnya, komposisi ini ditulis dengan nama catatan dan durasi saja, dan Anda hanya memiliki akses ke terminal teks. Karena itu, tugas Anda adalah menulis program untuk menampilkan komposisi sebagai seni ASCII.
Memasukkan
Program Anda harus menerima dua string sebagai input. String pertama akan mewakili not-not staf top (dengan treble clef), sedangkan string kedua akan mewakili not-not staf bottom.
Catatan akan disahkan dalam notasi pitch ilmiah . Catatan staf puncak akan selalu ada di antara C4
dan C6
inklusif. Catatan staf bawah akan selalu berada di antara C2
dan C4
inklusif.
Setiap catatan akan datang dengan durasi, yang akan menjadi salah satu dari: 1
, 2
, 4
, 8
. Ini mewakili seluruh not (semibreve), setengah not (minimal), not seperempat (not seperempat), dan not kedelapan (quaver) masing-masing.
Catatan durasi lainnya tidak akan pernah muncul di input.
Bagaimana catatan dan durasi dipisahkan, dan bagaimana setiap catatan dipisahkan dari catatan lain dalam input tergantung pada kebijaksanaan Anda. Berikut ini adalah contoh input untuk staf puncak:
E4/4 A4/8 C#5/8 E5/2
Di sini, not dipisahkan oleh spasi, dan durasinya dipisahkan dari note dengan garis miring ke depan. Pembatas ini tidak diperbaiki, dan Anda dapat memilih untuk mengubahnya atau menghilangkannya sama sekali.
Anda dapat mengasumsikan setidaknya ada satu catatan di setiap staf. Tidak ada sandaran dalam input.
Keluaran
Program Anda adalah untuk mencetak skor sebagai seni ASCII, sesuai dengan deskripsi berikut.
Clefs harus menjadi hal pertama di sebelah kiri output Anda (jarak antara dua paranada tidak boleh diubah):
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
Batang catatan (garis vertikal di sebelah lingkaran) harus mengarah ke atas jika catatan berada di bawah garis tengah staf. Itu harus menunjuk ke bawah jika catatan itu di atas garis tengah staf. Jika nada ada di garis tengah, maka batang dapat menunjuk ke kedua arah. (Satu-satunya pengecualian untuk ini adalah untuk bonus, dan terjadi saat menghubungkan catatan kedelapan, dijelaskan nanti). Batang harus dimulai pada garis di atas / di bawah lingkaran, dan harus 6
garis tinggi.
Semua jenis catatan kecuali seluruh catatan memiliki batang. Bendera nada kedelapan diwakili oleh dua garis miring ke depan pada garis yang berbeda (lihat catatan di bawah).
Catatan yang diisi (untuk not seperempat dan kedelapan) diwakili oleh (@)
. Head note kosong (untuk setengah dan seluruh note) diwakili oleh ( )
.
Accidentals (benda tajam, flat, naturals) harus ditempatkan seperti yang ditunjukkan dalam contoh catatan, dengan tepat satu karakter antara sisi kanan dari kecelakaan dan sisi kiri kepala catatan.
Garis besar harus digunakan bila perlu, dan harus 7
panjang karakter, berpusat di sekitar kepala catatan.
Setiap nada harus 12
lebar karakter.
Catatan contoh:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
Setelah catatan 12 karakter, biarkan 2 * 12 - 12 = 12
karakter kosong (baik atau
-
tergantung pada baris) jika catatan tersebut adalah not seperempat. Jika catatan adalah setengah catatan, biarkan 4 * 12 - 12 = 36
karakter kosong. Jika catatan adalah seluruh catatan, biarkan 8 * 12 - 12 = 84
karakter kosong. Jangan menambahkan karakter tambahan untuk catatan kedelapan.
Di akhir setiap pengukuran (96 karakter setelah baris clef atau bar), outputkan baris bar. Ini dilakukan dengan menurunkan setiap karakter antara garis paling atas dan paling bawah (inklusif), dan mengganti dengan
|
dan -
dengan +
. (Lihat contoh output di bagian bawah pertanyaan).
Pada akhir karya, hasilkan musik berakhir dengan mengeluarkan 3 baris bar berturut-turut, tetapi dengan spasi antara yang pertama dan yang kedua. Itu adalah:
+-++
| ||
+-++
| ||
. ..
. ..
Perhatikan bahwa benda tajam, flat, dan alami bertahan hingga akhir pengukuran. Tanda alami seharusnya hanya digunakan untuk membatalkan tajam atau flat yang digunakan sebelumnya dalam ukuran yang sama.
Untuk keperluan tugas ini, benda tajam, flat, dan natural hanya memengaruhi nada dalam satu oktaf, dan dalam satu kunci (tajam pada A5 tidak menyebabkan A4 menjadi tajam, dan flat pada C4 di staf atas tidak menyebabkan C4 di staf bawah yang akan diratakan).
Informasi hanya untuk bonus
Bonusnya melibatkan menghubungkan dengan benar not ke delapan.
Ketika ada dua nada kedelapan berturut-turut, disejajarkan dengan beat not seperempat (dengan kata lain, jumlah karakter sebelum not kedelapan pertama adalah kelipatan dari 24), kedua not kedelapan harus dihubungkan.
Biarkan catatan A menjadi catatan terjauh dari tengah staf. Jika kedua catatan adalah jarak yang sama dari tengah, baik catatan mungkin catatan A . Biarkan lainnya catatan be catatan B .
Arah kedua batang harus menjadi arah batang catatan A .
Batang salah satu not harus 6
garis tinggi (seperti halnya batang pada umumnya), dan batang not lainnya harus diperluas ke ujung batang not lainnya.
Batang harus dihubungkan dengan _
.
Contoh catatan kedelapan terhubung:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
Contoh input dan output
Masukan :
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
Keluaran :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
Demi demonstrasi, pada langkah ketiga, F#
nada ke delapan terhubung, sedangkan G#
nada ke delapan tidak. Program Anda harus menghubungkan catatan kedelapan kapan pun berlaku (untuk bonus), atau membiarkan semuanya terputus.
Informasi lainnya
- Berapapun spasi / garis spasi tambahan dapat diterima.
- Seharusnya tidak ada spasi putih tambahan sebelum clefs, atau spasi putih antara catatan. Sejumlah baris kosong dapat dipancarkan sebelum / setelah output.
- Bonus untuk menghubungkan catatan kedelapan adalah 0,75 * jumlah byte kode sumber .
- Ini kode-golf , jadi kode terpendek menang.