Catatan : Anders Kaseorg memperingatkan saya bahwa ini bisa menjadi duplikat dari pertanyaan sebelumnya . Sepertinya begitu, dan saya minta maaf saya tidak menemukan pertanyaan itu sebelum memposting yang ini. Meskipun demikian, pertanyaan itu hanya menerima satu jawaban dan yang ini lebih sederhana, kalau-kalau Anda semua ingin mencoba kali ini. Saya akan mengerti jika pertanyaan ini akhirnya ditandai sebagai duplikat.
Tantangan
Diberikan input seperti ini:
8g 8Df 4cs 2C 1A
Tulis program / fungsi terpendek yang menghasilkan keluaran seperti ini:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
Aturan
Keluaran harus terdiri dari staf lima baris yang diawali dengan gambar G-clef persis seperti yang ditunjukkan di atas, disejajarkan ke kiri staf dan meninggalkan satu kolom setelah dimulainya staf.
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
Catatan harus dimulai dengan a *atau okarakter tergantung pada jenisnya.
Harus ada tepat delapan kolom pemisahan setiap *atau okarakter:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
Staf harus diakhiri dengan terminator yang diluruskan ke kanan seperti yang ditunjukkan dalam contoh. Bilah kiri terminator harus dipisahkan 8 kolom dari not terakhir.
Input akan berupa string tunggal yang berisi catatan (setidaknya satu, tidak ada input kosong), masing-masing dipisahkan oleh spasi (Anda dapat menganggap setiap catatan akan menjadi yang tepat, jadi tidak perlu memeriksa kesalahan). Anda juga dapat mengambil input sebagai array string, dengan catatan per elemen dalam array. Untuk setiap not, karakter pertama akan menjadi penyebut panjang note ( 1untuk keseluruhan note / semibreve , dimulai dengan o; 2untuk half note / minim , dimulai dengan o; 4untuk quarter note / crotchet , dimulai dengan *; dan 8untuk yang kedelapan note / quaver , dimulai dengan*). Karakter kedua akan menjadi catatan (lihat tabel berikut), dan yang ketiga, karakter opsional akan menjadi fatau Funtuk nada datar dan satau Suntuk nada tajam.
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
Jelas, input harus menghormati kasing untuk catatan, tetapi Anda dapat memilih kasing fdan spengubah.
Catatan cdan Aharus menambahkan dua -(garis besar buku), satu di setiap sisi, karena mereka harus memperpanjang staf. Catatan ddan di Gluar staf tetapi tidak perlu garis besar.
Ratakan atau runcing catatan harus menambah batau #dua posisi di sebelah kiri catatan.
Batang (jika ada) harus digambar dengan 4 batang vertikal. Catatan dari bdan di atas harus menarik batang ke bawah dan di sisi kiri catatan. Catatan dari adan di bawah harus menarik batang ke atas dan di sisi kanan catatan. Quavers harus menambahkan bendera, selalu ke kanan dan persis seperti yang ditunjukkan, dan tidak perlu berseri-seri jika ada beberapa dari mereka secara berurutan.
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
Seperti biasa, program / fungsi Anda dapat langsung menggambar output atau mengembalikan string, array string, matriks karakter atau format lain yang masuk akal.
Tautan yang bermanfaat
Ini adalah kode-golf , jadi semoga program / fungsi terpendek untuk setiap bahasa menang!
Bonus: cobalah menulis contoh dengan melodi terkenal dan biarkan semua orang mencoba menebak melodi yang mana itu!