Ocarina oynayalım


42

Hepimizin bildiği gibi, Zelda serisi şimdiye kadar yapılmış en iyi oyun serilerinden biridir. Bunun onuruna, ocarina'da bazı şarkılar çalalım.

Meydan okuma:

Bir şarkı verildiğinde, o şarkı için stdout'u çıkaran bir program yazın.

Giriş:

Puanını çıkarmanız gereken şarkı, aşağıda görüldüğü gibi benzersiz üç karakterli bir kombinasyonla verilecektir:

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

Bonus şarkıları, her biri% -7:

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

Bonus şarkısı 2,% -8:

scs - Scarecrow's song 

Hepimizin bildiği gibi, Korkuluk'un şarkısı, kendiniz bestelediğiniz bir şarkıdır. Bu şarkının sekiz nota olması gerekiyor. Diğer tüm puanlardan farklı olan, kendiniz oluşturduğunuz bir puan verin.

Tüm şarkıları eklemeye karar verirseniz, bu sizin bayt puanınıza% -50 bonus kazandırır.

Çıktı:

Çıktıdaki notlar aşağıdaki karakterlerle sembolize edilir:

^
<
>
V
A

Aşağıdaki formatta bir puan verin:

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

Sütun başına sadece bir nota izin verilir. Sadelik uğruna, orijinal dört satıra başka bir satır daha ekledim.

Her not farklı bir satıra karşılık gelir:

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

Çıktı stdout'a yazılacaktır. İzleyen yeni satırlara izin verilir.

Örnekler:

