오카리나를 연주하자


42

우리 모두 알다시피, 젤다 시리즈는 지금까지 만들어진 최고의 게임 시리즈 중 하나입니다. 이를 기념하여 오카리나에서 몇 곡을 연주 해 봅시다.

도전:

노래가 주어지면 특정 노래에 대해 stdout에 점수를 출력하는 프로그램을 작성하십시오.

입력:

악보를 출력해야하는 노래는 아래와 같이 고유 한 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-

열당 하나의 노트 만 허용됩니다. 간단하게하기 위해 원래 4 개의 행에 다른 행을 추가했습니다.

각 노트는 다른 행에 해당합니다.

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

출력은 표준 출력으로 작성되어야한다. 후행 줄 바꿈이 허용됩니다.

예 :

입력 (젤다의 자장가) :

zel

산출:

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

입력 (Bolero of Fire) :

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
나는 이것이 기존의 답변을 무효화하지 않기를 희망하지만, 원래의 젤다 에서 허수아비의 노래 두 개의 다른 음표로 구성 되어야 한다. 예를 들어 AAAAAAAA는 유효한 허수아비의 노래 가 아니다 .
Jan

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을 저장하여 공간을 절약합니다. 일부 노래는로 시작하기 때문에 base 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

Funciton , 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 ║
      ╘════╝ ╚════╝   ╚═══╝

Funciton 함수에 하나의 이상하고 거의 사용되지 않는 유니 코드 문자로 구성된 Funciton 함수 이름을 제공하는 전통을 계속 이어 가면서이 과제를 가장 잘 표현할 수있는 것이 무엇인지 생각했고 Link and Zelda (또는 원하는 경우 Legend of Zelda )가 LZ 를 제공하므로 소문자 digraph ʫ (U + 02AB, ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ ʟᴢ ᴅɪɢʀᴀᴘʜ)이 적절 해 보입니다.

설명

esolangs 기사에서 설명했듯이 Funciton 프로그램은“UTF-21”이라고 인코딩 된 입력을 단일 거대한 정수로 수신합니다. 이 숫자를 해시 맵 (사전, 연관 배열)의 키로 사용하려면 두 가지 기준을 만족하는 해시 함수가 필요합니다. 하나는 Funciton에서 구현하기에 충분히 간단하고 두 가지 모두 예상되는 13 가지 입력 문자열은 다른 해시 값을 제공합니다. 내가 생각할 수있는 가장 간단한 해시 함수는의 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

우리는 하나의 비트가 음의 존재 유무를 나타내는 것으로 각 노래를 인코딩합니다. 예를 들어, Zelda의 자장가는 다음과 같이 인코딩됩니다.

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

비트들이 반대 순서라는 것을 제외하고; 왼쪽 상단 셀은 최하위 비트입니다. 이것은 모든 노래의 길이가 40 비트임을 의미합니다.

따라서 40 × 25 = 1000 비트 숫자를 취하고 각 노래의 비트 패턴을 해시 값에 따라 올바른 위치에 배치하여 (보통 스파 스) 해시 테이블을 만듭니다. 프로그램의 괴물 수는 정확히이 해시 테이블입니다.

나머지 숫자 각각의 의미는 다음과 같습니다.

  • 45= 0x2D는 유니 코드입니다 -.
  • 1257283645609482190214660190: ^<>VAUTF-21 의 문자열 입니다. 후시로 문자 당 7 비트를 사용하여 숫자를 줄일 수 있었지만 UTF-21은 Funciton에서 매우 전통적이어서 나에게 발생하지 않았습니다.
  • 2097151= 0x1FFFFF= (1 << 21) − 1. 위의 문자열에서 첫 번째 문자를 가져 오는 데 사용됩니다.
  • 20971565: 이것은 문자열 -\n이며 각 줄의 끝에 추가됩니다.
    • 이 숫자와 이전 숫자가 비슷하게 보일지 모르지만, 생각하면 십진수를 사용하고 유니 코드가 10이기 때문입니다 \n. 마지막 숫자는 (10 << 21) + 45입니다.

프로그램은 이제 다음과 같이 진행됩니다.

  • 메인 프로그램 ʫ은 다음 3 가지 파라미터로 호출합니다 .
    • B : 해시 테이블로, 입력의 해시 값을 40 비트 배 오른쪽으로 이동합니다. 우리가 출력하고자하는 노래는 이제 40 개의 최하위 비트에 있습니다.
    • c : 문자열 ^<>VA.
    • a : 숫자 8.
  • 의 각 반복 ʫ에서
    • 경우 C가 비어 있지,
      • a 가 0이 아닌 경우 B 의 맨 아래 비트를보십시오 . Output -, -0이 아니면 다른 c, 그렇지 않으면 c 의 첫 번째 문자 B 를 1만큼 시프트 하면 1 비트가 제거되고 a가 감소 합니다 .
      • 만약 A가 제로를 출력 -\n하고에서 첫 문자 잘라낼 C를 하고있는 다른 루프를 시작 = 8.
    • 경우 C가 비어있는, 우리가 수행됩니다.

