Kiamat zombie telah datang, dan dunia akan segera berakhir. Tiba-tiba, seseorang menemukan formula yang mengambil jam, menit, dan hari saat ini, dan mengeluarkan nada yang sempurna untuk bermain piano yang langsung membunuh setiap zombie yang mendengarnya. Sayangnya, hanya ada satu pemain piano yang tersisa di dunia, dan dia lupa cara membaca catatan, tetapi dia masih tahu cara membaca lembaran musik. Tentu saja, ini adalah hal yang sangat sensitif terhadap waktu, jadi sepertinya wajar jika komputer melakukannya. 1
Tantangan Anda adalah membuat catatan, seperti G
, dan menampilkan catatan yang diletakkan pada staf (dalam treble clef), seperti ini:
-----
-----
|
---|-
|
--O--
-----
Spesifikasi:
- Anda harus menampilkan staf garis bergantian
-----
(5 garis) dan garis kosong. Akan ada-----
total 5 s. Catatan itu harus ditumpangkan di atas staf ini. - Input akan menentukan di mana catatan itu berada. Inputnya adalah:
- opsional
H
atauL
, menentukan "tinggi" atau "rendah" - surat dari
A
keG
, yang menentukan nada - opsional
#
ataub
, menentukan tajam atau rata.
- opsional
- "Catatan" didefinisikan sebagai:
- Satu
O
(modal O) sejajar dengan tengah staf, yang ada di tempat catatan. (Garis atas adalahHF
(F tinggi), dan garis bawah adalahE
(E normal).) - Three
|
s (batang vertikal), batangnya, yaitu:- satu spasi di sebelah kiri note dan turun ke bawah (mulai satu spasi di bawah note) jika note ada di garis tengah (
B
) atau di atas, atau - satu spasi di sebelah kanan note dan naik ke atas (mulai satu spasi di atas note) jika note berada di bawah garis tengah.
- satu spasi di sebelah kiri note dan turun ke bawah (mulai satu spasi di bawah note) jika note ada di garis tengah (
- A
#
ataub
satu spasi langsung ke kiri catatan jika ditentukan dalam input.
- Satu
- Garis besar harus ditambahkan jika nada terlalu tinggi atau rendah. Garis-garis ini akan menjadi
---
(hanya 3 strip lebarnya, berlawanan dengan 5) dan hanya akan muncul jika catatan berada di atas atau di atas / di bawah (untuk masing-masing garis besar buku besar) garis besar buku besar. - Ruang asing dapat ditempatkan di mana pun Anda inginkan; misalnya, Anda dapat membuat garis kosong memiliki spasi atau memiliki spasi setelah garis besar buku jika membantu Anda menyimpan karakter apa pun.
Berikut adalah visualisasi, untuk memahami spesifikasi lebih mudah, dengan semua nama catatan di sebelah baris:
HB
--- HA
HG
----- HF
HE
----- HD
HC
----- B
A
----- G
F
----- E
D
--- C
LB
--- LA
LG
--- LF
... (bottom cut off for brevity, you get the idea anyway)
Berikut ini beberapa contoh lain yang dapat Anda gunakan untuk menguji program Anda:
Memasukkan: HG#
#O
-|---
|
-|---
-----
-----
-----
Memasukkan: LAb
-----
-----
-----
-----
-----
|
--|
|
bO-
Memasukkan: HB
O
|--
|
-|---
-----
-----
-----
-----
Memasukkan: C
-----
-----
-----
-----
|
---|-
|
-O-
Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang!
1: eksposisi evar paling realistis! :-P
#
ataub
di sebelah kanan catatan daripada di sebelah kiri; apakah ini benar-benar yang dibutuhkan?Jawaban:
Golfscript,
211210209197195 195192 karakterDatang untuk menang (pada posting ini), versi GolfScript versi Python terbaru saya :
Uji di sini (2 baris pertama adalah input pengguna, biasanya berasal dari stdin).
Versi 'Dapat Dibaca':
sumber
Ruby -
271267252249234229220214 karakterSaya benar-benar baru belajar Ruby untuk ini. Jadi pasti ada ruang untuk perbaikan dalam bermain golf. Atau benar-benar melakukan sesuatu. Tapi aku butuh bahasa dengan string yang bisa berubah. :)
Agak tidak terserang:
Saya dapat memotongnya dengan 2 karakter lagi menjadi 212 karakter jika memimpin garis kosong diizinkan. Solusi ini tidak memenuhi garis yang tidak dicetak:
Apakah permainan adil lambda? Maka saya bisa mendapatkan 210 karakter dengan pendekatan pertama
Atau 207 karakter dengan garis kosong tambahan:
Tentu saja, sekarang Anda harus melakukannya
f.call("HGb")
.sumber
!x.nil?
setara dengan!x
. Dan untuk satu baris seandainya,if x;y;end;
setara dengany if x
. Anda juga dapat menggunakan baris baru literal dalam string itu.if
bekerja. Jika saya menggunakan?\n
(jika itu yang Anda maksud) saya perlu menambahkan spasi, jadi saya tidak mendapatkan apa-apa. Dan menghapus.nil?
s tidak berhasil sama sekali (selalu dievaluasitrue
)..nil?
, tapi itu sepadan dengan karakter.!x.nil?
yang!!x
. :)Python,
329309295286280277 karakterGolf sedikit lagi sekarang. Masih dapat ditingkatkan, tetapi tidak yakin apakah saya dapat mengalahkan solusi ruby atau golfscript dengan pendekatan ini.
Awalnya saya mencetak baris demi baris, tetapi ternyata terlalu banyak, jadi saya menghasilkan string grid dan kemudian mengisi apa yang perlu diisi. Masukan dari baris perintah, misalnya:
sumber
GolfScript -
243232228227 karakterSaya menerjemahkan jawaban CoffeeScript saya ke GolfScript, yang jauh lebih cocok untuk manipulasi string.
EDIT: Menyimpan enam karakter dengan menggunakan operator increment dengan benar, tiga dengan memanfaatkan stack, enam lainnya dengan mendefinisikan ulang operator yang tidak bertanggung jawab yang tidak saya gunakan, dan satu lagi dengan tidak mencetak spasi tambahan setelah garis rahmat.
Sepenuhnya golf:
Dengan komentar:
sumber
Go
. itu akan menampilkanoo|||
:)Python,
250245242235 karakterPendekatan yang sangat berbeda yang akhirnya mengalahkan yang lain! Kode pemrosesan input mirip tetapi hanya itu saja.
Saya memetakan nilai masing-masing karakter berdasarkan baris dan kolom dan kemudian mencetak pencetakan:
sumber
Java -
921907863 karakterSaya membangun setiap string secara terpisah, menyimpan setiap string dalam sebuah array. Kemudian loop melalui array dan cetak setiap baris.
Oh tolong jangan membenciku, ini pertama kalinya aku. Saya tidak dapat menemukan faq / pengantar jadi saya harap format posting saya ok. Tidak yakin seberapa serius orang mendapat tentang jumlah karakter .... versi normal kode - ekstra adalah linebreak / spasi (1313 karakter):
sumber
args
).[]
, spasi di sekitar tanda kurung, dll.Haskell 377C
Versi tidak disatukan:
sumber
Literate CoffeeScript -
497527 karakterSaya yakin ada cara yang lebih baik untuk membangun grid tetapi saya tidak bisa mengetahuinya.
Satu penolong golf.
AC skala utama dan staf.
Fungsi notasi kami akan mengambil representasi string dari catatan.
Pertama kita akan menentukan oktafnya.
Kemudian catatan dan kebetulan. Harus suka mendekonstruksi tugas.
Mari kita konversi catatan dan oktaf ke indeks dan plot catatan.
Sekarang kita akan memangkas staf sebanyak yang kita butuhkan.
Dan batang not.
Sekarang mari kita hasilkan hasilnya.
Akhirnya, kami akan mengekspor fungsi untuk pengujian konsol. Karakter-karakter ini tidak diperhitungkan total.
sumber
C,
325304Sekarang 21 byte lebih pendek berkat @ace !
Keluaran:
sumber
n
dan Anda dapat menghapusnyai=0
difor
loop pertama .if
pernyataan pertama ,((i%12)&11)==0
bisa diganti dengan!((i%12)&11)
.?:
memiliki prioritas lebih rendah dari^
dan<
, sehingga Anda dapat menghapus tanda kurung kondisi sebelum?
. Dan Anda bisa menggantinyaprintf("%s",
denganputs(
.JavaScript
390388Sedikit tantangan, saya harus mengakui ... Saya yakin ada cara untuk mengurangi ini lebih lanjut ... Saya terbuka untuk saran ...
Iterasi pertama
Iterasi kedua (menggunakan
n.slice(-1)
bukann[n.length-1]
), mencukur 2 byteVersi tidak disatukan:
sumber