Giriş (Zelda'nın Ninni):

zel

Çıktı:

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

Giriş (Ateş Bolerosu):

bof

Çıktı:

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

Hile sayfasını not edin:

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
^>^><^

Ocarina code golf oynadığımızdan , bayt cinsinden en kısa program kazanır!

Şarkı referansları:

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

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


4
Belki bir bayt bonusu yerine% bonus kullanmalısınız. Bu şarkıların herhangi birini <7 baytta kodlamak neredeyse imkansız, bu yüzden bonusların hiçbiri buna değmezdi. Ayrıca Korkuluk şarkısının 8 gerçek notadan oluşması gerektiğini de belirtmelisiniz; Aksi halde birisi sadece boş bir puan yazdırabilir. Ama bunun dışında, güzel bir meydan okuma!
ETHProductions

9
Bu şarkıları kafamda bu soruyu okurken duyabiliyorum gerçeği, hayatım boyunca ne yaptığımı merak ediyor. Yani, OoT oynayabilirken işteyim ...
MikeTheLiar 23:15

11
Bu varolan herhangi cevapları geçersiz kılmaz umut, ancak orijinal Zelda'da o notu Korkuluğun şarkı gerekir iki farklı notlar meydana örn AAAAAAAA diye, değil geçerli bir Korkuluğun şarkı olacak.
Jan

4
Küçük harf vdaha iyi olacağını düşünüyorum .
mbomb007

3
Gerçekten görmek isteyen biri vellato veya füg içinde bu sorunu çözmek ve ocarina oynamak
user902383

Yanıtlar:


8

Pyth, 56,5 (113 bayt - 6 x 7% - 8)

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

Yazdırılamayan karakterler içeriyor, işte geri dönüşümlü bir xxdhexdump:

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

Ayrıca çevrimiçi deneyebilirsiniz .

açıklama

Şarkıyı baz-6 numaralarında saklıyorum, 1391423 no'lu üsse yeniden kodladım ve daha sonra yer kazanmak için baz 256'ya. Bazı şarkılar başladığından beri üs 6'yı seçmek zorunda kaldım ^ve kod çözme işleminden sonra sayılar gerçekten 0 ile başlayamaz.

  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

Burada gerçekten golf oynamaya çalışmıyor. Güzellik açısı için daha fazla gidiyor. Bence ana program çok temiz görünüyor, sağ tarafta sıkışmış mükemmel bir dikdörtgen kutu.

Her zaman olduğu gibi, $('pre').css('line-height',1)tarayıcı konsolunuzda çalıştırarak daha iyi bir görüntü elde edebilirsiniz .

                 ┌─────────────────────────┐
               ┌─┴─╖                     ┌─┴─╖
      ┌────────┤ · ╟─────────────────────┤ · ╟─────────────┐    ╔═════════╗   ╔════╗  ╔════╗
      │        ╘═╤═╝     ╔═════════╗     ╘═╤═╝ ╓───╖       │    ║ 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 ║
      ╘════╝ ╚════╝   ╚═══╝

Tek bir, garip, nadiren kullanılan Unicode karakteri oluşan funciton fonksiyonları isim koyma geleneğinde devam, en iyisi bu zorluk çıkarabilir hakkında düşündüm ve bana öyle geldi o Bağlantı ve Zelda (veya, eğer isterseniz, Legend of Zelda ) size LZ verir , böylece küçük harf graph (U + 02AB, ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ ʟᴢ ᴅɪɢʀᴀᴘʜ) uygun görünür.

açıklama

Esolangs makalesinde açıklandığı gibi, Funciton programı “UTF-21” olarak adlandırdığım girdiyi kodlayan girdiyi alır, ancak tek bir insancıl tam sayı olarak alır. Bu sayıyı bir hashmap (anahtar sözcük, ilişkisel dizi) için bir anahtar olarak kullanmak isteseydim, iki kriteri karşılayan bir karma işlevine ihtiyacım olurdu: birincisi, Funciton'da uygulamak için yeterince basit ve iki, beklenen 13 giriş dizeleri farklı bir karma değeri verir. Aklıma gelen en basit hash işlevi input % m, bir değeri içindi m. Bu nedenle, mtüm karma değerlerinin benzersiz olduğu en küçük tam sayıya ulaşana kadar = 13, 14, 15 vb. Bu rakamın 25 olduğu ortaya çıktı.

Karma değerler:

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

Her şarkıyı bir bitin bir notun varlığını veya yokluğunu temsil etmesini sağlayarak kodlarız. Örneğin, Zelda'nın Ninni aşağıdaki gibi kodlanır:

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

bitlerin ters sırada olması dışında; sol üst hücre, en az anlamlı bitedir. Bu, her şarkının 40 bit uzunluğunda olduğu anlamına gelir.

Böylelikle 40 × 25 = 1000 bitlik bir sayı alarak ve her şarkı için bit desenini karma değerine göre doğru yere yerleştirerek (orta derecede seyrek) bir karma tablo oluştururuz. Programdaki canavarca sayı tam olarak bu karma tablo.

Kalan sayıların her birinin anlamı:

  • 45= 0x2DUnicode içindir -.
  • 1257283645609482190214660190: Bu ^<>VAUTF-21'deki dizedir . Gördüğüm kadarıyla burada karakter başına 7 bit kullanabilirdim, sayıyı kısaltırdım, ama UTF-21 Funciton'da o kadar derindi ki, sadece benim başıma gelmedi.
  • 2097151= 0x1FFFFF= (1 << 21) - 1. Yukarıdaki karakterden ilk karakteri almak için kullanılır.
  • 20971565: Bu, -\nher satırın sonuna eklenen dizedir .
    • Bu sayının ve önceki görünümün çok benzer görünmesi meraklı görünebilir, ancak bunu düşünürseniz, bunun için ondalık kullanıyoruz ve Unicode'un \n10 olması gerekiyor. Bu son sayı (10 << 21) + 45.

Program şimdi aşağıdaki gibi ilerliyor:

  • Ana program ʫaşağıdaki 3 parametreyle çağırır :
    • B : Karma tablo, girişin karma değerinin 40 bit katı sağa kaydırıldı. Çıkmak istediğimiz şarkı şu an en az 40 önemli parçada.
    • c : Dize ^<>VA.
    • a : 8 sayısı.
  • Her yinelemesinde ʫ,
    • Eğer c boş değil,
      • eğer bir sıfır, alt bit bakmak değildir B . Çıktı -, -eğer sıfır ise başkası veya c'nin ilk karakteri ise . Sağ Shift B bir bit kaldırmak ve azaltma için tek bir .
      • Eğer bir sıfır, çıkış -\n, ardından ilk karakteri kesmek c ile başka bir döngü başlar bir = 8.
    • eğer c boştur, işlem tamamdır.

Aferin, bu etkileyici!
sweerpotato 24:15

6
<homur> O dang müzikal düz ... monospacing dışına iten ... </ homur>
Taylor Lopez

1
@ iAmMortos: Kabul edildi. Bu nedenle, ♭ karakterinden uzun süre uzak durdum ve kendimi sadece bit bit değil, then, sonra bit bit yapamayacağıma ikna ettim. Ama şimdi Funciton'u düzenlemek için Deja Vu Sans Mono kullanıyorum ve ♭. Şimdi tek ihtiyacımız olan, StackExchange'in kod için de o yazı tipine geçmesi ;-)
Timwi

