ให้เราเล่นขลุ่ยรูปไข่


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 

อย่างที่เรารู้เพลงของ Scarecrow เป็นเพลงที่คุณแต่งเอง เพลงนี้ต้องมีแปดโน้ต เอาท์พุทคะแนนที่คุณเขียนเองซึ่งแตกต่างจากคะแนนอื่น ๆ ทั้งหมด

หากคุณตัดสินใจที่จะรวมเพลงทั้งหมดมันจะรวมเป็นโบนัส -50% ในคะแนนไบต์ของคุณ

เอาท์พุท:

หมายเหตุในผลลัพธ์จะมีสัญลักษณ์เป็นอักขระต่อไปนี้:

^
<
>
V
A

แสดงผลคะแนนในรูปแบบต่อไปนี้:

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

อนุญาตให้บันทึกได้หนึ่งรายการเท่านั้นต่อคอลัมน์ เพื่อความเรียบง่ายฉันได้เพิ่มอีกหนึ่งแถวในสี่แถวเดิม

โน้ตแต่ละตัวตรงกับแถวที่แตกต่างกัน:

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

เอาต์พุตจะถูกเขียนลงใน stdout ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต

ตัวอย่าง:

อินพุต (เพลงกล่อมเด็กของ Zelda):

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 ไบท์ดังนั้นไม่มีโบนัสใดที่จะคุ้มค่า คุณควรพูดถึงว่าเพลง Scarecrow ควรประกอบด้วยบันทึกจริง 8 รายการ; ไม่เช่นนั้นบางคนก็สามารถพิมพ์คะแนนที่ว่างเปล่าได้ แต่นอกเหนือจากนั้นความท้าทายที่ดี!
ETHproductions

9
ความจริงที่ว่าฉันสามารถได้ยินเพลงเหล่านี้ในหัวของฉันอ่านคำถามนี้ทำให้ฉันสงสัยว่าฉันทำอะไรกับชีวิตของฉัน ฉันหมายถึงฉันทำงานเมื่อฉันสามารถเล่น OoT ...
MikeTheLiar

11
ฉันหวังว่านี่จะไม่เป็นโมฆะคำตอบใด ๆ ที่มีอยู่ แต่โปรดทราบว่าในต้นฉบับของ Zelda เพลงของหุ่นไล่กาจะต้องประกอบด้วยโน้ตสองแบบที่แตกต่างกันดังนั้นเช่น AAAAAAAA จะไม่เป็นเพลงของหุ่นไล่กาที่ถูกต้อง
ม.ค.

4
ฉันคิดว่าตัวพิมพ์เล็กvจะดูดีขึ้น
mbomb007

3
ฉันรอดูจริงๆไม่มีใครแก้ปัญหานี้ใน vellato หรือความทรงจำและเล่นบน ocarina
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

มันมีอักขระที่ไม่สามารถพิมพ์ได้ดังนั้นนี่คือ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

คุณสามารถลองออนไลน์ได้เช่นกัน

คำอธิบาย

ฉันเก็บเพลงไว้ในตัวเลขฐาน -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

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 ประกอบด้วยอักขระ Unicode เดี่ยวแปลกและไม่ค่อยได้ใช้ฉันคิดเกี่ยวกับสิ่งที่สามารถแสดงถึงความท้าทายนี้ได้ดีที่สุดและมันเกิดขึ้นกับฉันว่าLinkและZelda (หรือถ้าคุณต้องการLegend of Zelda ) ให้LZแก่คุณดังนั้นค่า digraph ตัวพิมพ์เล็กʫ (U + 02AB, ʟᴀᴛɪɴsᴍᴀʟʟʟᴇᴛᴛᴇʀʟᴢᴅɪɢʀᴀᴘʜ) ดูเหมาะสม

คำอธิบาย

