オカリナを演奏しましょう


42

私たち全員が知っているように、ゼルダシリーズはこれまでに作られた最高のゲームシリーズの一つです。それを記念して、オカリナでいくつかの曲を演奏しましょう。

チャレンジ:

曲を指定すると、その特定の曲のスコアを標準出力に出力するプログラムを作成します。

入力:

スコアを出力する必要がある曲は、以下に示すように、ユニークな3文字の組み合わせで与えられます。

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

ボーナスソング、各-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

ボーナスソング2、-8%:

scs - Scarecrow's song 

皆知っているように、かかしの歌はあなたが自分で作曲した歌です。この歌には8つの音符が必要です。他のすべてのスコアとは異なる自分で作成したスコアを出力します。

すべての曲を含めることにした場合、合計でバイトスコアに-50%のボーナスが加算されます。

出力:

出力の注記は、次の文字で記号化されています。

^
<
>
V
A

次の形式でスコアを出力します。

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

列ごとに1つのメモのみが許可されます。簡単にするために、元の4行に別の行を追加しました。

各メモは異なる行に対応しています。

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

出力はstdoutに書き込まれます。末尾の改行が許可されます。

例:

入力(ゼルダの子守by):

zel

出力:

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

入力(火のボレロ):

bof

出力:

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

注チートシート:

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

オカリナコードゴルフをプレイしているため、バイト単位の最短プログラムが勝ちです!

歌の参照:

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

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


4
おそらく、バイトボーナスではなく%ボーナスを使用する必要があります。これらの曲を7バイト未満でエンコードすることは事実上不可能であるため、現在のところボーナスに値するものはありません。また、かかしの歌は8つの実際の音符で構成する必要があることにも言及してください。そうしないと、誰かが空のスコアを印刷することができます。しかし、それ以外は素晴らしい挑戦です!
ETHproductions

9
この質問を読んで頭の中でこれらの歌を聞くことができるという事実は、私が自分の人生で何をしているのだろうと思います。つまり、OoTをプレイできるようになったときに仕事をしています
...-MikeTheLiar

11
これが既存の答えを無効にしないことを願っていますが、元のゼルダではかかしの歌は2つの異なる音符構成されている必要があるため、AAAAAAAAは有効なかかしの歌ではないことに注意してください。
1

4
小文字のvほうが見やすいと思います。
mbomb007

3
誰もがベラトまたはフーガでこの問題を解決し、オカリナでそれを演奏する人が誰であるかを見て本当に待っています
-user902383

回答:


8

Pyth、56.5(113バイト-6×7%-8%)

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

印刷できない文字が含まれているため、ここにリバーシブルのxxd16進ダンプがあります。

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

オンラインで試すこともできます

説明

曲をベース6の数字で保存し、ベース1391423に再エンコードしてからスペースを節約するためにベース256に再エンコードします。曲の一部がで始まるため、ベース6を選択する必要^がありました。デコード後、数字を0で始めることはできません。

  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

機能、4322-50%= 2161

ここで実際にゴルフをしようとはしていません。ビューティーアングルをもっと追求します。メインプログラムは本当にすっきりしていて、右側に隠れた完璧な長方形の箱だと思います。

いつものように、$('pre').css('line-height',1)ブラウザコンソールで実行することにより、より良いレンダリングを得ることができます。

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