4
Ayrıca, mutlaka gerekir ♭ ve ♯ daha decrement ve artım için Unicode karakter uydurma daha iyi var olduğunu kabul ediyorlar. Sadece mükemmeller .
Timwi

Haha, tamamen. İşlev hakkında hiçbir şey bilmiyorum, ama bu tamamen mantıklı!
Taylor Lopez

11

Python 2, 143,5 (287 bayt -% 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)

Izgara çizgi ile oluşturulur; daha sonra endekslendi ve notlarla değiştirildi.


Çok fazla bakmadım mı ama beyanında byte kaydedebilirsiniz jher bir boşlukla virgül değiştirilmesi ve arayarak splitbağımsız değişken olmadan
undergroundmonorail

Bunu yapmak zorunda olduğunu sanmıyorum, bu hala senin algoritmanın, bu yüzden temsilcisi hak ettiğini düşünüyorum, ama yine de kurtulmayı başardım range. Ne yazık ki, sadece iç listeyi 5 ile çarpamazsınız çünkü hepsi aynı nesnedendir ve birini değiştirmek diğerlerini değiştirir: / Yine de perl'i yendik!
FryAmTheEggman 23:15

"<^><^>"=> Gibi şeyler yaparak 6 baytı (ilk altı şarkının her biri için 1) eleyemez misiniz "<^>"*2?
El'endia Starman

scs="<"*8 Korkuluk şarkını beğenmedim.
Casey Kuball

Bunu çalıştırmaya çalıştığımda sadece 2. satırda duruyor ve hiç bitmiyor.
Cory Klein

7

Perl 5, 125 ( 320 260 250 Bayt -6x7% bonus şarkıları -8% korkuluk şarkısı)

Yay, nihayet o Perlish karma sözdizimini denemek için bir fırsat.

$_=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)

Ölçek

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

1
Kullanın qw()(yerine yağ virgül sözdizimini %h=qw(zel <^><^> sas >'V><' ...)bazı bayt kaydetmek
mob

1
@mob Bu tavsiye sadece "bazı" baytlardan daha fazlasını tıraş etti. :) Teşekkürler!
LukStorms

1
@Lolarak daha kısaca yazılabilir @L=('-')x17. Ayrıca, ana karma olarak adsız bırakılabilir @B={qw(zel <^><^> ... scs <^V>>V^<)}->{$_}=~/./g.
primo

1
Görüyorum ki, bunlar biraz ayrıntılı bölünmüş işlevden kaçınmak için güzel numaralar. Boşluk için on bayt daha sakrifiye edildi. yukarı bakacak şekilde
LukStorms

5

Perl, 75 (150 bayt -% 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

Shebang'ı 2 olarak sayarak girdi stdin'den alınmıştır.

Örnek kullanım

$ 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
Bunun için bitshifting vec işlevini kullanmak? İnanılmaz.
LukStorms

@LukStorms Keşke sadece 2 güç yerine 3 bit yapabilsin;)
primo

4

Haskell, 344 -% 50 = 172 bayt

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 işi yapar.

Bu kodlamaları kullanarak Python'u yenebileceğimi düşündüm (bana uzun zaman aldı.), Ama hayır. Henüz pek fazla byte kaydetmiyorlar. Baska öneri?

Evet, bu kodlamanın önünde eksidir "ros". Çünkü 'levhası' 0benim taban- 5'teki karakterle bitiyor , çünkü bu olumsuz numara kodlananı iki katına çıkararak kodlanan 'kolay şarkılar için işe yaramaz s. quotBelki kullanmazsan , ama sonra p (-1)özel olarak idare edemezsin , çünkü quot (-5) = 0olumsuzluk ortadan kalkar. Her neyse.


4

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

Ismael Miguel ve Blackhole'a daha fazla bayt tasarrufu için harika fikirler için teşekkür ederiz!

<?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];

Bundan sonra print"-, bu bir satır başı değişiminin tam anlamıyla eklenmesidir. Windows'ta iki bayta çevrilebilir.

Korkuluk şarkısı dahil tüm bonus şarkıları dahil edilmiştir.