잘했다, 그것은 인상적이다!
sweerpotato

6
<불평> 그 음악 플랫 ... monospacing을 던지는 ... </ 불평>
테일러 로페즈

1
@iAmMortos : 동의합니다. 이런 이유로, 나는 ♭ 문자를 오랫동안 피하고 비트 단위, 비트 단위, 비트 단위는 할 수 없다는 것을 확신했다. 그러나 이제는 Deja Vu Sans Mono 를 사용 하여 Funciton을 편집하고 ♭가 있습니다. 이제 StackExchange가 코드를 위해 해당 글꼴로 전환하기 만하면됩니다. ;-)
Timwi

4
또한 ♭ 및 than보다 감소 및 증분에 더 적합한 유니 코드 문자가 없다는 것을 반드시 인정 해야합니다 . 그들은 완벽 합니다.
Timwi

하하. 나는 기능에 대해 아무것도 모른다. 그러나 그것은 완전히 이해가된다!
Taylor Lopez

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

"<^><^>"=> "<^>"*2? 같은 작업을 수행하여 6 바이트 (처음 6 곡 각각에 1 개)를 제거 할 수 없습니다 .
El'endia Starman

scs="<"*8 허수아비 노래가 마음에 들지 않습니다.
Casey Kuball

이것을 실행하려고하면 2 번 줄에서 멈추고 결코 끝나지 않습니다.
코리 클라인

7

펄 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><' ...)일부 바이트를 절약하기 위해
mob

1
@mob 그 조언은 "일부"바이트 이상의 것을 면도했습니다. :) 감사!
LukStorms

1
@L보다 간결하게 쓸 수 있습니다 @L=('-')x17. 또한 기본 해시는 익명으로 유지 될 수 있습니다 @B={qw(zel <^><^> ... scs <^V>>V^<)}->{$_}=~/./g.
primo September

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

shebang을 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

하스켈, 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 일을한다.

이 인코딩을 사용하여 파이썬을 이길 수 있다고 생각했습니다 (오래 오랜 시간이 걸렸습니다). 그들은 실제로 많은 바이트를 절약하지 않습니다. 어떤 제안?

예,의 인코딩 앞에 빼기입니다 "ros". 그 '시트'는 0내 base-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?
Zach Gates

@ZachGates-변경 사항을 확인해 주셔서 감사합니다.

당신은 필요가 없습니다 ()주위 ($i-$c)에를 echo($i-$c)?'--':'-'.$z[$c-0];. 또한 내부의 문자열 split은없이 사용할 수 있습니다 '. 그리고 '/^'.$argv[1].'/'같이 쓸 수있다"/^$argv[1]/"
이스마엘 미구엘

1
감사합니다! CGSE에서 경고를 / dev / null로 파이프하여 출력을 정리할 수 있다고 생각합니까?

@Blackhole-감사합니다! 그것은 Perl 5 제출과 관련이 있으며, 꽤 잘하고 있습니다.

4

파이썬 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]조건부 대신을 사용하여 몇 바이트를 절약 할 수 있습니다
Ruth Franklin

오, 좋은 전화 감사합니다!
Taylor Lopez

3

루비, 개정 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

루비, rev 0, 223-50 % = 111.5

입력 코드가 2 자로 줄어 듭니다. 그것이로 시작하면 s의는 s그 후 편지로 시작하는 경우, 삭제 s에만 적용 ( zel삭제 마지막 글자, 그리고 편지로 시작하는 경우 전에 s중간 문자가 삭제됩니다.

마법 문자열 (확장되지 않은 버전에는 명확성을위한 공백이 포함되어 있음)에는 2 자 코드와 음악 데이터가 포함됩니다. =~문자열에서 위치를 리턴하는 일치 연산자 를 사용하여 검색됩니다 .

5 각 한 곡, 7, 8 노트 정확하게있다 (플러스도 8 노트를 가지고 SCS는.) 이들은 한 임의의 6 노트의 노래와 함께 ros그래서 마법 문자열의 시작 부분에 번들로 제공되는 값 n에 의해 주어진 현의 위치는 연주 할 음의 수를 계산하는 데 사용될 수 있습니다. cs는 이전에 압착되어 bf있고 숫자 n가 반올림 되면 잘림 으로 두 가지 모두에 대한 올바른 계산으로 벗어날 수 있습니다. 네 번째 클러스터 이후에는 모든 곡에 6 개의 음표가 있으므로 n음표 수가 클 경우 음표 수가 기본값 6으로 줄어 듭니다.

배열은 -출력을 위해 설정되고 노트는 하나씩 대체됩니다. 필요한 음악 데이터는 $'매치 오른쪽에 원래 매직 문자열의 일부를 포함 하는 변수에서 추출됩니다 . 이러한 방식으로 관련없는 데이터는 무시됩니다.

음표는 관련 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

파이썬 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

루아, 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.