Mari kita memainkan ocarina


42

Seperti kita ketahui, seri Zelda adalah salah satu seri game terbaik yang pernah dibuat. Untuk menghormati itu, mari kita memainkan beberapa lagu di ocarina.

Tantangan:

Tulis program yang, diberi lagu, menampilkan skor untuk stdout untuk lagu tertentu.

Memasukkan:

Lagu yang Anda harus hasilkan skor akan diberikan oleh kombinasi tiga karakter yang unik seperti yang terlihat di bawah ini:

zel - Zelda's Lullaby
sas - Saria's Song
eps - Epona's Song
sos - Sun's Song
sot - Song of Time
sst - Song of Storms

Lagu bonus, -7% masing-masing:

mof - Minuet of Forest
bof - Bolero of Fire
sow - Serenade of Water
nos - Nocturne of Shadow
ros - Requiem of Spirit
pol - Prelude of Light

Lagu bonus 2, -8%:

scs - Scarecrow's song 

Seperti yang kita semua tahu, lagu Scarecrow adalah lagu yang Anda buat sendiri. Lagu ini perlu memiliki delapan not. Keluarkan skor yang Anda buat sendiri yang berbeda dari semua skor lainnya.

Jika Anda memutuskan untuk memasukkan semua lagu, total bonus -50% akan menjadi nilai byte Anda.

Keluaran:

Catatan dalam output disimbolkan dengan karakter berikut:

^
<
>
V
A

Keluarkan skor pada format berikut:

-^-^-^-^-^-^-^-^-
-<-<-<-<-<-<-<-<-
->->->->->->->->-
-V-V-V-V-V-V-V-V-
-A-A-A-A-A-A-A-A-

Hanya satu catatan per kolom yang dibolehkan. Demi kesederhanaan, saya telah menambahkan baris lain ke empat baris asli.

Setiap nada berhubungan dengan baris yang berbeda:

^: ----------------
<: ----------------
>: ----------------
V: ----------------
A: ----------------

Hasil akan ditulis ke stdout. Trailing newlines diperbolehkan.

Contoh:

Masukan (Zulla Lullaby):

zel

Keluaran:

---^-----^-------
-<-----<---------
----->----->-----
-----------------
-----------------

Input (Bolero Api):

bof

Keluaran:

-----------------
-----------------
--------->--->---
-V---V-----V---V-
---A---A---------

Catatan lembar contekan:

zel
<^><^>
sas
V><V><
eps
^<>^<>
sos
>V^>V^
sot
>AV>AV
sst
AV^AV^
mof
A^<><>
bof
VAVA>V>V
sow
AV>><
nos
<>>A<>V
ros
AVA>VA
pol
^>^><^

Karena kita memainkan golf kode ocarina , program terpendek dalam byte menang!

Referensi lagu:

http://www.thonky.com/ocarina-of-time/ocarina-songs

http://www.zeldadungeon.net/Zelda05-ocarina-of-time-ocarina-songs.php


4
Mungkin Anda harus menggunakan bonus% daripada bonus byte. Praktis mustahil untuk menyandikan salah satu dari lagu-lagu ini dalam <7 byte, jadi saat ini tidak ada bonus yang sepadan. Anda juga harus menyebutkan bahwa lagu Scarecrow harus terdiri dari 8 not aktual; kalau tidak, seseorang bisa mencetak skor kosong. Tapi selain itu, tantangan yang bagus!
ETHproduk

9
Fakta bahwa saya dapat mendengar lagu-lagu ini di kepala saya membaca pertanyaan ini membuat saya bertanya-tanya apa yang saya lakukan dengan hidup saya. Maksudku, aku bekerja ketika saya bisa bermain OOT ...
MikeTheLiar

11
Saya harap ini tidak membatalkan jawaban yang ada, tetapi perhatikan bahwa dalam Zelda asli , lagu orang-orangan sawah harus terdiri dari dua nada yang berbeda , jadi misalnya AAAAAAAAA tidak akan menjadi lagu orang-orangan sawah yang valid.
Jan

4
Saya pikir huruf kecil vakan terlihat lebih baik.
mbomb007

3
Saya benar-benar menunggu untuk melihat apakah ada yang menyelesaikan masalah ini di vellato atau fugue dan memainkannya di ocarina
user902383

Jawaban:


8

Pyth, 56,5 (113 byte - 6 × 7% - 8%)

