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 o
karakter tergantung pada jenisnya.
Harus ada tepat delapan kolom pemisahan setiap *
atau o
karakter:
/\ -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 ( 1
untuk keseluruhan note / semibreve , dimulai dengan o
; 2
untuk half note / minim , dimulai dengan o
; 4
untuk quarter note / crotchet , dimulai dengan *
; dan 8
untuk yang kedelapan note / quaver , dimulai dengan*
). Karakter kedua akan menjadi catatan (lihat tabel berikut), dan yang ketiga, karakter opsional akan menjadi f
atau F
untuk nada datar dan s
atau S
untuk 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 f
dan s
pengubah.
Catatan c
dan A
harus menambahkan dua -
(garis besar buku), satu di setiap sisi, karena mereka harus memperpanjang staf. Catatan d
dan di G
luar staf tetapi tidak perlu garis besar.
Ratakan atau runcing catatan harus menambah b
atau #
dua posisi di sebelah kiri catatan.
Batang (jika ada) harus digambar dengan 4 batang vertikal. Catatan dari b
dan di atas harus menarik batang ke bawah dan di sisi kiri catatan. Catatan dari a
dan 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!
Jawaban:
SOGL V0.12 ,
178175174173172171 byteCoba Di Sini! (θ ditambahkan untuk kemudahan penggunaan; Untuk menjalankan sebagai 171 byte itu mengharapkan input berada di tumpukan)
Sejauh yang saya tahu ini berhasil, tetapi jika Anda menemukan masalah, katakan padaku.
Penjelasan:
bagian pertama: pembuatan kanvas
bagian kedua: lingkaran, perhatikan penempatan kepala
bagian ketiga: bendera dan batang
sumber
2bs
dalam contoh Anda harus memiliki batang mengarah ke bawah.JavaScript (ES6),
616527 byteTerima kasih @shaggy karena telah menghapus hampir 90 byte
Saya tidak tahu tentang catatan ... sampai sekarang, saya harap itu benar.
penjelasan
sumber
t[0]
dant[2]
, dan kemudian lakukan sajaq=t.length*9
s>6&&(
yang selanjutnya dapat menghemat satu byte. Anda juga dapat menyimpan byte lain dengan mengganti(w=q+12)
denganw
,repeat(q=i.length*9)
denganrepeat(w=i.length*9)
danrepeat(q)
denganrepeat(w,w+=12)
.Arang ,
180171168163 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Cetak paranada.
Cetak kunci.
Ulangi setiap not.
Temukan koordinat Y dari not tersebut.
Ini benar-benar licik:
χ
adalah variabel yang sudah ditentukan ke 10, yang merupakan koordinat X dari not pertama, jika ada. Setelah melompat ke posisi itu, 9 ditambahkan ke dalamnya, mewakili posisi nada berikutnya.Cetak yang tidak disengaja, jika ada.
Cetak garis besar buku jika perlu dan catatan. Faktanya, garis dicetak pada koordinat y apa pun walaupun mencetaknya di atas paranada tidak memiliki efek.
Tidak ada lagi yang bisa dilakukan untuk semibreves.
Untuk catatan di bawah titik tengah,
gambar batang ke atas,
dan bendera untuk getaran.
Untuk catatan di atas titik tengah,
gambar batang ke bawah,
dan bendera untuk getaran.
sumber