ดังที่อธิบายไว้ในบทความ esolangs โปรแกรม Funciton ได้รับอินพุตที่เข้ารหัสเหมือนกับสิ่งที่ฉันจะเรียกว่า "UTF-21" แต่เป็นจำนวนเต็มเดียวที่มีค่า ถ้าฉันต้องการใช้หมายเลขนี้เป็นกุญแจสำคัญใน hashmap (พจนานุกรม, อาเรย์แบบเชื่อมโยง), ฉันต้องการฟังก์ชันแฮชที่ตรงตามเกณฑ์สองข้อ: อันหนึ่ง, มันง่ายพอที่จะนำไปใช้ใน 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 = 1,000 บิตและวางรูปแบบบิตสำหรับแต่ละเพลงในตำแหน่งที่ถูกต้องตามค่าแฮช หมายเลขมหึมาในโปรแกรมนี้เป็นตารางแฮชนี้อย่างแน่นอน

นี่คือความหมายของตัวเลขที่เหลืออยู่แต่ละตัว:

  • 45= 0x2Dเป็น Unicode -สำหรับ
  • 1257283645609482190214660190: นี่คือสตริง^<>VAใน UTF-21 ในการเข้าใจย้อนหลังฉันสามารถใช้ 7 บิตต่อตัวละครที่นี่ทำให้ตัวเลขสั้นลง แต่ UTF-21 เป็นแบบดั้งเดิมที่ลึกล้ำใน Funciton ที่มันไม่ได้เกิดขึ้นกับฉัน
  • 2097151= 0x1FFFFF= (1 << 21) - 1. ใช้เพื่อรับอักขระตัวแรกจากสตริงด้านบน
  • 20971565: นี่คือสตริง-\nซึ่งถูกผนวกเข้ากับจุดสิ้นสุดของแต่ละบรรทัด
    • ดูเหมือนว่าอาจจะอยากรู้ว่าตัวเลขนี้และรูปลักษณ์ก่อนหน้านี้คล้ายกันมาก แต่ถ้าคุณคิดเกี่ยวกับมันก็เพราะเราใช้ทศนิยมและ Unicode ที่\nเกิดขึ้นเป็น 10 หมายเลขสุดท้ายคือ (10 << 21) + 45

ตอนนี้โปรแกรมดำเนินการดังนี้:

  • โปรแกรมหลักเรียกใช้ʫด้วยพารามิเตอร์ 3 ต่อไปนี้:
    • B : ตารางแฮชเลื่อนไปทางขวา 40 บิตคูณค่าแฮชของอินพุต เพลงที่เราต้องการส่งออกอยู่ในบิตที่สำคัญน้อยที่สุด 40 บิต
    • C : ^<>VAสตริง
    • a : หมายเลข 8
  • ในการทำซ้ำของแต่ละʫ,
    • ถ้าcไม่ว่าง
      • ถ้าไม่เป็นศูนย์ดูที่ด้านล่างของบิตB เอาท์พุทตามมาด้วยอีกถ้ามันเป็นศูนย์หรือตัวอักษรตัวแรกของcมิฉะนั้น กดปุ่ม Shift ขวาBโดยหนึ่งในการลบหนึ่งบิตและพร่อง--
      • ถ้าเป็นศูนย์ส่งออกแล้วตัดตัวอักษรตัวแรกจากและเริ่มวงอื่นที่มี= 8-\n
    • ถ้าcว่างเราก็เสร็จแล้ว

ทำได้ดีน่าประทับใจมาก!
sweerpotato

6
<บ่น> นั่นแดงแบนดนตรี ... ทิ้ง monospacing ส ... </ บ่น>
เทย์เลอร์โลเปซ

1
@iAmMortos: เห็นด้วย ด้วยเหตุนี้ฉันจึงหลีกเลี่ยงตัวละคร♭เป็นเวลานานและเชื่อมั่นในตัวเองว่าฉันสามารถทำระดับบิต - ไม่ได้จากนั้นก็เป็น♯จากนั้นก็ไม่ใช่ในระดับที่เหมาะสม แต่ตอนนี้ฉันใช้Deja Vu Sans Monoเพื่อแก้ไข Funciton และมันมี♭ ดังนั้นตอนนี้ทั้งหมดที่เราต้องเป็น StackExchange เพื่อสลับไปยังตัวอักษรว่าสำหรับรหัสเกินไป ;-)
Timwi