VtJ" ^<>VA"+K\-sm+?qNdNKK@LJj@jC"þØí§V^G¤×¹z1«bëë¶ñRõr¤çM"1391423xcs@LGjC"cc0Á:xqç÷\rS  Íó׺:9"lG3z6

Ini berisi karakter yang tidak patut xxddicetak , jadi di sini adalah hexdump yang dapat dibalik:

0000000: 5674 4a22 205e 3c3e 5641 222b 4b5c 2d73  VtJ" ^<>VA"+K\-s
0000010: 6d2b 3f71 4e64 4e4b 4b40 4c4a 6a40 6a43  m+?qNdNKK@LJj@jC
0000020: 2207 fe85 d880 ed0e a756 5e47 8ba4 d7b9  "........V^G....
0000030: 7a9e 0531 ab1b 62eb ebb6 f112 52f5 72a4  z..1..b.....R.r.
0000040: e74d 2231 3339 3134 3233 7863 7340 4c47  .M"1391423xcs@LG
0000050: 6a43 229a 6317 6330 c13a 9278 71e7 10f7  jC".c.c0.:.xq...
0000060: 5c72 5309 87cd f3d7 ba3a 3922 6c47 337a  \rS......:9"lG3z
0000070: 36                                       6

Anda juga dapat mencobanya online .

Penjelasan

Saya menyimpan lagu dalam basis-6 angka, disandikan ulang ke basis 1391423 dan kemudian basis 256 untuk menghemat ruang. Saya harus memilih base 6 karena beberapa lagu mulai dengan ^, dan angka tidak dapat benar-benar dimulai dengan 0 setelah decoding.

  J" ^<>VA"                                                      save characters in J
 t                                                               discard the space
V                                                                loop over all characters
                               C"..."                            parse base256 string (songs) to int
                              j      1391423                     convert to base 1391423 (separate songs)
                                                   C"..."        parse base256 string (codes) to int
                                                  j      lG      convert to base-26
                                               @LG               replace indices by corresponding letters
                                              s                  concatenate
                                             c             3     chop to 3-character codes
                                            x               z    find index of input code
                             @                                   get correct song
                            j                                6   convert to base 6
                         @LJ                                     replace indices by corresponding ^<>VA
                m                                                map d over the above
                  ?qNdNK                                         take the current character if at its row,
                                                                 otherwise a dash
                 +      K                                        add a dash
               s                                                 concatenate
           +K\-                                                  add a dash and print

44

Funciton , 4322 - 50% = 2161

Tidak benar-benar mencoba bermain golf di sini. Pergi lebih untuk sudut keindahan. Saya pikir program utama terlihat sangat rapi, kotak persegi panjang yang sempurna tersimpan di sebelah kanan.

Seperti biasa, Anda bisa mendapatkan rendering yang lebih baik dengan mengeksekusi $('pre').css('line-height',1)di konsol browser Anda.

                 ┌─────────────────────────┐
               ┌─┴─╖                     ┌─┴─╖
      ┌────────┤ · ╟─────────────────────┤ · ╟─────────────┐    ╔═════════╗   ╔════╗  ╔════╗
      │        ╘═╤═╝     ╔═════════╗     ╘═╤═╝ ╓───╖       │    ║ 1257283 ║ ┌─╢ 40 ║  ║ 25 ║
      │          │       ║ 2097151 ║       ├───╢ ʫ ╟───┐   │    ║ 6456094 ║ │ ╚════╝  ╚══╤═╝
    ┌─┴─╖        │       ╚════╤════╝     ┌─┴─╖ ╙─┬─╜ ┌─┴─╖ │    ║ 8219021 ║ │  ┌───╖   ┌─┴─╖