Her şarkı yedi bayt kodunda gösterilir. Yeni puanlamayı seviyorum çünkü eski puanlamada sadece bir tane daha düşük puan kazanma şansım olacaktı!

Son düzenlemeler PHP'nin birçok uyarı üretmesini sağlıyor, böylece işleri güzel ve düzenli tutmak için yönlendiriliyorlar /dev/null.

Farklı kaydet zelda.phpve komut satırında çalıştır:

$ 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-                                                                                                                                   
-----------------

"Farklı kaydet main.php" mi demek istedin ?
Zach Gates,

@ZachGates - Bunu yaptığınız için teşekkürler, değişiklik yapıldı.

Buna gerek yok ()etrafta ($i-$c)üzerinde echo($i-$c)?'--':'-'.$z[$c-0];. Ayrıca, içindeki dize splitolmadan kullanılabilir '. Ve '/^'.$argv[1].'/'olarak yazılabilir"/^$argv[1]/"
Ismael Miguel

1
Teşekkür ederim! Sanırım çıktıları temizlemek için CGSE’de / dev / null uyarıları belirtiliyor mu?

@ Blacklack - teşekkür ederim! Perl 5 gönderimi ile bağlandı, oldukça iyi ...

4

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

Replace yönteminden ziyade go-print yöntemini yaparken mevcut Python liderinden birkaç bayt kazın.

Çevrimiçi dene

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)

Çalıştırmak:

> python3 loz.py
bof [return]

Çıktı:

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

['--',c+'-'][s[x]==c]Koşullu yerine birkaç bayttan tasarruf edebilirsiniz
Ruth Franklin

Ooh, iyi görüşme, teşekkür ederim!
Taylor Lopez

3

Ruby, rev 1, 192 - 50% = 96

Golf içerir:

Sihirli dizedeki harf grupları arasındaki boşlukların kaldırılması (ve satırın sonundaki paydaların revizyonu /4.) Diğer bazı gereksiz boşlukların kaldırılması.

kaçış dizilerinin tek karakterlere dönüştürülmesi (yığın değişimi onları göstermeyecek, bu yüzden ?bir yer tutucu olarak koydum )

g17'lik -beş diziden oluşan dizinin yerine 17 satırlı 17 satır içeren tek bir dizge olarak yeniden tanımlanması-

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, revir 0, 223 -% 50 = 111,5 (asılsız)

Giriş kodu 2 harfe indirilir. Bir ile başlıyorsa s, so sonra bir harfle başlıyorsa, silinir siçin geçerlidir ( zelsilinir son harfi ve bir harf ile başlıyorsa önce sorta mektup silinir.

Sihirli dizede (sürümsüz sürümde açıklık için boşluklar bulunur), 2 harfli kodlar ve ardından müzik verileri bulunur. =~Dizedeki konumu döndüren eşleme işleci kullanılarak aranır .

5 Her bir şarkı, 7 ve 8 notları aynen vardır (artı ayrıca 8 notlar var scs.) Bu, bir keyfi 6-nota şarkı ile birlikte rosböylece sihirli dizesinin başında paketlenmiştir değeri ntarafından verilen dizideki pozisyon çalınacak nota sayısını hesaplamak için kullanılabilir. csönceden sıkıştırılmış bfve sayı naşağı yuvarlandığında kesilme ile, her ikisi için de doğru hesaplama ile kurtuluyoruz. Dördüncü kümeden sonra, tüm şarkılar 6 notadan oluşur n, eğer büyükse nota sayısı varsayılan 6'ya düşürülür.

Bir dizi -çıktı için ayarlandı ve notlar birer birer ikame edildi. İstenen müzik verisi, $'orijinal sihirli dizginin parçasını sağındaki parçayı içeren değişkenden elde edilir . Bu şekilde, alakasız veriler göz ardı edilir.

Notlar, ilgili 2 harfli şarkı kodundan hemen sonra, sihirli dizeye bir defada 3 kodlanır. Bölünerek çıkartılırlar 5**(i%3)ve içindeki bir karakter gbuna göre güncellenir. Programın sonunda gyazdırılır.

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 Bayt -% 50 (283 Bayt)

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])

Her notu, 8 satır uzunluğunda olduğu için her bir baytı olarak saklar. İkili gösterimi hatırlar ve ardından doğru karakterlerle değiştirir.


1

Lua, 249 bayt -% 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

Oldukça basit, sadece 6 baz olarak kodlanmış şarkıları okuyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.