Давайте пограємо в окарину


42

Як ми всі знаємо, серія Zelda - одна з найкращих ігрових серій, яку коли-небудь робила. На честь цього давайте зіграємо кілька пісень на окарині.

Виклик:

Напишіть програму, яка, даючи пісню, виводить бал для stdout для цієї конкретної пісні.

Вхід:

Пісня, з якої вам доведеться вивести бал, буде надана унікальною комбінацією трьох символів, як показано нижче:

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 

Як ми всі знаємо, пісня Опудало - це пісня, яку ти сам пишеш. Ця пісня повинна мати вісім нот. Виведіть бал, який ви склали самі, який відрізняється від усіх інших балів.

Якщо ви вирішите включити всі пісні, то це складе бонус -50% до вашого байтового бала.

Вихід:

Примітки у висновку символізуються такими символами:

^
<
>
V
A

Виведіть бал у такому форматі:

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

Допускається лише одна примітка на стовпець. Для простоти я додав ще один рядок до початкових чотирьох рядків.

Кожна примітка відповідає іншому рядку:

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

Вихідні дані повинні бути написані у stdout. Доступні нові рядки дозволені.

Приклади:

Вхід (Колискова Зельди):

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

Оскільки ми граємо в гольф з кодом ocarina, виграє найкоротша програма в байтах!

Посилання на пісні:

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 не була б дійсною піснею опудало.
січня

4
Я думаю, що малі літери vбудуть виглядати краще.
mbomb007

3
Я дуже чекаю, чи хтось вирішить цю проблему в веллато чи фузі та зіграє її на
ocarina

Відповіді:


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

Він містить символи, що не xxdдрукуються , тому тут є оборотний шестигранник:

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

Продовжуючи традицію давати функції Funciton іменам, що складаються з одного, дивного, рідко використовуваного символу Unicode, я подумав про те, що найкраще може представляти цю проблему, і мені спало на думку, що Посилання та Зельда (або, якщо ви хочете, Легенда про Zelda ) дають вам LZ , тому нижній регістр graph (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

Ми кодуємо кожну пісню, маючи один біт, який представляє наявність або відсутність ноти. Наприклад, колискова колиска Зелди буде закодована так:

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

за винятком того, що біти знаходяться в протилежному порядку; лівий верхній осередок знаходиться в найменш значущому біті. Це означає, що кожна пісня має 40 біт.

Таким чином, ми створюємо (помірно розріджену) хеш-таблицю, беручи число 40 × 25 = 1000 біт і розміщуючи біт-шаблон для кожної пісні в потрібному місці відповідно до її хеш-значення. Чудовисне число в програмі - саме ця хеш-таблиця.

Ось що означає кожне з решти цифр:

  • 45= 0x2Dє Unicode для -.
  • 1257283645609482190214660190: Це рядок ^<>VAу UTF-21. Заднім числом я міг би використовувати тут 7 біт на символ, що робить число коротшим, але UTF-21 настільки глибоко традиційний у Funciton, що мені просто не траплялося.
  • 2097151= 0x1FFFFF= (1 << 21) - 1. Використовується для отримання першого символу з вищевказаного рядка.
  • 20971565: Це рядок -\n, який додається до кінця кожного рядка.
    • Може здатися цікавим, що це число та попередній вигляд виглядають настільки схожими, але якщо ви подумаєте про це, це тому, що ми використовуємо десятковий, а Unicode - \n10. Останнє число - (10 << 21) + 45.

Зараз програма триває так:

  • Основна програма дзвінки ʫз такими 3 параметрами:
    • B : Хеш-таблиця, зміщена праворуч на 40 біт у кращу величину хеша введення. Пісня, яку ми хочемо випустити, зараз має 40 найменш значущих біт.
    • c : Рядок ^<>VA.
    • а : Число 8.
  • У кожній ітерації ʫ,
    • якщо c не порожній,
      • якщо не дорівнює нулю, дивитися на нижній біт B . Виведіть , а потім інший, якщо він дорівнює нулю або перший символ c в іншому випадку. Зсуньте праворуч B на один, щоб видалити один біт і декремент a .--
      • якщо a дорівнює нулю, виведіть -\n, а потім відріжте перший символ з c та запустіть інший цикл з a = 8.
    • якщо c порожній, ми закінчили.

Молодці, це вражає!
sweerpotato

6
<грубати> Та звисаюча музична квартира ... викидаючи односхилі ... </grumble>
Тейлор Лопес

1
@iAmMortos: Погоджено. З цієї причини я довго уникав ♭ персонажа і переконував себе, що я можу просто побито-не, потім ♯, потім побито-ні. Але тепер я використовую Deja Vu Sans Mono для редагування Funciton, і він має ♭. Тож тепер все, що нам потрібно, це для того, щоб StackExchange також перейшов на цей шрифт для коду ;-)
Timwi