4
นอกจากนี้คุณต้องยอมรับว่าไม่มีตัวอักษร Unicode ที่เหมาะสมในการลดและเพิ่มขึ้นกว่า♭และ♯ พวกเขากำลังเพียงที่สมบูรณ์แบบ
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 เพราะมันเป็นวัตถุเดียวกันทั้งหมดและการเปลี่ยนแปลงหนึ่งรายการเปลี่ยนแปลงอื่น ๆ : / เราชนะ perl (ตอนนี้) แม้ว่า!
FryAmTheEggman

คุณไม่สามารถกำจัด 6 ไบต์ (1 สำหรับแต่ละเพลงหกเพลงแรก) โดยทำสิ่งต่าง ๆ เช่น"<^><^>"=> "<^>"*2?
El'endia Starman

scs="<"*8 ฉันไม่ชอบเพลงหุ่นไล่กาของคุณ
Casey Kuball

เมื่อฉันพยายามที่จะเรียกใช้มันเพียงแค่หยุดบนบรรทัดที่ 2 และไม่เคยเสร็จสิ้น
Cory Klein

7

Perl 5, 125 ( 320 260 250 Bytes -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นอกจากนี้แฮหลักสามารถด้านซ้ายที่ไม่ระบุชื่อเป็น
primo

1
ฉันเห็นว่ามันเป็นเทคนิคที่ดีที่จะหลีกเลี่ยงฟังก์ชั่นการแบ่งแบบละเอียดเล็กน้อย สิบไบต์ถูกบูชายัญให้เป็นโมฆะ 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
การใช้ฟังก์ชั่น bitshifting vec สำหรับสิ่งนี้? น่าอัศจรรย์
LukStorms

@LukStorms ฉันหวังว่ามันจะทำ 3 บิตมากกว่าอำนาจเพียง 2;)
พรีโม่

4

Haskell, 344 - 50% = 172 bytes

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"ใช่ว่าเป็นลบในด้านหน้าของการเข้ารหัสสำหรับ Thats เพราะ 'แผ่น' ปลายด้วยตัวอักษรที่หมายถึง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

เพลงโบนัสทั้งหมดรวมถึงเพลงของ Scarecrow รวมอยู่ด้วย

เพลงแต่ละเพลงมีรหัสเจ็ดไบต์ ฉันชอบคะแนนใหม่เพราะด้วยคะแนนเก่าฉันจะได้รับคะแนนโบนัสเพียงเล็กน้อยเท่านั้นโดยรวม!

การแก้ไขที่ผ่านมาทำให้ 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-                                                                                                                                   
-----------------

คุณหมายถึง "save as main.php" หรือเปล่า
Zach Gates

@ZachGates - ขอขอบคุณสำหรับการติดตามการเปลี่ยนแปลงที่เกิดขึ้น

คุณไม่จำเป็นต้อง()ไปรอบ ๆบน($i-$c) echo($i-$c)?'--':'-'.$z[$c-0];นอกจากนี้สายของคุณภายในของคุณสามารถใช้งานได้โดยไม่ต้องsplit 'และ'/^'.$argv[1].'/'สามารถเขียนเป็น"/^$argv[1]/"
Ismael Miguel

1
ขอขอบคุณ! ฉันคิดว่ามันอนุญาตให้ใช้ใน CGSE เพื่อไพพ์คำเตือนไปยัง / dev / null เพื่อล้างเอาต์พุตหรือไม่?

@Blackhole - ขอบคุณ! มันเชื่อมโยงกับการส่ง Perl 5 ทำได้ดีทีเดียว ...

4

Python 3 - 138.5 ( 292 280 277 ไบต์ - 50%)

โกนผู้นำ 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) การกำจัดช่องว่างที่ไม่จำเป็นอื่น ๆ

การแปลงลำดับ escape เป็นอักขระเดี่ยว (การแลกเปลี่ยนสแต็กจะไม่แสดงดังนั้นฉันจึงใส่?เป็นตัวยึดตำแหน่ง)

การนิยามใหม่ของ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

Ruby, rev 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 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])

เก็บบันทึกย่อแต่ละรายการเป็นไบต์ตามแต่ละบรรทัดมีความยาว 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.