┌───┤ · ╟────────┴────┐       └─────┬────┤ · ╟───┴───┤ · ╟─┤    ║ 4660190 ║ └──┤ × ╟───┤ % ║
│   ╘═╤═╝             │            ┌┴┐   ╘═╤═╝       ╘═╤═╝ │    ╚════════╤╝    ╘═╤═╝   ╘═╤═╝
│     │               │            └┬┘     │           │   │    ╔═══╗  ┌─┴─╖  ┌──┴─╖   ╔═╧═╗
│     │  ╔═══╗ ┌────╖ │           ┌─┴─╖ ┌┐ │           │   │    ║ 8 ╟──┤ ʫ ╟──┤ >> ║   ║   ║
│     │  ║ 1 ╟─┤ >> ╟─┘       ┌───┤ ? ╟─┤├─┤           │   │    ╚═══╝  ╘═╤═╝  ╘══╤═╝   ╚═══╝
│     │  ╚═══╝ ╘══╤═╝         │   ╘═╤═╝ └┘ │           │   │    ╔════════════════╧═════════╗
│     │         ┌─┴─╖ ┌───╖ ┌─┴─╖ ┌─┴─╖  ╔═╧═╗         │   │    ║ 609678112368778425678534 ║
│   ┌─┴─────────┤ ʫ ╟─┤ ‼ ╟─┤ · ╟─┤ ‼ ║  ║ 1 ║         │   │    ║ 616189712722605554111376 ║
│   │           ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝  ╚═══╝         │   │    ║ 461573643915077926310571 ║
│   │             │     │     │   ╔═╧══╗               │   │    ║ 355541007599150245813976 ║
│   │   ╔══════╗  │     │     └───╢ 45 ║               │   │    ║ 426564826002362964111793 ║
│   │   ║ 2097 ║  │   ┌─┴─╖ ┌───╖ ╚════╝               │   │    ║ 714054902293682079346275 ║
│   │   ║ 1565 ║  └───┤ · ╟─┤ ♭ ╟─┐                    │   │    ║ 663973372550500581508544 ║
│   │   ╚═╤════╝      ╘═╤═╝ ╘═══╝ ├────────────────────┘   │    ║ 874263187322344354338195 ║
│   │   ┌─┴─╖         ┌─┴─╖       │                        │    ║ 642609790172899326178321 ║
│   │   │ ‼ ╟─────────┤ ? ╟───────┘                        │    ║ 071643306454414932126243 ║
│   │   ╘═╤═╝         ╘═╤═╝                                │    ║ 308860823981077902637848 ║
│ ┌─┴─╖ ┌─┴─╖ ╔═══╗   ┌─┴─╖                                │    ║ 322657399386789617074176 ║
└─┤ · ╟─┤ ʫ ╟─╢ 8 ║ ┌─┤ ? ╟────────────────────────────────┘    ╚══════════════════════════╝
  ╘═╤═╝ ╘═╤═╝ ╚═══╝ │ ╘═╤═╝
    │ ┌───┴╖ ╔════╗ │ ╔═══╗
    └─┤ >> ╟─╢ 21 ║ └─╢ 0 ║
      ╘════╝ ╚════╝   ╚═══╝

Melanjutkan tradisi memberikan nama fungsi Funciton yang terdiri dari karakter Unicode tunggal, aneh, jarang digunakan, saya berpikir tentang apa yang paling bisa mewakili tantangan ini, dan terpikir oleh saya bahwa Link dan Zelda (atau, jika Anda mau, Legend of Zelda ) memberi Anda LZ , sehingga digraf huruf kecil ʫ (U + 02AB, ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ ʟᴢ ᴅɪɢʀᴀᴘʜ) tampaknya tepat.

Penjelasan

Seperti dijelaskan dalam artikel esolangs, program Funciton menerima input yang dikodekan sebagai apa yang saya sebut "UTF-21", tetapi sebagai bilangan bulat tunggal. Jika saya ingin menggunakan nomor ini sebagai kunci untuk hashmap (kamus, array asosiatif), saya memerlukan fungsi hash yang memenuhi dua kriteria: satu, itu cukup sederhana untuk diterapkan di Funciton, dan dua, semua dari 13 yang diharapkan string input memberikan nilai hash yang berbeda. Fungsi hash paling sederhana yang bisa saya pikirkan adalah input % muntuk beberapa nilai m. Oleh karena itu, saya mencoba m= 13, 14, 15, dll. Sampai saya mendapatkan integer terkecil yang semua nilai hashnya unik. Ternyata angka ini adalah 25.

Nilai hash adalah:

zel =  6
sas = 19
eps = 10
sos = 22
sot =  1
sst =  9
mof = 14
bof =  3
sow = 13
nos = 17
ros = 21
pol = 16
scs = 23

Kami menyandikan setiap lagu dengan memiliki satu bit mewakili ada atau tidak adanya catatan. Misalnya, Lullaby Zelda akan dikodekan sebagai berikut:

---^-----^------- = 01001000
-<-----<--------- = 10010000
----->----->----- = 00100100
----------------- = 00000000
----------------- = 00000000