4
Крім того, ви, безумовно, повинні визнати, що немає кращого символу Unicode для зменшення та збільшення приросту, ніж ♭ і ♯. Вони просто ідеальні .
Тімві

Ха-ха, цілком. Я нічого не знаю про функцію, але це має повний сенс!
Тейлор Лопес

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 байт (1 для кожної з перших шести пісень), виконуючи такі речі, як "<^><^>"=> "<^>"*2?
El'endia Starman

scs="<"*8 Мені не подобається твоя пісня Scarecrow.
Кейсі Кубалл

Коли я намагаюся запустити це, він просто зупиняється на лінії 2 і ніколи не закінчується.
Cory Klein

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><' ...)щоб зберегти кілька байт
mob

1
@mob Ця порада голила більше, ніж просто "деякі" байти. :) Дякую!
LukStorms

1
@Lможе бути написано більш лаконічно як @L=('-')x17. Крім того, основний хеш можна залишити анонімним як @B={qw(zel <^><^> ... scs <^V>>V^<)}->{$_}=~/./g.
прима

1
Я бачу, це приємні хитрощі, щоб уникнути злегка багатослівного розбиття функції. Ще десять байтів було принесено в жертву порожнечі. bubs 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 bitshifting vec? Дивовижний.
LukStorms

@LukStorms Я б хотів, щоб він міг зробити 3 біти, а не лише потужності 2;)
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%)

Дякуємо Ісмаелю Мігелю та Блекхолу за чудові ідеї, щоб заощадити більше байтів!

<?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.

Всі бонусні пісні, включаючи пісню Опудало, включені.

Кожна пісня представлена ​​у семи байтах коду. Мені подобається нове підрахунок, тому що за старого балу я отримав би лише один мізерний бонусний бал!

Останні зміни редагують, що 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
Дякую! Я думаю, що в CGSE дозволено подавати попередження на трубу до / dev / null, щоб очистити вихід?

@Blackhole - дякую! Він пов'язаний з поданням Perl 5, робить дуже непогано ...

4

Python 3 - 138,5 ( 292 280 277 байт - 50%)

Поголив кілька байт від поточного лідера Python, виконуючи метод print-as-you-go, а не метод заміни.

Спробуйте в Інтернеті

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

Ruby, rev 1, 192 - 50% = 96

Гольф включає:

видалення пробілів між групами літер у чарівному рядку (та перегляд знаменника в кінці рядка до /4 .) Видалення ще деяких непотрібних пробілів.

перетворення послідовностей евакуації в одиничні символи (обмін стеками їх не відображатиметься, тому я поставив ?як заповнювач)

перевизначення gяк єдиний рядок, що містить п'ять запусків з 17 з -наступними новими рядками, а не масив з п'яти рядків 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

Рубін, об. 0, 223 - 50% = 111,5 (необійний)

Код введення зменшується до 2 букв. Якщо він починається з символу s, то sвидаляється, якщо він починається з літери після s(застосовується лише до zelостанньої літери, і якщо вона починається з літери до sтого, як середня літера буде видалена.

Чарівний рядок (який у версії без вольфу містить пробіли для ясності) містить 2-літерні коди, за якими слідують музичні дані. Він проводиться за допомогою оператора відповідності=~ який повертає позицію в рядку.

Існує рівно одна пісня, кожна з 5, 7 та 8 нот (плюс scs, яка також має 8 нот.) Ці, поряд із однією довільною піснею з 6 нот ros, поєднуються на початку магічної струни, так що значення, nзадане позиція в рядку може бути використана для обчислення кількості відтворених нот. csстискається раніше bf, і з усіченням, коли число в nокруглюється вниз, ми просто підемо з правильним розрахунком для обох. Після четвертого кластеру всі пісні мають 6 нот, тому, якщо nвеликий, кількість нот зменшується до 6 за замовчуванням.

Для -виводу встановлюється масив, і примітки замінюються одна на одну. Необхідні музичні дані витягуються із змінної, $'яка містить частину оригінальної магічної рядки праворуч від збігу. Таким чином ігноруються нерелевантні дані.

Нотатки кодуються 3 одночасно у чарівний рядок, одразу після відповідного 2-літерного коду пісні. Вони витягуються діленням на 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

Луа, 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 номерів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.