Tugas Anda adalah untuk mengambil urutan karakter (musik) sebagai input (dalam suatu fungsi atau program), dan mencetak (atau mengembalikan) musik seperti yang terlihat di kotak musik.
Anda hanya akan menerima karakter ABCDEFG.()
sebagai input, dan input tidak akan pernah kosong. Anda juga dapat menerima surat dalam huruf kecil, jika Anda menginginkannya.
Ini adalah kotak musik kosong, dengan panjang 3:
.......
.......
.......
Seperti yang Anda lihat, panjangnya 7 karakter, dan karena panjang kotak musiknya 3, kami punya 3 baris. Hanya ada .
di sini, karena kotak musik kosong. Mari kita masukkan musik ke dalamnya!
Pertama, kami membuat kotak musik. Dalam contoh ini, inputnya adalah CDAG.DAG
.
Panjangnya CDAG.DAG
8, jadi kita perlu kotak musik dengan panjang 8:
.......
.......
.......
.......
.......
.......
.......
.......
Kemudian, kita membaca input, satu karakter pada satu waktu, dan menempatkan sebuah O
di posisi masing-masing.
Karakter pertama adalah C
, dan lokasi setiap catatan setara dengan ini (saya menambahkan spasi untuk kejelasan):
A B C D E F G
. . . . . . .
. . . . . . .
(and so on)
Jika karakter input adalah a .
, maka kita cukup mencetak baris kosong.......
Jadi, itu C
akan menjadi karakter ke-3. Mari kita taruh di kotak musik kita di atas:
..O....
.......
.......
.......
.......
.......
.......
.......
Kami akan mengulangi proses ini untuk semua karakter lain (teks dalam tanda kurung hanya untuk menunjukkan catatan kepada Anda, Anda tidak harus menampilkannya):
..O.... (C)
...O... (D)
O...... (A)
......O (G)
....... (.)
...O... (D)
O...... (A)
......O (G)
Karena cara kerja kotak musik, jika kita menggunakan karakter selain O
, .
dan <insert newline here>
, seperti spasi, di output kita, maka itu tidak akan memainkan musik yang benar!
Ini adalah kunci:
(ACE)
Akord ini memerintahkan kita untuk memainkan not A
, C
dan E
pada saat yang sama. Tidak akan ada jeda (yaitu a .
) dalam sebuah akor.
Beginilah caranya ditulis:
O.O.O...
Dan beginilah tampilannya di musik: B(ACE)D
Anda tidak akan pernah menerima akor dalam akor, artinya ini tidak valid: (AB(CD)EF)
atau ini A(B())
:, dan akor tidak akan kosong, artinya ini tidak valid:A()B
Anda tidak akan pernah menerima input yang tidak valid.
Contoh:
B(ACE)D
.O.....
O.O.O..
...O...
B
.O.....
GGABC
......O
......O
O......
.O.....
..O....
...
.......
.......
.......
A..F.C(DA).
O......
.......
.......
.....O.
.......
..O....
O..O...
.......
.(ABCDEF)
.......
OOOOOO.
Trailing / spasi putih terkemuka pada output diizinkan.
Karena ini adalah kode-golf , kode terpendek menang!
()
dua kali (mis .AB(CD)E(FG)
:) ??Jawaban:
Pip , 29 byte
28 byte kode, +1 untuk
-l
bendera.Mengambil input dalam huruf kecil sebagai argumen baris perintah. Cobalah online!
Penjelasan
Berikut ini contoh bagaimana suatu input diubah:
sumber
Python 2 ,
9594 byte-1 byte berkat Value Ink
Cobalah online! atau Coba semua test case
Penjelasan
'@'<i
adalah untuk memeriksa apakahi
huruf, menggantikan.
denganO
pada posisi yang tepat.'*'>i
adalah untuk memeriksa apakahi
adalah kurung, jikax=i>'('
akan menempatkan0
padax
untuk mencegah pencetakan / kliringo
, saati==')'
, itu akan menempatkan1
padax
ulang memungkinkan pencetakan / kliringo
.Ketika
i=='.'
tidak ada yang akan diubah, dan'.......'
akan dicetak.Perintah charater diberikan oleh kode ASCII mereka, di mana
'('<')'<'*'<'.'<'@'<'A'
sumber
['.']*7
. Mungkin itu adalah peninggalan dari saat Anda menggunakan tuple, yang akan membutuhkan koma. Juga, saya mungkin salah, tetapi ini sepertinya menghasilkan array['O', '.', '.', '.', '.', '.', '.']
per baris, dan saya tidak yakin apakah itu diizinkan?Batch, 209 byte
Bekerja dengan mengumpulkan huruf dan mengeluarkan garis jika simbol terakhir yang terlihat bukan a
(
.sumber
Röda ,
977876 byteCobalah online!
Ini adalah fungsi anonim yang membaca input dari aliran. Menggunakannya seperti ini:
main { f={...}; push("ABCD") | f() }
. Ia menggunakan regex dari jawaban ETHproductions.Tidak Disatukan:
Jawaban sebelumnya:
Cobalah online!
Ia bekerja dengan memisahkan string yang diberikan di tempat-tempat di mana string berikut hanya berisi tanda kurung yang cocok. Kemudian, untuk masing-masing akor, itu berganti melalui catatan yang mungkin dan mencetak
O
jika catatan itu adalah anggota dari akor dan.
sebaliknya.sumber
JavaScript (ES6),
868576 byteDisimpan 9 byte berkat @Neil
Penjelasan
Pertama, kami mencocokkan apa yang akan membentuk setiap baris output: akor, dan karakter yang bukan bagian dari akor. Lalu, untuk setiap baris, kami mengambil string
ABCDEFG\n
dan mengganti setiap karakter non-baris baru di dalamnya denganO
jika baris berisi itu, dan.
sebaliknya.sumber
s=>s.replace(r=/\(\w+\)|./g,x=>`ABCDEFG\n`.replace(r,c=>x.match(c)?"O":"."))
.\)
menjadi.
?JavaScript (ES6),
118116114 byteUji kasus
Tampilkan cuplikan kode
sumber
Ruby,
787571 byteMengembalikan array string.
Penjelasan + tidak dikelompokkan
sumber
x.gsub(...){l=?.*7;$&.bytes{...};l+$/}
(tukarscan
dengangsub
, hapusmap
, dan lewati yang pertama|x|
karena Anda dapat menggunakan$&
untuk mengakses pertandingan regex terakhir) untuk menyimpan 3 byte dan mengembalikan string multi-line sebagai gantinya. (Juga$/
memetakan ke baris baru secara default.)PHP, 171 byte
Kerusakan :
Coba di sini!
sumber
Retina , 120 byte
Saya yakin ada ruang untuk bermain golf, tetapi ini berfungsi sekarang, jadi saya akan mencoba untuk bermain golf nanti.
Cobalah online!
Bagaimana itu bekerja
Pada dasarnya, program ini bekerja dengan mengubah setiap karakter menjadi angka, kemudian menetapkan a
O
ke posisi itu dalam satu baris. Itu petaABCDEFG.
ke01234569
.Untuk menghasilkan baris nada tunggal, semua yang harus dilakukan adalah meletakkan
O
setelah jumlah yang sesuai.
s, kemudian pad garis sepanjang 7 karakter.Namun, akor agak sulit dilakukan. Proses serupa digunakan, tetapi angka-angka harus diterjemahkan ke dalam kenaikan, yaitu nada pertama dalam akor adalah (apa pun), yang kedua adalah posisi X setelah yang pertama, yang ketiga adalah posisi Y setelah itu, dll.
Kode
Mulailah dengan menyortir semua karakter dalam akor.
Lakukan transliterasi (pemetaan) dari huruf ke angka.
Ganti semua digit di dalam tanda kurung dengan representasi unary (menggunakan
x
s), diikuti oleh spasi.Ganti semua tanda kurung penutup dengan
m
diikuti oleh baris baru. Them
akan digunakan sebagai penanda macam untuk loop datang:Ini adalah tahap penggantian yang berulang sampai tidak dapat diganti lagi. Dibutuhkan dua urutan terakhir
x
sebelumm
, dan kurangi yang pertama dari yang kedua, pindahkan kem
belakang. Penandam
diperlukan karena harus melakukan operasi ini dari kanan ke kiri.Hapus yang pertama
x
di setiap urutan kecuali yang pertama.T
ransliterate dengan menggantix
dengan.
, spasi denganO
, dan menghapusm
dan(
.Pada titik ini, semua garis untuk akor telah dibuat. Sekarang baris not tunggal harus dibuat.
Ganti setiap digit dengan angka
.
s, diikuti olehO
dan dan baris baru.Pad setiap baris dengan panjang 7 dengan menambahkan
.
s ke kanan. Ini bekerja dengan menambahkan 6.
s pada akhir setiap baris (setiap baris akan memiliki setidaknya 1 karakter lain), kemudian mengganti setiap karakter setelah 7 pertama pada setiap baris tanpa apa-apa. (Sejak.
peta ke 9,O
akan dipotong pada garis itu)sumber
Perl,
877145 + 2 (-nl
bendera) = 47 byteMenggunakan:
Cobalah di Ideone.
sumber
Perl 5 - 78 + 1 (bendera) + 2 (Kutipan Input) = 81 Bytes
Dapat dijalankan seperti ini:
sumber
Ruby, 68 byte
Idenya adalah untuk memodifikasi string
.......
setiap kali kita menemukan huruf, lalu mengeluarkan dan meresetnya, tetapi hanya ketika kita berada di luar tanda kurung.(
mematikan keluaran.)
dan.
keduanya mengaktifkan / membiarkan keluaran aktif, tetapi yang terakhir tidak penting karena tidak akan pernah ditemukan di dalam braket.Tidak digabungkan dalam program uji
sumber
Python 3, 94 byte
Fungsi anonim
sumber
Haskell , 101 byte
Cobalah online! Pemakaian:
p "AB.(CA)D"
. Mengembalikan daftar string.Penjelasan:
Fungsi
p
berulang pada string. Jika menemukan braket pembuka,'('
maka(x,_:t)<-span(')'<)r
partisi string sisanyar
ke dalam stringx
sebelum terjadinya braket penutup')'
dant
setelahnya. Kalau tidak, karakter saatx
ini diubah menjadi string[x]
. Dalam kedua kasus fungsi?
tersebut disebut dengan string catatan saat ini dan string sisanya.?
memetakan fungsi di#
atas string"ABCDEFG"
, tempat#
mengganti semua karakter yang tidak ada dalam string catatan saat ini'.'
. Baris kotak musik yang dihasilkan diawali dengan panggilan rekursifp
pada daftar lainnyar
.sumber
Retina 0.8.2 , 52 byte
Cobalah online! Mengambil input dalam huruf kecil. Penjelasan:
Membagi musik menjadi akor atau not, dan mulai membangun output dengan menambahkan daftar setara nada.
Untuk setiap not pada setiap akor, ubah output menjadi
O
dan hapus catatan dari akor.Hapus semua musik yang sekarang asing, dan ubah semua catatan yang tidak cocok menjadi kosong.
sumber
PHP, 93 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .kerusakan
sumber