kecuali bahwa bit berada dalam urutan yang berlawanan; sel kiri atas berada dalam bit paling tidak signifikan. Ini berarti setiap lagu memiliki panjang 40 bit.

Kami dengan demikian membuat tabel hash (agak jarang) dengan mengambil 40 × 25 = angka 1000-bit dan menempatkan pola bit untuk setiap lagu di tempat yang tepat sesuai dengan nilai hash-nya. Angka mengerikan dalam program ini persis tabel hash ini.

Inilah yang dimaksud masing-masing angka yang tersisa:

  • 45= 0x2Dadalah Unicode untuk -.
  • 1257283645609482190214660190: Ini adalah string ^<>VAdi UTF-21. Kalau dipikir-pikir saya bisa menggunakan 7 bit per karakter di sini, membuat jumlahnya lebih pendek, tetapi UTF-21 sangat tradisional di Funciton sehingga tidak terpikir oleh saya.
  • 2097151= 0x1FFFFF= (1 << 21) - 1. Digunakan untuk mendapatkan karakter pertama dari string di atas.
  • 20971565: Ini adalah string -\n, yang ditambahkan ke akhir setiap baris.
    • Mungkin terlihat aneh bahwa angka ini dan yang sebelumnya terlihat sangat mirip, tetapi jika Anda memikirkannya, itu karena kami menggunakan desimal dan Unicode \nkebetulan 10. Angka terakhir itu adalah (10 << 21) + 45.

Program sekarang melanjutkan sebagai berikut:

  • Panggilan program utama ʫdengan 3 parameter berikut:
    • B : Tabel hash, bergeser ke kanan dengan 40 bit kali nilai hash input. Lagu yang ingin kami output sekarang dalam 40 bit paling tidak signifikan.
    • c : Tali ^<>VA.
    • a : Angka 8.
  • Dalam setiap iterasi ʫ,
    • jika c tidak kosong,
      • jika seorang tidak nol, lihat sedikit bawah B . Keluaran -, diikuti oleh yang lain -jika nol atau karakter pertama dari c sebaliknya. Geser ke kanan B per satu untuk menghapus satu bit dan mengurangi a .
      • jika a adalah nol, keluaran -\n, kemudian matikan karakter pertama dari c dan mulai loop lain dengan a = 8.
    • jika c kosong, kita selesai.

Bagus sekali, itu mengesankan!
sweerpotato

6
<grumble> Itu flat musikal dang ... membuang monospacing ... </grumble>
Taylor Lopez

1
@ iMmortos: Setuju. Untuk alasan ini, saya menghindari karakter ♭ untuk waktu yang lama dan meyakinkan diri saya bahwa saya hanya bisa bitwise-bukan, lalu ♯, lalu bitwise-not. Tapi sekarang saya menggunakan Deja Vu Sans Mono untuk mengedit Funciton dan memiliki ♭. Jadi sekarang yang kita butuhkan adalah StackExchange untuk beralih ke font untuk kode juga ;-)
Timwi

4
Juga, Anda tentu harus mengakui bahwa tidak ada karakter Unicode pas yang lebih baik untuk pengurangan dan penambahan daripada ♭ dan ♯. Mereka sempurna .
Timwi

Haha, benar-benar. Saya tidak tahu apa-apa tentang Fungsi, tapi itu masuk akal!
Taylor Lopez

11

Python 2, 143,5 (287 byte - 50%)

i='^<>VA'
u=dict(zel="<^>"*2,sas="V><"*2,eps="^<>"*2,sos=">V^"*2,sot=">AV"*2,sst="AV^"*2,mof="A^<><>",bof="VAVA>V>V",sow="AV>><",nos="<>>A<>V",ros="AVA>VA",pol="^>^><^",scs="<"*8)[raw_input()]
r=[17*['-']for _ in[1]*5]
x=0
for g in u:r[i.find(g)][x*2+1]=g;x+=1
for h in r:print''.join(h)

Grid dihasilkan dengan tanda hubung; kemudian diindeks dan diganti dengan catatan.


Belum melihat terlalu banyak tetapi Anda dapat menyimpan byte dalam deklarasi jdengan mengganti setiap koma dengan spasi dan memanggil splittanpa argumen
undergroundmonorail