単一、奇妙な、めったに使われないUnicode文字から成るFunciton関数名を与えるの伝統に続いて、私は最高のこの挑戦を表すことができるものについて考え、そしてそれは私に発生したリンクゼルダ(または、あなたがしたい場合は、伝説ゼルダLZを与えるので、小文字の有向グラフʫ(U + 02AB、ʟᴀᴛɪɴsᴍᴀʟʟʟᴇᴛᴛᴇʀʟᴢᴅɪɢʀᴀᴘʜ)が適切と思われます。

説明

esolangsの記事で説明されているように、Funcitonプログラムは、「UTF-21」と呼ばれるものとしてエンコードされた入力を受け取りますが、1つの巨大な整数として受け取ります。この番号をハッシュマップ(辞書、連想配列)のキーとして使用したい場合、2つの基準を満たすハッシュ関数が必要になります。入力文字列は異なるハッシュ値を与えます。私が考えることができる最も単純なハッシュ関数はinput % m、のいくつかの値に対するものでしたm。したがって、mすべてのハッシュ値が一意である最小の整数に到達するまで、13、14、15などを試しました。この数は25です。

ハッシュ値は次のとおりです。

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

音の有無を1ビットで表すことにより、各曲をエンコードします。たとえば、ゼルダの子守byは次のようにエンコードされます。

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

ただし、ビットの順序は逆です。左上のセルは最下位ビットにあります。つまり、すべての曲の長さは40ビットです。

したがって、40×25 = 1000ビットの数値を取得し、そのハッシュ値に従って各曲のビットパターンを適切な場所に配置することにより、(適度にまばらな)ハッシュテーブルを作成します。プログラム内の巨大な数は、まさにこのハッシュテーブルです。

残りの各数値の意味は次のとおりです。

  • 45= 0x2DはのUnicodeです-
  • 1257283645609482190214660190:これは^<>VAUTF-21の文字列です。後から考えると、ここでは文字ごとに7ビットを使用して数字を短くすることができましたが、UTF-21はFuncitonで非常に伝統的であるため、私にはまったく発生しませんでした。
  • 2097151= 0x1FFFFF=(1 << 21)− 1.上記の文字列から最初の文字を取得するために使用されます。
  • 20971565:これは、-\n各行の末尾に追加される文字列です。
    • この数字と前の数字が似ているのは不思議に思えるかもしれませんが、考えてみると、10進数を使用しており、Unicodeが\nたまたま10であるためです。その最後の数字は(10 << 21)+ 45です。

プログラムは次のように進行します。

  • メインプログラムはʫ、次の3つのパラメーターで呼び出します。
    • B:入力のハッシュ値の40ビット倍だけ右にシフトされたハッシュテーブル。出力する曲は、最下位40ビットになりました。
    • c:文字列^<>VA
    • a:数字の8。
  • の各反復でʫ
    • もしcが空ではありません、
      • 場合はゼロではないが、下部ビットを見てB。Output 、ゼロの場合は別のもの、そうでない場合はcの最初の文字。Bを1つ右にシフトして1ビットを削除し、aをデクリメントます。--
      • 場合ゼロ、出力され、その後の最初の文字切り落とすCとし、で別のループを開始= 8。-\n
    • cが空の場合、完了です。

よくできました、それは印象的です!
sweerpotato

6
<grumble> ミュージカルフラットをたたく ...モノスペースを捨てる... </ grumble>
テイラーロペス

1
@iAmMortos:同意しました。このため、私は長い間♭文字を避け、ビット単位ではなく、#、ビット単位ではないことを確信しました。しかし、今ではDeja Vu Sans Monoを使用してFuncitonを編集していますが、andがあります。したがって、必要なのはStackExchangeがコード用のフォントにも切り替えることです;-)
Timwi

4
また、deと♯よりも減分と増分に適したUnicode文字がないことを認めなければなりません。彼らは完璧です。
ティムウィ

ハハ、まったく。Functionについては何も知りませんが、それはまったく理にかなっています!
テイラーロペス

11

Python 2、143.5(287バイト-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)

グリッドはダッシュで生成されます。その後、索引付けされ、メモに置き換えられます。


あまり検討していませんがj、各コンマをスペースに置き換えてsplit引数なしで呼び出すことにより、宣言のバイトを節約できます
-undergroundmonorail

私はあなたがそれをする必要はないと思います、それはまだあなたのアルゴリズムですので、あなたは担当者に値すると思いますが、とにかく私は取り除くことができましたrange。残念ながら、それらはすべて同じオブジェクトであり、一方を変更すると他のオブジェクトが変更されるため、内部リストに5を掛けることはできません。
FryAmTheEggman

"<^><^>"=>のようなことをして、6バイト(最初の6曲ごとに1バイト)を削除できません"<^>"*2
エレンディアスターマン

scs="<"*8 私はあなたのかかしの歌が好きではありません。
ケーシークーボール

これを実行しようとすると、2行目で停止し、終了しません。
コリークライン

7

Perl 5、125 (320 260 250バイト-6x7%ボーナスソング-8%かかしソング)

やっ、最後にそのPerlishハッシュ構文で実験する機会。

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

テスト

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

1
使用qw()(構文の代わりに、脂肪コンマを%h=qw(zel <^><^> sas >'V><' ...)いくつかのバイトを保存するために
暴徒

1
@mobこのアドバイスは、単なる「いくつかの」バイト以上のものを削りました。:)ありがとう!
-LukStorms

1
@Lとしてより簡潔に書くことができます@L=('-')x17。また、メインハッシュはとして匿名のままにすることができます@B={qw(zel <^><^> ... scs <^V>>V^<)}->{$_}=~/./g
プリモ

1
ちょっと冗長な分割機能を避けるための素晴らしいトリックです。さらに10バイトがボイドに犠牲にされました。Tumbs up
LukStorms

5

Perl、75(150バイト-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

シバンを2としてカウントすると、入力はstdinから取得されます。

サンプル使用法

$ 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
これにビットシフトvec関数を使用していますか?すごい。
-LukStorms

@LukStorms 2のべき乗だけでなく、3ビットができることを望みます;)
primo

4

Haskell、344-50%= 172バイト

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 仕事をします。

これらのエンコーディングを使用することでPythonに勝つことができると思いました(長い時間がかかりました。実際にはまだ多くのバイトを節約していません。助言がありますか?

はい、それはのエンコーディングの前のマイナスです"ros"。それは、その「シート」が0私のベース5 を意味する文字で終わっているためsです。quot多分使用しない限り、p (-1)特別な処理はできませんquot (-5) = 0。なぜなら、なので、否定性は消えてしまうでしょう。なんでも。


4

PHP:130バイト(260 270 279バイト-6×7%-8%)

より多くのバイトを節約するための素晴らしいアイデアを提供してくれたIsmael MiguelとBlackholeに感謝します!

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

の後にprint"-、これはキャリッジリターンのリテラル挿入です。Windowsでは2バイトに変換される場合があります。

かかしの歌を含むすべてのボーナス曲が含まれています。

各曲は7バイトのコードで表されます。古いスコアリングでは全体的にわずかなボーナスポイントしか獲得できなかったため、新しいスコアリングが気に入っています。

最近の編集により、PHPは多くの警告を生成するようになりました/dev/null

名前を付けて保存zelda.phpし、コマンドラインで実行します。

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

「名前を付けて保存main.php」という意味ですか?
ザックゲイツ

@ZachGates-それをキャッチしてくれてありがとう、変更が行われました。

あなたは必要としない()の周りを($i-$c)echo($i-$c)?'--':'-'.$z[$c-0];。また、内の文字列はなしsplitで使用でき'ます。と'/^'.$argv[1].'/'書くことができます"/^$argv[1]/"
イスマエルミゲル

1
ありがとうございました!出力をクリーンアップするために/ dev / nullに警告をパイプすることはCGSEで許可されていると思いますか?

@ブラックホール-ありがとう!それはPerl 5の提出と結びついており、かなり良い

4

Python 3-138.5(292 280 277バイト-50%)

replaceメソッドではなく、print-as-you-goメソッドを実行しながら、現在のPythonリーダーから数バイト削り取った。

オンラインで試す

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)

実行:

> python3 loz.py
bof [return]

出力:

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

['--',c+'-'][s[x]==c]条件付きの代わりに使用することにより、数バイトを節約できます
ルースフランクリン

ああ、いいね、ありがとう!
テイラーロペス

3

ルビー、rev 1、192-50%= 96

ゴルフが含まれます:

マジックストリング内の文字のグループ間の空白の削除(および行の末尾の分母の改訂/4。)他の不要な空白の削除。

エスケープシーケンスの単一文字への変換(スタック交換では表示されないため?、プレースホルダーとして配置しました)

g17 -の5つの​​文字列の配列の代わりに、17の5つの実行とそれに続く改行を含む単一の文字列としての再定義-

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(変更なし)

入力コードは2文字に短縮されます。で始まる場合ssが削除され、その後の文字で始まる場合szel最後の文字のみが削除され、s中間の文字が削除される前の文字で始まる場合)が削除されます。