Saya tidak berpikir Anda perlu melakukan itu, itu masih algoritme Anda, jadi saya pikir Anda pantas menjadi perwakilan, tetapi saya berhasil menyingkirkannya range. Sayangnya Anda tidak bisa hanya mengalikan daftar dalam dengan 5 karena mereka semua adalah objek yang sama dan mengubah satu perubahan yang lain: / Kami mengalahkan perl (untuk saat ini)!
FryAmTheEggman

Tidak bisakah Anda menghilangkan 6 byte (1 untuk masing-masing dari enam lagu pertama) dengan melakukan hal-hal seperti "<^><^>"=> "<^>"*2?
El'endia Starman

scs="<"*8 Saya tidak suka lagu Scarecrow Anda.
Casey Kuball

Ketika saya mencoba menjalankan ini, ia berhenti pada jalur 2 dan tidak pernah selesai.
Cory Klein

7

Perl 5, 125 ( 320 260 250 Bytes -6x7% lagu bonus -8% lagu orang-orangan sawah)

Yay, akhirnya kesempatan untuk bereksperimen dengan sintaks hash Perlish itu.

$_=pop;@B={qw(zel <^><^> sas V><V>< eps ^<>^<> sos >V^>V^ sot >AV>AV sst AV^AV^ mof A^<><> bof VAVA>V>V sow AV>>< nos <>>A<>V ros AVA>VA pol ^>^><^ scs <^V>>V^<)}->{$_}=~/./g;map{@L=('-')x17;for$i(0..@B){$L[1+2*$i]=$_,if$B[$i]eq$_}say@L}qw(^ < > V A)

Uji

$ perl -M5.010 ocarina.pl scs
---^---------^---
-<-------------<-
------->->-------
-----V-----V-----
-----------------

1
Gunakan qw()sintaks alih-alih koma lemak ( %h=qw(zel <^><^> sas >'V><' ...)untuk menyimpan beberapa byte
mob

1
@ mob Saran itu mencukur lebih dari sekadar "beberapa" byte. :) terima kasih!
LukStorms

1
@Ldapat ditulis lebih ringkas sebagai @L=('-')x17. Juga, hash utama dapat dibiarkan anonim sebagai @B={qw(zel <^><^> ... scs <^V>>V^<)}->{$_}=~/./g.
Primo

1
Saya mengerti, itu adalah trik yang bagus untuk menghindari fungsi split yang sedikit bertulang. Sepuluh byte lagi dikorbankan untuk kekosongan. tumbs up
LukStorms

5

Perl, 75 (150 byte - 50%)

#!perl -nl
$i=vec~$_,0,32;print+qw(- - ^ < > V A)[0,map{vec('w2$$W4F4w7DeweTFwR$Ew$C2wVdeVe3cw4B#EEVVwC5Tw44bwR&e',$i/480%15*8-$_,4)==$.&&$.,0}1..8]while$.++<6

Menghitung shebang sebagai 2, input diambil dari stdin.

Penggunaan sampel

$ echo zel | perl zelda.pl
---^-----^-------
-<-----<---------
----->----->-----
-----------------
-----------------

$ echo bof | perl zelda.pl
-----------------
-----------------
--------->--->---
-V---V-----V---V-
---A---A---------

$ echo scs | perl zelda.pl
-----------------
---<-<-<---------
-----------------
-----------V-V---
-A-------A-----A-

1
Menggunakan fungsi vh bithifting untuk ini? Luar biasa.
LukStorms

@LukStorms Saya berharap bisa melakukan 3 bit, bukan hanya kekuatan 2;)
primo

4

Haskell, 344 - 50% = 172 byte

import Data.List
s"zel"=82
s"sas"=69
s"eps"=86
s"sos"=48
s"sot"=128
s"sst"=50
z"mof"=11055
z"bof"=373854
z"sow"=1720
z"nos"=73217
z"ros"= -12730
z"pol"=4791
z"scs"=304236
z n=s n*126
p n|n*n== -n="   "|0<1="A^<>V"!!(n`mod`5):p(n`div`5)
o=putStr.unlines.transpose.(l:).concatMap(\c->[map(e c)"^<>VA",l]).take 8.p.z
e c d|c==d=c|0<1='-'
l="-----"

o melakukan pekerjaan.

Kupikir aku bisa mengalahkan Python dengan menggunakan penyandian ini (butuh waktu lama ._.), Tapi tidak. Mereka belum benar-benar menyimpan banyak byte. Ada saran?

Ya, itu minus di depan pengkodean untuk "ros". Itu karena 'sheet' nya berakhir dengan karakter yang berarti 0di base-5 saya, karena trik negatif ini tidak akan bekerja untuk 'lagu-lagu mudah' yang dikodekan dengan menggandakan apa yang dikodekan s. Kecuali jika Anda menggunakan quotmungkin, tetapi kemudian Anda tidak dapat menangani p (-1)secara khusus, karena itu quot (-5) = 0, negativitas akan hilang. Terserah.


4

PHP: 130 byte (260 270 279 byte - 6 × 7% - 8%)

Terima kasih kepada Ismael Miguel dan Blackhole untuk beberapa ide hebat untuk menghemat lebih banyak byte!

<?php $f=str_split;for($z='*^<>VA';++$i<6;print"-
")foreach($f(base_convert(substr(current(preg_grep("/^$argv[1]/",$f(bofttmmeps8jf0mofvff0nosfnfopol99d0rosyxt0sasrgk0scs8m8msosm9p0sotnry0sowylc0sstybp0zeldk90,7))),-4),36,6),1)as$c)echo$i-$c?'--':'-'.$z[$c-0];

Setelah itu print"-, ini adalah penyisipan literal dari carriage return. Mungkin menerjemahkan ke dua byte di Windows.

Semua lagu bonus termasuk lagu Scarecrow disertakan.

Setiap lagu direpresentasikan dalam tujuh byte kode. Saya suka skor baru karena dengan skor lama saya akan mendapatkan hanya satu poin bonus sedikit saja secara keseluruhan!

Pengeditan baru-baru ini membuat PHP menghasilkan banyak peringatan, jadi untuk menjaga hal-hal tetap bagus dan rapi, semuanya dialihkan /dev/null.

Simpan sebagai zelda.phpdan jalankan di baris perintah:

$ php zelda.php zel 2> /dev/null
---^-----^-------                                                                                                                                   
-<-----<---------                                                                                                                                   
----->----->-----                                                                                                                                   
-----------------                                                                                                                                   
-----------------

$ php zelda.php bof 2> /dev/null                                                                                                                            
-----------------                                                                                                                                   
-----------------                                                                                                                                   
--------->--->---                                                                                                                                   
-V---V-----V---V-                                                                                                                                   
---A---A--------- 

$ php zelda.php scs 2> /dev/null                                                                                                                          
-^-------^-------                                                                                                                                   
---<-------<-----                                                                                                                                   
----->------->---                                                                                                                                   
-------V-------V-                                                                                                                                   
-----------------

Apakah maksud Anda "simpan sebagai main.php"?
Zach Gates

@ZachGates - Terima kasih telah mengetahui hal itu, perubahan telah dilakukan.

Anda tidak perlu ()sekitar ($i-$c)pada echo($i-$c)?'--':'-'.$z[$c-0];. Juga, string Anda di dalam Anda splitdapat digunakan tanpa '. Dan '/^'.$argv[1].'/'dapat ditulis sebagai"/^$argv[1]/"
Ismael Miguel

1
Terima kasih! Saya pikir diperbolehkan di CGSE untuk mem-pipe peringatan ke / dev / null untuk membersihkan output?

@ Blackhole - terima kasih! Itu terkait dengan pengiriman Perl 5, melakukan cukup baik ...

4

Python 3 - 138.5 ( 292 280 277 byte - 50%)

Memotong beberapa byte dari pemimpin Python saat ini sambil melakukan metode print-as-you-go daripada metode ganti.

Coba Online

s=dict(zel="<^><^>",sas="V><V><",eps="^<>^<>",sos=">V^>V^",sot=">AV>AV",sst="AV^AV^",mof="A^<><>",bof="VAVA>V>V",sow="AV>><",nos="<>>A<>V",ros="AVA>VA",pol="^>^><^",scs="AV><^AV>")[input()]
s+=" "*8
for c in "^<>VA":
 o="-"
 for x in range(8):o+=["--",c+"-"][s[x]==c]
 print(o)

Menjalankan:

> python3 loz.py
bof [return]

Keluaran:

-----------------
-----------------
--------->--->---
-V---V-----V---V-
---A---A---------

Anda dapat menyimpan beberapa byte dengan menggunakan ['--',c+'-'][s[x]==c]alih-alih persyaratan
Ruth Franklin

Ooh, panggilan yang bagus, terima kasih!
Taylor Lopez

3

Ruby, rev 1, 192 - 50% = 96

Golf meliputi:

penghapusan spasi putih antara kelompok huruf dalam string ajaib (dan revisi penyebut pada akhir baris untuk /4 .) Penghapusan beberapa spasi putih yang tidak perlu lainnya.

konversi urutan pelarian menjadi karakter tunggal (pertukaran stack tidak akan menampilkannya, jadi saya telah menaruh ? sebagai penampung)

redefinisi gsebagai string tunggal yang berisi lima run dari 17 -diikuti oleh baris baru, bukan array dari lima string dari 17-

s=gets.chop
s[?s<=>s[0]]=''
n=("owEkrswuns=;gcsbfbYuze33as&&es77os??otaast??mf?9pl
?"=~/#{s}/)/4
g=(?-*17+'
')*5
(n<4? n+5:6).times{|i|x=$'[i/3].ord/5**(i%3)%5;g[x*18+i*2+1]='^<>VA'[x]}
puts g

Ruby, rev 0, 223 - 50% = 111,5 (ungolfed)

Kode input dikurangi menjadi 2 huruf. Jika dimulai dengan huruf s, sdihapus, jika dimulai dengan huruf setelah s(hanya berlaku untuk zelhuruf terakhir dihapus, dan jika dimulai dengan huruf sebelums huruf tengah dihapus.

String sihir (yang dalam versi tidak mengandung serang berisi spasi untuk kejelasan) berisi kode 2 huruf diikuti oleh data musik. Itu dicari menggunakan operator pertandingan =~yang mengembalikan posisi dalam string.

Ada persis satu lagu masing-masing 5, 7, dan 8 catatan (ditambah scs yang juga memiliki 8 catatan.) Ini, bersama dengan satu lagu 6-catatan sewenang-wenang rosyang dibundel pada awal string ajaib sehingga nilai yang ndiberikan oleh posisi dalam string dapat digunakan untuk menghitung jumlah not untuk dimainkan. csdiperas sebelumnya bf, dan dengan pemotongan ketika angka ndibulatkan kita hanya pergi dengan perhitungan yang benar untuk keduanya. Setelah cluster keempat, semua lagu memiliki 6 catatan jadi jika nbesar jumlah catatan dikurangi menjadi default 6.

Array -diatur untuk output dan catatan diganti satu per satu. Data musik yang diperlukan diekstraksi dari variabel $'yang berisi bagian dari string sihir asli ke kanan pertandingan. Dengan cara ini, data yang tidak relevan diabaikan.

Catatan dikodekan 3 pada satu waktu ke dalam senar ajaib, tepat setelah kode lagu 2 huruf yang relevan. Mereka diekstraksi dengan pembagian oleh 5**(i%3)dan karakter dalam gdiperbarui sesuai. Pada akhir program gdicetak.

s=gets.chop
s[?s<=>s[0]]=''
n=("owEk rswu ns=;g csbfbYu ze33 as&& es77 os\21\21 otaa st\23\23 mf\35\71 pl\n\a"=~/#{s}/)/5

g=(0..4).map{'-'*17}
(n<4? n+5 : 6).times{|i|x=$'[i/3].ord/5**(i%3)%5;g[x][i*2+1]='^<>VA'[x]}
puts g

2

Python 2, 141,5 Bytes -50% (283 Bytes)

s='D  2)AE0*  A2)D  AD )2 A  )D2A 0,"!A D2) A  (2EA"4H !A )2D A 1F`(A)2D  A  p\xc5*'.split("A")['sst pol zel sos sot sow sas ros mof scs nos eps bof'.split().index(raw_input())]
for c,n in zip(s,"^<>VA"):print"-".join([("-"+n)[i>"0"]for i in bin((ord(c)-32)%255)[2:].zfill(8)][::-1])

Menyimpan setiap not sebagai byte karena setiap baris memiliki 8 note. Ingat representasi biner dan kemudian gantikan dengan karakter yang tepat.


1

Lua, 249 byte - 50% = 124,5

w=io.write for j=1,5 do n={sst=41881,pol=44915,zel=30814,sos=42315,sot=17577,sow=5953,sas=35588,ros=11065,mof=29335,nos=122170,eps=29729,bof=719576,scs=999999}[...]for i=1,8 do d=n%6 n=(n-d)/6 c=d==6-j and'AV><^':sub(d,d)or'-'w('-',c)end w('-\n')end

Cukup sederhana, hanya membaca kembali lagu-lagu yang dikodekan sebagai angka dasar-6.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.