マジックストリング(変更されていないバージョンではわかりやすくするためにスペースが含まれています)には、2文字のコードとそれに続く音楽データが含まれています。=~文字列内の位置を返す一致演算子を使用して検索されます。

5のそれぞれ1曲、7、および8つのノートまさにあり(プラスも8つのノートを持っているSCSは。)これらは、1任意の6音符の歌と一緒にrosなるように魔法の文字列の先頭にバンドルされているの値nによって与えられました弦の位置を使用して、演奏するノートの数を計算できます。csは前bfに絞り込まれ、切り捨てにより、入力された数値nが切り捨てられると、両方の正しい計算が行われます。4番目のクラスターの後、すべての曲には6つのノートがあります。したがって、n大きい場合、ノートの数はデフォルトの6に削減されます。

の配列が-出力用に設定され、ノートが1つずつ置換されます。必要な音楽データは$'、一致の右側にある元のマジックストリングの部分を含む変数から抽出されます。このようにして、無関係なデータは無視されます。

ノートは、関連する2文字のソングコードの直後に、マジックストリングに一度に3つエンコードされます。それらは除算で抽出され、それに応じ5**(i%3)て文字gが更新されます。プログラムの最後にg印刷されます。

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バイト-50%(283バイト)

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

各行は8ノートの長さなので、各ノートをバイトとして保存します。バイナリ表現を呼び出してから、正しい文字に置き換えます。


1

Lua、249バイト-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

とてもシンプルで、6進数でエンコードされた曲を読み返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.