เราไม่ใช่คนแปลกหน้าในการตีกอล์ฟคุณรู้กฏและฉันก็ทำเช่นนั้น


252

เขียนโปรแกรมที่สั้นที่สุดที่พิมพ์เนื้อเพลงทั้งหมดของ "Never Gonna Give You Up"โดย Rick Astley

กฎ:

  • ต้องส่งออกเนื้อร้องตรงตามที่ปรากฏใน pastebin * ด้านบน นี่คือการถ่ายโอนข้อมูลดิบ: http://pastebin.com/raw/wwvdjvEj
  • ไม่สามารถพึ่งพาทรัพยากรภายนอกใด ๆ - เนื้อเพลงทั้งหมดจะต้องสร้างโดย / ฝังตัวอยู่ในรหัส
  • ไม่มีการใช้อัลกอริทึมการบีบอัดที่มีอยู่ (เช่น gzip / bzip2) เว้นแต่คุณจะรวมอัลกอริทึมแบบเต็มในโค้ดของคุณ
  • ใช้ภาษาใดก็ได้รหัสที่สั้นที่สุดจะชนะ

อัปเดต, 1 มิถุนายน 2555:
สำหรับโซลูชันที่มีข้อความที่ไม่ใช่ ASCII ขนาดของโซลูชันของคุณจะถูกนับเป็นไบต์ตามการเข้ารหัส UTF-8 หากคุณใช้ codepoints ที่ไม่สามารถเข้ารหัสใน UTF-8 โซลูชันของคุณจะไม่ถูกตัดสินว่าถูกต้อง

Update, 7 มิถุนายน 2555:
ขอบคุณทุกท่านสำหรับคำตอบที่ยอดเยี่ยม! พรุ่งนี้ฉันจะยอมรับคำตอบที่สั้นที่สุด ตอนนี้คำตอบ GolfScript ของปีเตอร์เทย์เลอร์กำลังเป็นผู้ชนะดังนั้นอย่าลืมปรับปรุงบางอย่างหากคุณต้องการเอาชนะเขา! :)

* มีการพิมพ์ผิดใน Pastebin (บรรทัดที่ 46, "รู้" ควรเป็น "รู้จัก") คุณสามารถทำซ้ำหรือไม่ขึ้นอยู่กับดุลยพินิจของคุณ


4
@ w0lf คุณถูกต้อง ฉันสแกนเฉพาะเนื้อเพลงเพื่อตรวจสอบความถูกต้องของพวกเขาฉันต้องพลาดมันไป ฉันจะยอมรับ "รู้" หรือ "รู้จัก"
พหุนาม

10
ดู 26k + ในเวลาเพียง 3 วัน ว้าว ...
Gaffi

9
วิธีนี้ในโลกสร้างมุมมองและคะแนนโหวตมากมาย? ไม่ว่าเขาจะทำอะไรฉันก็จะทำวิศวกรรมย้อนกลับ
PhiNotPi

39
@PhiNotPi ขอให้โชคดีวิศวกรรมย้อนกลับ "Jeff Atwood tweeting you"
breadbox

9
ข้อ จำกัด ของ UTF-8 ไม่สมเหตุสมผล จะเกิดอะไรขึ้นถ้ารหัสของฉันสั้นลงเมื่อเข้ารหัสเป็น UTF-16 หรือละติน -1 คุณควรนับจำนวนไบต์หรือจำนวนตัวอักษร แต่ให้การเข้ารหัสจนถึงผู้สร้าง
Timwi

คำตอบ:


81

Ruby 576 557 556 (552) ตัวอักษร && PHP 543 ตัวอักษร

โซลูชันการค้นหาและแทนที่อื่น โปรดทราบว่ารูปแบบของการแก้ปัญหานี้เป็นหลักไวยากรณ์ที่ใช้การบีบอัดรหัสhttp://en.wikipedia.org/wiki/Grammar-based_code ตรวจสอบhttp://www.cs.washington.edu/education/courses/csep590a/07au /lectures/lecture05small.pdfสำหรับตัวอย่างการบีบอัดที่เข้าใจง่าย

ฉันได้เขียนกฎการแทนที่เพื่อให้ตัวละครเริ่มต้นสำหรับการทดแทนแต่ละครั้งถูกคำนวณ (พวกเขาอยู่ในลำดับ ASCII ตามลำดับ); ไม่จำเป็นต้องมีอยู่ในข้อมูลการเปลี่ยนแปลง

i=44
s="We; n7trangMsL8loT63Ke rules5s8d8I
AJull commit4nt'sChatFKink: of6CHldn'tRetKisJrom<ny@Ruy-/A= if?<sk 42DS'tLE 4?;Lo8bli=L7ee..
O,R1)O,R001)/-.."
"
I justCannaLE?2Gotta >u=Msta=.|
Ng1Nlet? downNrun<rH=5desMt?N>cryNsayRoodbyeNtE< lie5hurt?|

We'T3n each@Jor s8lSg6r hear9<ch: but6;Lo7hyL7BInsideCe both3Cha9Ro: S
We3KeRa45we;QplB|1)O)NgiT, nPgiT
(G|iT? up| howFJeel:
| know|me|<= |
YH|8s|o |t's been|ing|'re| a|nd|make? | yH| othM|A|ay it
| w|D|ell| I'm|G|ou|I| f|Lh| t|er|
NP|
(Ooh|eTrQ|RSna | g|on|ve".scan(/[^|]+/){s.gsub!((i+=1).chr,$&)}
puts s

บันทึกการใช้งาน

  • วิธีแก้ปัญหาข้างต้นมีความยาว 556 ตัวอักษร แต่ให้คะแนน 552 เมื่อมีการลบบรรทัดใหม่ออกจากซอร์สโค้ด มันเป็นคะแนนที่ดีขึ้นเล็กน้อยกว่าวิธีแก้ปัญหาถ่าน 556 ตัวเดิมที่ฉันเคยได้คะแนน 554
  • ฉันใช้ "รู้จัก" แทน "รู้"; สิ่งนี้ทำให้การทำซ้ำร้อยกรองเหมือนกันและควรทำให้การบีบอัดดีขึ้น
  • เดิมฉันปรับกฎให้เหมาะสมโดยการค้นหาการแทนที่ซ้ำซึ่งจะทำให้ขนาดรหัสปัจจุบันลดลงมากที่สุด อย่างไรก็ตามฉันพบว่ากฎการทดแทน RiderOfGiraffe นั้นดีกว่าของฉันเล็กน้อย (เล็กน้อย) ดังนั้นตอนนี้ฉันจึงใช้กฎของเขาในเวอร์ชันที่ได้รับการแก้ไข
  • ฉันใช้เวลาในการจัดเรียงกฎใหม่เพื่อให้การทดแทนบัตรเดียวสามารถลดขนาดได้ทุกอย่าง
  • เนื่องจากตัวอักษรเริ่มต้นที่คำนวณในกฎการทดแทนรายการกฎของฉันมีกฎสำหรับตัวละครทุกตัวในช่วง ASCII ที่ต่อเนื่องกัน ฉันพบว่าการมีกฎการแทนที่ "ดัมมี" บางอย่างนั้นดีกว่าสำหรับขนาดโค้ดมากกว่าการมีกฎจริงทั้งหมดและการเข้ารหัสการแทนที่การแก้ไขข้อความสุดท้าย
  • ตัวอย่างนี้มีขนาดเล็กพอที่คุณอาจจะสามารถเขียนโปรแกรมเพื่อค้นหาชุดของกฎที่เหมาะสมที่สุด ฉันไม่คาดหวังว่าการทำเช่นนี้จะทำให้ขนาดลดลงมากกว่าสองสามไบต์

การใช้งานที่เก่ากว่า

การติดตั้งที่เก่ากว่านี้มี 576 ตัวอักษรและเริ่มต้นด้วยกฎการทดแทนจากการใช้งาน bash / sed ของ ugoren การเพิกเฉยต่อการเปลี่ยนชื่อตัวแปรการแทนที่การแทนที่ 28 ครั้งแรกของฉันเหมือนกับสิ่งที่ทำในโปรแกรมของ ugoren ฉันเพิ่มอีกไม่กี่ครั้งเพื่อลดจำนวนไบต์โดยรวม สิ่งนี้เป็นไปได้เนื่องจากกฎของฉันมีประสิทธิภาพมากกว่ากฎเกณฑ์ในการปฏิบัติของ ugoren

i=44
puts"WeM noHtraLersB loJ;6 C rules=so do $
& full commitment'sGhat<thinkDof;Gouldn'tKet this fromFny oCrKuy.
-&E if9ask me1~on't @ me:MBo bliEBHee//

3300-.//|
We'J6n each oCr forHo loL;r hear2FchDbut;MBoHhyBH7$nsideGe both6Gha2ADon
We6 CKame=weM>pl7|
$ justGanna @:1#otta 8uEerstaE/|
5?9up5let9down5runFrouE=desert:58cry5sayAodbye5@F lie=hurt:|(Ooh)5?, nI>?
(#4| how<feeliL
|t's been|(Ooh,K4|iJ9up)
|
NI>| know|ay it
|make9|: | you|
You| $'m |FE |Anna |giJ|tell|Ko| to|the|iL |nd| a| w| s|eJr|ve| g|ng|'re".split("|").inject{|m,o|m.gsub((i+=1).chr,o)}.tr('&~#$',"ADGI")

ฉันไม่ได้พยายามเพิ่มประสิทธิภาพกฎการทดแทนในอันนี้

บันทึกการประกวด

รูปแบบการคลายบีบอัดการค้นหาและแทนที่ทำงานได้ดีสำหรับการประกวดครั้งนี้เพราะภาษาส่วนใหญ่มีรูทีนที่สร้างไว้ล่วงหน้าซึ่งสามารถทำได้ ด้วยข้อความจำนวนเล็กน้อยที่จะสร้างรูปแบบการคลายบีบอัดที่ซับซ้อนดูเหมือนจะไม่เป็นผู้ชนะที่เป็นไปได้

ฉันใช้ข้อความ ASCII เท่านั้นและหลีกเลี่ยงการใช้อักขระ ASCII ที่ไม่สามารถพิมพ์ได้ ด้วยข้อ จำกัด เหล่านี้อักขระแต่ละตัวในรหัสของคุณสามารถแสดงข้อมูลได้สูงสุด 6.6 บิตเท่านั้น นี่แตกต่างจากเทคนิคการบีบอัดจริงที่คุณใช้ทั้งหมด 8 บิต ในแง่หนึ่งมันไม่ "ยุติธรรม" เมื่อเปรียบเทียบกับขนาดรหัส gzip / bzip2 เพราะอัลกอริทึมเหล่านั้นจะใช้ทั้งหมด 8 บิต อัลกอริทึมการบีบอัดที่นักเล่นอาจเป็นไปได้ถ้าคุณสามารถรวม ASCII ที่ไม่สามารถพิมพ์ได้แบบดั้งเดิมในสตริงของคุณและอักขระที่ไม่สามารถพิมพ์ได้แต่ละตัวจะยังคงเขียนในรหัสของคุณเป็นไบต์เดียว

โซลูชั่น PHP

<?=str_replace(range('-',T),split(q,"
I justCannaLE?2Gotta >u=Msta=.q
Ng1Nlet? downNrun<rH=5desMt?N>cryNsayRoodbyeNtE< lie5hurt?q

We'T3n each@Jor s8lSg6r hear9<ch: but6;Lo7hyL7BInsideCe both3Cha9Ro: S
We3KeRa45we;QplBq1)O)NgiT, nPgiT
(GqiT? upq howFJeel:
q knowqmeq<= q
YHq8sqo qt's beenqingq'req aqndqmake? q yHq othMqAqay it
q wqDqellq I'mqGqouqIq fqLhq tqerq
NPq
(OohqeTrQqRSna q gqonqve"),"We; n7trangMsL8loT63Ke rules5s8d8I
AJull commit4nt'sChatFKink: of6CHldn'tRetKisJrom<ny@Ruy-/A= if?<sk 42DS'tLE 4?;Lo8bli=L7ee..
O,R1)O,R001)/-..");

ทางออกข้างต้นใช้ PHP จาก "เพื่อนที่น่าเศร้า" และรวมเข้ากับกฎการแทนที่ของฉัน คำตอบของ PHP กลับกลายเป็นว่ามีการบีบอัดรหัสที่สั้นที่สุด ดูhttp://ideone.com/XoW5t


sedทางออกของฉันไม่สามารถเอาชนะได้อย่างแน่นอน ฉันกำลังทำงานกับสิ่งที่หวังว่าจะมีโอกาส - คุณมี 75 ไบต์ของค่าใช้จ่ายบางทีฉันจะตัดมันลง (ไม่ใช่ใน Ruby)
ugoren

ฉันพบ555ไบต์ในโปรแกรมของคุณ (ไม่มีบรรทัดใหม่ต่อท้าย)
res

1
วิธีการให้คะแนน OP คือการยกเว้นคั่นบรรทัดใหม่ในรหัสที่มา ASCII จึงดูเหมือนว่านี้ควรได้คะแนน554
res

สุดยอดทางออก! :)
พหุนาม

ดูเหมือนว่ารหัสการบีบอัดที่สั้นที่สุดอยู่ใน PHP ต่อไปนี้เป็นโซลูชัน 543 ไบต์ (กฎของฉันโดยใช้ข้อมูลโค้ดจาก "เพื่อนที่น่าเศร้า") ideone.com/XoW5t
Ed H.

73

Bash / Sed, 705 650 588 582 ตัวอักษร

ลอจิก :
แนวคิดพื้นฐานคือการแทนที่แบบง่าย แทนการเขียนยกตัวอย่างเช่นNever gonna give you up\nNever gonna let you downผมเขียนXgive you up\nXlet you downและแทนที่ทั้งหมดด้วยX นี่คือความสำเร็จโดยการทำงานกับชุดของกฎในรูปแบบ การแทนที่สามารถซ้อนกันได้ ตัวอย่างเช่นเป็นเรื่องปกติ แต่เป็นในบริบทอื่น ๆ ดังนั้นผมจึงสามารถใช้กฎที่สอง: และ เมื่อเพิ่มกฎบางส่วนของข้อความเพลงจะถูกแทนที่ด้วยอักขระเดียวดังนั้นจึงสั้นลง กฎนั้นยาวขึ้น แต่ถ้าการแทนที่สตริงนั้นยาวและบ่อยครั้งมันก็คุ้มค่า ขั้นตอนต่อไปคือการลบการทำซ้ำออกจากคำสั่งด้วยตนเอง ลำดับค่อนข้างซ้ำNever gonna
seds/X/Never gonna /g
Never gonnagonnas/Y/ gonna/gs/X/NeverY/g

seds/X/something/g
เพื่อให้สั้นลงฉันเปลี่ยนคำสั่ง sed ให้เป็นแบบXsomethingนี้ จากนั้นฉันก็ใช้sedการแปลงให้เป็นsedคำสั่งปกติ รหัสsed 's#.#s/&/#;s#$#/g;#ทำมัน
ผลลัพธ์สุดท้ายคือsedคำสั่งซึ่งอาร์กิวเมนต์ถูกสร้างโดยsedคำสั่งอื่นในเครื่องหมายคำพูด
คุณสามารถค้นหาคำอธิบายโดยละเอียดเพิ่มเติมได้ในลิงค์นี้

รหัส:

sed "`sed 's#.#s/&/#;s#$#/g#'<<Q
LMWe'veKn each o!r for-o longPr hearHzchJbutP're2o-hy2-@Insidexe bothKxhaHCJonMWeK ! game+we'reZpl@
TMI justxanna _UFGotta QuXerstaXR
RM~Squp~letqdown~runzrouX+desertU~Qcry~sayCodbye~_z lie+hurtU
E(Ooh)~S, neverZSM(GV
F how=feelingM
Ht's been
%(Ooh, gV
Vivequp)M
~MNeverZ
K know
@ay itM
Qmakeq
qU 
U you
PMYou
= I'm 
+zX 
ZCnna 
Sgive
_tell
C go
2 to
!the
Jing 
Xnd
z a
x w
- s
M\n`"<<_
We're no-trangers2 lovePK ! rules+so do I
A full commitment'sxhat=thinkJofPxouldn't get this fromzny o!r guyT
LAX ifqask meFDon't _ meU're2o bliX2-eeRRMM%%EELTRR

หมายเหตุ: เอ็น
จิ้นการคลายการบีบอัดมีความยาวเพียง 40 ตัวอักษร อีก 543 เป็นตารางการแปลและข้อความที่บีบอัด bzip2บีบอัดเพลงเป็น 500 ไบต์ (โดยไม่ต้องใช้โปรแกรม) ดังนั้นจะต้องมีพื้นที่สำหรับการปรับปรุง (แม้ว่าฉันจะไม่เห็นว่าฉันจะเพิ่มการเข้ารหัส Huffman หรืออะไรแบบนี้ราคาถูกพอ)
<<Q(หรือ<<_) ถูกใช้เพื่ออ่านจนกว่าอักขระที่กำหนด แต่จุดสิ้นสุดของสคริปต์ (หรือนิพจน์ backquote) นั้นดีพอ บางครั้งสิ่งนี้ทำให้เกิดการเตือน

โซลูชันที่เก่าและง่ายกว่า 666 ตัวอักษร:

sed "
s/L/ MWe'veKn each other for so longMYour heart's been aching butMYou're too shy to say itMInside we bothK what's been going onMWeK the game+we'reZplay itM/;
s/T/MI just wanna tellU how I'm feelingMGotta makeU understandR/;
s/R/M ~giveU up~letU down~run around+desertU~makeU cry~say goodbye~tell a lie+hurtU/g;
s/E/(Ooh)~give, neverZgiveM(GV/g;
s/V/iveU up)M/g;
s/U/ you/g;
s/+/ and /g;
s/K/ know/g;
s/~/MNeverZ/g;
s/Z/ gonna /g;
s/M/\n/g
"<<Q
We're no strangers to love
YouK the rules+so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guyT
LAnd ifU ask me how I'm feeling
Don't tell meU're too blind to seeRRM M(Ooh, gV(Ooh, gVEEL TRR

นี่ยอดเยี่ยม แต่เอาต์พุตของคุณมีอักขระเว้นวรรคบนบรรทัดว่าง นั่นอาจเป็นปัญหากับการตัดและวางจาก pastebin? นอกจากนี้คุณควรจะสามารถที่จะบันทึกไบต์โดยการแทนที่ด้วย\0 &
breadbox

นี่คือทั้งที่สั้นที่สุดและที่ฉันชอบ ผมสงสัยว่านานมันจะเป็นก่อนที่จะมีคนขึ้นมาด้วยวิธีการแก้ปัญหา sed :)
พหุนาม

@ กล่องจดหมายตัดและวางนำพื้นที่นี้มาแน่นอน ฉันลบมันบันทึก 4 ตัวอักษร ด้วยของคุณ&มันทำให้ 5
ugoren

2
@res เพิ่มคำอธิบายที่ดีกว่า
ugoren

1
ขอขอบคุณ esp สำหรับลิงก์ "คำอธิบายโดยละเอียด"; o))))
res

72

ช่องว่าง - 33115 ตัวอักษร

StackExchange chomped คำตอบของฉันนี่คือแหล่งที่มา: https://gist.github.com/lucaspiller/2852385

ไม่ดี ... ฉันคิดว่าฉันอาจย่อขนาดลงได้เล็กน้อย

(หากคุณไม่ทราบว่าช่องว่างคืออะไร: http://en.wikipedia.org/wiki/Whitespace_(programming_language) )


2
ฉันเดาว่าคุณใช้เครื่องมือเพื่อคอมไพล์นี่เป็นช่องว่าง?
evilcandybag

53
+1 สำหรับการสร้างทางออกที่ยาวที่สุดที่ฉันเคยเห็นบน CodeGolf
พหุนาม

6
(+1) ฉันสามารถลดขนาดได้ถึง 27,493 ไบต์ (หรือ 25,623 ไบต์หากใช้ล่าม WS ตัวใดตัวหนึ่งที่เข้มงวดน้อยกว่า) เพียงแค่ใช้การประมวลผลแบบตัวอักษรต่ออักขระโดยตรง - โดยหลักแล้ว 1,943 ข้อความ "push-and-output" โดยไม่มีการข้ามไม่มีการวนซ้ำไม่มีรูทีนย่อยไม่มีค่าการจัดเก็บ / การดึงเพื่อนำมาใช้ใหม่ - ดังนั้นความยาวยังคงลดลงอย่างมาก
res

39

JavaScript, 590 588 ไบต์

f="WeP nTstrangersZTloMX^Zhe rules[sTdTIqA fuFcommitment'sEhat I'mZhinkQofXEouldn'tJetZhis from anyRguy{Sn}AH ifCask me_Don'tZeFmexPZoTbliHZTsee~~qU,J`)U,Jzz`)S}{~~~q|g`|letCdown|run arouH[desertx|Lcry|sayJoodbye|teFa lie[hurtx} eachRfor sTlongXr hearVachQbutXPZoTshyZTsKInsideEe both^EhaVgoQonqWe^ZheJame[weP]plK|qNeMr]{qI justEannaZellx_Gotta LuHerstaH~z`)U)|giM, neMr]giMq(GCyouq\n`iMCup_ how I'm feelingq^ know]Jonna [ aH Z tXqYouVt's been Uq(OohTo SqqWe'M^R other Qing P'reMveLmakeCKay itqJ gHndFll E wCx ";for(i in g="CEFHJKLMPQRSTUVXZ[]^_`qxz{|}~")e=f.split(g[i]),f=e.join(e.pop())

ขึ้นอยู่กับวิธีการที่สตริง "พิมพ์" เล็กน้อย

https://gist.github.com/2864108


1
ยอดเยี่ยมจริงๆ
Jim Blackler

สำหรับในวงสามารถทำลายมันในคอนโซลเนื่องจากฟังก์ชั่นเป็นสมาชิกพิเศษของกรัม เพิ่มif(g.indexOf(g[i])!=-1)ก่อนที่e=จะแก้ไข
Tesserex

3
ฉันไม่มีความคิดแม้แต่น้อยเกี่ยวกับวิธีการทำงาน ... เราจะขอคำอธิบายได้ไหม?
Spedwards

1
การใช้with(f.split(g[i]))f=join(pop())ในfor..inลูปจะบันทึกไบต์
Oki

2
@Spedwards น่าจะทำกับโปรแกรมนี้ได้จาก js1k js1k.com/2012-love/demo/1189
Oki

21

C # 879 816 789 ตัวอักษร

ความพยายามครั้งแรกที่ CodeGolf นั้นไม่ใช่ผู้ชนะแน่นอนว่ามันใช้ได้แม้จะมีความน่ารังเกียจ

string e="N£give, n£give",f="(Give ! up)",g="(Ooh)",h=@"I just wanna tell ! how I'm feeling
Gotta make ! understand",i="(Ooh, give ! up)",j="N£",k=@"We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it",l="",a=String.Join("\n"+j,l,"give ! up","let ! down","run around and desert !","make ! cry","say goodbye","tell a lie and hurt !"),b=String.Join("\n",@"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy",h,a,l,k,@"And if ! ask me how I'm feeling
Don't tell me !'re too blind to see",a,a,l,i,i,g,e,f,g,e,f,l,k,l,h,a,a,a).Replace("!","you").Replace("£","ever gonna ");

2
+1 "ไม่ใช่ผู้ชนะแน่นอน" -> เพียงเพราะคุณใช้ C # คุณเป็นผู้ชนะสำหรับฉันอยู่แล้ว มันเป็นภาษาที่ยอดเยี่ยม! :) BTW: คุณสามารถบันทึกตัวอักษรบางตัวได้โดยการลบช่องว่างรอบ ๆ เครื่องหมายเท่ากับ
Cristian Lupascu

3
นอกจากนี้: แทนสิ่งที่ต้องการvar s1="a";var s2="b";ลองใช้string s1="a",s2="b"; หากคุณมีการประกาศมากกว่า 2 ข้อจะสั้นกว่า
Cristian Lupascu

คุณสามารถกำจัดตัวละครจำนวนมากได้ด้วยการเปิดพื้นที่ว่าง!และนำมันออกไปจากที่อื่น
Stackstuck

17

Python, 597 589 ไบต์

อาจเป็นไปได้ที่จะบีบอีกสองสามไบต์:

d="""ellU wTay it
S otherRConna Qmake4 PveMndL aK'reJingHt's beenFo E gC
(OohB
Youz txKL q know9
N28 how I'm feelH
7iM4 up66)B)8giM, n2giM
(G5 you4
I justTannaxU47Gotta PuLerstaL03eMrQ2

We'M9n eachR for sElongzr hearFKchH butzJxoEshyxEsSInsideTe both9ThaFCoH on
We9xheCameqweJQplS1
8g68let4 down8runKrouLqdesert48Pcry8sayCoodbye8tUK lieqhurt40WeJ nEstrangersxEloMz9xhe rulesqsEdEI
A full commitment'sThat I'mxhinkH ofzTouldn'tCetxhis fromKnyRCuy31AL if4Ksk me7Don'txU me4JxoEbliLxEsee00
B,C6)B,C556)1300"""
for s in'UTSRQPMLKJHFECBzxq9876543210':a,b=d.split(s,1);d=b.replace(s,a)
print d

2
(+1) เยี่ยมมาก BTW ฉันพบ 588 ไบต์โดยไม่ขึ้นบรรทัดใหม่
res

17

BrainFuck - 9905

++++++++++[>+>+++>++++>+++++++>+++++++++>++++++++++>+++++++++++>++++++
+++++>++++++++++++<<<<<<<<<-]>>>>>---.>+.<<<-.>>>>>++++.<<.<<<<++.>>>>
>.+.<<<<<.>>>>>>+.+.--.<<----.>-.<++++++.--.>>.+.<<<<<<.>>>>>>+.<+.<<<
<<.>>>>>---.+++.>++.<<.<<<<<.>>>>++.>>.>-.<<<<<<.>>>>>----.+++.+.>>-.<
<<<<<<.>>>>>>-.<<+++.---.<<<<.>>>>>>--.+++.<---.<.>>--.<<<<<<.>>>>----
.>++.<+++.<<<<.>>>>>>.<+.<<<<<.>>>>.>.<<<<<.>>+++.<<<.>>>--------.<<.>
>>>++.>>++.<---..<<<<<.>>>>---.>+++.--..<++++++.>>-.<.<----.>+.>.<<<<<
.>>>>>-.<<<<<<.>>>>>>>.<<<+++.-------.>>+.<<<<<<.>>++++++++.<.>>>>-.<<
<<<.>>>>>>.<<+++++++.+.>+.---.<.>+++.<--.<<<<.>>>>>+.<-.<<<<<.>>>>.>>.
>+.<<<<<<.>>>>>>>.<<.>.<---.<--.>++.<<<<.>>>>>-.<<<<<<.>>>>+++.--.>>.<
<<<<<.>>>>>>.<<+++.+.>>-.<<<<<<.>>>>---.>>-.<+.--.<<<<<.>>>>-----.>+.>
>++.<<<<<<<.>>>>>+.>++.<<+++++++.---.>>--.<<<<<<.>>>>++.>>+++.>.<<<<<<
<<.>>>.<<.>>>>>-----.>.--.+.<<<<<<.>>>>>>>--.<<<------.>++++..<.<<<<.>
>>>>>.<<++++.>--..<<<<<.>>>>>>>++.<<+++.>+.<<<<<<.>>>>+++.>.>>--.<<<<<
<<.>>.<.>>>>--.<<<<<.>>>>--.-..>-.<++++.>++.<--.<<<<<.>>>--.>>>+.>-..<
<------.<<<<.>>>>>--.<.>--.<++++.<<<<.>>>>>>>++.<<++++.>+.<<<<<<.>>>>>
>.<-.<-.+.>>---.+.+.<<----.>.<+++.<<<<<..>>>+++++++.>>+.>>++.<<.>>----
.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>++++++.++.>>++++.<<----.<<<<.>>>
>>>>.<<+.>-.<<<<<<.>>>>>>.<+.<<<<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++
.>-.-..<------.<<<<.>>>>>--.<++++.>>++.<<<<<<.>>>>>>>.<<+++.>+.<<<<<<.
>>>>-.>.>>--.<<-.<<<<<<.>>>.>>+.>>+.<<.>>----.<<<<<<.>>>>++.>+.-..<---
---.<<<<.>>>>>>.+++.<.<<<<<.>>>>.>>---.<+.>+++.<-.<+++.<<<<.>>>>---.>.
<+++.<<<<.>>>>.+.>>--.<<.>>-.++.<<<<<<.>>>>>>>++.<<+.>+.<<<<<<<.>>>.>>
.>>+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>-.<.>--.<++++.<<<<
.>>>>>>>.<<++++.>+++.<<<<<<.>>>>--.>>---.>.<<<<<<<<.>>>.>>++.>>++++.<<
.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>>+.<<.>>>.<<<<<<<.>>>>+++
+++.>+..<---.--.>>>.<<<+++.<<<<<.>>>.>>.>>+++.<<.>>----.<<<<<<.>>>>++.
>.-..<------.<<<<.>>>>>>++.<<++++.>--..<<<<<.>>>>----.<<<<.>>>>>.<++++
++++.----.<<<<.>>>>----.>++.<+++.<<<<.>>>>++++.>>+.---.++.<<<<<<.>>>>>
>>.<<+.>+.<<<<<<<..>>>>--.>---.<<<.>>>>>+.<<.<<<<.>>>>>----.+++.+.>>--
.<<-.<<<<<.>>>>.----.++.+++++.<<<<.>>>>>+.>--.<<.---.>>--.<<<<<<.>>>>+
.>.>.<<<<<<.>>>>>>+.<.<<<<<.>>>>>---.+++.-.<+.<<<<<.>>>>++.>>+.>++.---
.<<<<<<.>>>>+.---.----.>>.++.<<<<<.>>>>>-.<<<<<<.>>>>+.+++..>-.<<<<<.>
>>>----.++.+++++.+.>.<--.<<<<.>>>>-----.>>++.-.<<<<<<<.>>>>.>>+.>+.<<<
<<.>>>>>---.<<+++.<<<<.>>>>>>++.<..<<<<<.>>>>>>-.<<+++.>>>++.<<<<<<<.>
>>>>>+.<.<<<<<.>>>>>>-.<<-------.>>>.<<<<<<<.>>>>++++++++.>>+.<<<<<<<.
>>>-----.>>>-.>-.<<.-----.+.<<<<.>>>>>>>--.<<<.<<<<.>>>>---.>+.>+.<<++
++++.<<<<.>>>>>----.+++.+.>>.<<<<<<<.>>>>>>>.<<<.-------.>>.<<<<<.>>>>
>-.<<<<<<.>>>>+.+++..>-.<<<<<.>>>>++.>+.<++.>-.<--.<<<<.>>>>>+.-.<<<<<
<.>>>>--.>--.<<<<.>>>>>---.+++.+.>>.<<<<<<<.>>>>>>+.<<+++.---.<<<<.>>>
>++.------.>--.<++++.<<<<.>>>>----.>+.<+++.<<<<.>>>>>>>.<<<+.<<<.>>>>>
--.<<.<<<<.>>>>++.>+.-..<------.<<<<.>>>>>++.----.<.>>>++.<<<<<<<.>>>>
++++++++.>>++.<<<<<<<.>>>--------.>>>++.<-----.<<<<.>>>>+++++.---.<<<<
.>>>>>>>.<<+.>+.<<<<<<.>>>>-----.>>--.<----.<<<<<.>>>>>++.<++++.<<<<.>
>>>+++.>++.>>--.<<<<<<<.>>++++++++.<.>>>>--.<<<<<.>>>>--.-..>-.<++++.>
++.<--.<<<<<.>>>-----.>>>+.-.<<<<.>>>>>+.<<<<<<.>>>>>>.<<--.>--..<<<<<
.>>>>>+.<.<<<<.>>>>>>>++.<<++.>+.<<<<<.>>>>>---.<<.<<<<.>>>>>>++.<..<<
<<<.>>>>---.>---.<+++++++.>++.<-----.<<<<.>>>>>>.<+.<<<<<.>>>>>>-.<<+.
.<<<<<..>>>++++++++++.>>.>>+++.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<
<<.>>>>++++++.++.>>++++.<<----.<<<<.>>>>>>>.<<+.>-.<<<<<<.>>>>>>.<+.<<
<<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++.>-.-..<------.<<<<.>>>>>--.<++
++.>>++.<<<<<<.>>>>>>>.<<+++.>+.<<<<<<.>>>>-.>.>>--.<<-.<<<<<<.>>>.>>+
.>>+.<<.>>----.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>>>.+++.<.<<<<<.>>>
>.>>---.<+.>+++.<-.<+++.<<<<.>>>>---.>.<+++.<<<<.>>>>.+.>>--.<<.>>-.++
.<<<<<<.>>>>>>>++.<<+.>+.<<<<<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++.>.
-..<------.<<<<.>>>>>-.<.>--.<++++.<<<<.>>>>>>>.<<++++.>+++.<<<<<<.>>>
>--.>>---.>.<<<<<<<<.>>>.>>++.>>++++.<<.>>----.<<<<<<.>>>>++.>.-..<---
---.<<<<.>>>>>>+.<<.>>>.<<<<<<<.>>>>++++++.>+..<---.--.>>>.<<<+++.<<<<
<.>>>.>>.>>+++.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>>++.<<++
++.>--..<<<<<.>>>>----.<<<<.>>>>>.<++++++++.----.<<<<.>>>>----.>++.<++
+.<<<<.>>>>++++.>>+.---.++.<<<<<<.>>>>>>>.<<+.>+.<<<<<<<..>>>.>>---.>>
+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>++++++.++.>>++++.<<---
-.<<<<.>>>>>>>.<<+.>-.<<<<<<.>>>>>>.<+.<<<<<<.>>>.>>.>>+.<<.>>----.<<<
<<<.>>>>++.>-.-..<------.<<<<.>>>>>--.<++++.>>++.<<<<<<.>>>>>>>.<<+++.
>+.<<<<<<.>>>>-.>.>>--.<<-.<<<<<<.>>>.>>+.>>+.<<.>>----.<<<<<<.>>>>++.
>+.-..<------.<<<<.>>>>>>.+++.<.<<<<<.>>>>.>>---.<+.>+++.<-.<+++.<<<<.
>>>>---.>.<+++.<<<<.>>>>.+.>>--.<<.>>-.++.<<<<<<.>>>>>>>++.<<+.>+.<<<<
<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>-.<.>--.
<++++.<<<<.>>>>>>>.<<++++.>+++.<<<<<<.>>>>--.>>---.>.<<<<<<<<.>>>.>>++
.>>++++.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>>+.<<.>>>.<<<<<
<<.>>>>++++++.>+..<---.--.>>>.<<<+++.<<<<<.>>>.>>.>>+++.<<.>>----.<<<<
<<.>>>>++.>.-..<------.<<<<.>>>>>>++.<<++++.>--..<<<<<.>>>>----.<<<<.>
>>>>.<++++++++.----.<<<<.>>>>----.>++.<+++.<<<<.>>>>++++.>>+.---.++.<<
<<<<.>>>>>>>.<<+.>+.<<<<<<<..>>+.>+.>>>.<.<<<++++.<.>>>>-.++.>>+.<<---
-.<<<<.>>>>>>>.<<.>-.<<<<<<.>>>>>>.<+.<<<<---.<<.>>-.>.>>>-.<+++.<<<++
++.<.>>>>-.++.>>+.<<----.<<<<.>>>>>>>.<<.>-.<<<<<<.>>>>>>.<+.<<<<---.<
<.>>-.>.>>>-.<+++.<<<+.<<.>>>-.>>---.>>+.<<.>>----.<<<<<<.>>>>++.>.-..
<------.<<<<.>>>>++++++.++.>>++++.<<----.<<<+++.<.>>>>>.<.>>.<<.>>----
.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>++++++.++.>>++++.<<----.<<<<<.>>
----.>-------.>>++++.>>.<<----.<<<<.>>>>>>>.<<+.>-.<<<<<<.>>>>>>.<+.<<
<<+.<<.>>-.>++++++++.>>>-.<+++.<<<+.<<.>>>-.>>---.>>+.<<.>>----.<<<<<<
.>>>>++.>.-..<------.<<<<.>>>>++++++.++.>>++++.<<----.<<<+++.<.>>>>>.<
.>>.<<.>>----.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>++++++.++.>>++++.<<
----.<<<<<.>>----.>-------.>>++++.>>.<<----.<<<<.>>>>>>>.<<+.>-.<<<<<<
.>>>>>>.<+.<<<<+.<<..>>>>.>.<<<--.>>>>>+.<<.<<<<.>>>>>-----.+++.+.>>--
.<<<<<<<.>>>>.----.++.+++++.<<<<.>>>>>.>--.<<.---.>>--.<<<<<<.>>>>+.>.
>.<<<<<<.>>>>>>+.<.<<<<<.>>>>>---.+++.-.<+.<<<<<.>>>>++.>>+.>++.---.<<
<<<<.>>>>+.---.----.>>.++.<<<<<.>>>>>-.<<<<<<.>>>>+.+++..>-.<<<<<.>>>>
----.++.+++++.+.>.<--.<<<<.>>>>-----.>>++.-.<<<<<<<.>>>>.>>+.>+.<<<<<.
>>>>>---.<<+++.<<<<.>>>>>>++.<..<<<<<.>>>>>>-.<<+++.>>>++.<<<<<<<.>>>>
>>+.<.<<<<<.>>>>>>-.<<-------.>>>.<<<<<<<.>>>>++++++++.>>+.<<<<<<<.>>>
++.>>>-.>-.<<.-----.+.<<<<.>>>>>>>--.<<<.<<<<.>>>>---.>+.>+.<<++++++.<
<<<.>>>>>----.+++.+.>>.<<<<<<<.>>>>>>>.<<<.-------.>>.<<<<<.>>>>>-.<<<
<<<.>>>>+.+++..>-.<<<<<.>>>>++.>+.<++.>-.<--.<<<<.>>>>>+.-.<<<<<<.>>>>
--.>--.<<<<.>>>>>---.+++.+.>>.<<<<<<<.>>>>>>+.<<+++.---.<<<<.>>>>++.--
----.>--.<++++.<<<<.>>>>----.>+.<+++.<<<<.>>>>>>>.<<<+.<<<.>>>>>--.<<.
<<<<.>>>>++.>+.-..<------.<<<<.>>>>>++.----.<.>>>++.<<<<<<<.>>>>++++++
++.>>++.<<<<<<<..>>>.<<.>>>>>--.>+.--.+.<<<<<<.>>>>>>>--.<<<--------.>
++++..<.<<<<.>>>>>>.<<++++.>--..<<<<<.>>>>>>>++.<<+++.>+.<<<<<<.>>>>++
+.>.>>--.<<<<<<<.>>.<.>>>>--.<<<<<.>>>>--.-..>-.<++++.>++.<--.<<<<<.>>
>--.>>>+.>-..<<------.<<<<.>>>>>--.<.>--.<++++.<<<<.>>>>>>>++.<<++++.>
+.<<<<<<.>>>>>>.<-.<-.+.>>---.+.+.<<----.>.<+++.<<<<<..>>>+++++++.>>+.
>>++.<<.>>----.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>++++++.++.>>++++.<
<----.<<<<.>>>>>>>.<<+.>-.<<<<<<.>>>>>>.<+.<<<<<<.>>>.>>.>>+.<<.>>----
.<<<<<<.>>>>++.>-.-..<------.<<<<.>>>>>--.<++++.>>++.<<<<<<.>>>>>>>.<<
+++.>+.<<<<<<.>>>>-.>.>>--.<<-.<<<<<<.>>>.>>+.>>+.<<.>>----.<<<<<<.>>>
>++.>+.-..<------.<<<<.>>>>>>.+++.<.<<<<<.>>>>.>>---.<+.>+++.<-.<+++.<
<<<.>>>>---.>.<+++.<<<<.>>>>.+.>>--.<<.>>-.++.<<<<<<.>>>>>>>++.<<+.>+.
<<<<<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>-.<.
>--.<++++.<<<<.>>>>>>>.<<++++.>+++.<<<<<<.>>>>--.>>---.>.<<<<<<<<.>>>.
>>++.>>++++.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>>+.<<.>>>.<
<<<<<<.>>>>++++++.>+..<---.--.>>>.<<<+++.<<<<<.>>>.>>.>>+++.<<.>>----.
<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>>++.<<++++.>--..<<<<<.>>>>----.<<
<<.>>>>>.<++++++++.----.<<<<.>>>>----.>++.<+++.<<<<.>>>>++++.>>+.---.+
+.<<<<<<.>>>>>>>.<<+.>+.<<<<<<<..>>>.>>---.>>+.<<.>>----.<<<<<<.>>>>++
.>.-..<------.<<<<.>>>>++++++.++.>>++++.<<----.<<<<.>>>>>>>.<<+.>-.<<<
<<<.>>>>>>.<+.<<<<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++.>-.-..<------.
<<<<.>>>>>--.<++++.>>++.<<<<<<.>>>>>>>.<<+++.>+.<<<<<<.>>>>-.>.>>--.<<
-.<<<<<<.>>>.>>+.>>+.<<.>>----.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>>>
.+++.<.<<<<<.>>>>.>>---.<+.>+++.<-.<+++.<<<<.>>>>---.>.<+++.<<<<.>>>>.
+.>>--.<<.>>-.++.<<<<<<.>>>>>>>++.<<+.>+.<<<<<<<.>>>.>>.>>+.<<.>>----.
<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>-.<.>--.<++++.<<<<.>>>>>>>.<<++++
.>+++.<<<<<<.>>>>--.>>---.>.<<<<<<<<.>>>.>>++.>>++++.<<.>>----.<<<<<<.
>>>>++.>.-..<------.<<<<.>>>>>>+.<<.>>>.<<<<<<<.>>>>++++++.>+..<---.--
.>>>.<<<+++.<<<<<.>>>.>>.>>+++.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<
<<.>>>>>>++.<<++++.>--..<<<<<.>>>>----.<<<<.>>>>>.<++++++++.----.<<<<.
>>>>----.>++.<+++.<<<<.>>>>++++.>>+.---.++.<<<<<<.>>>>>>>.<<+.>+.<<<<<
<<..>>>.>>---.>>+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>++++++
.++.>>++++.<<----.<<<<.>>>>>>>.<<+.>-.<<<<<<.>>>>>>.<+.<<<<<<.>>>.>>.>
>+.<<.>>----.<<<<<<.>>>>++.>-.-..<------.<<<<.>>>>>--.<++++.>>++.<<<<<
<.>>>>>>>.<<+++.>+.<<<<<<.>>>>-.>.>>--.<<-.<<<<<<.>>>.>>+.>>+.<<.>>---
-.<<<<<<.>>>>++.>+.-..<------.<<<<.>>>>>>.+++.<.<<<<<.>>>>.>>---.<+.>+
++.<-.<+++.<<<<.>>>>---.>.<+++.<<<<.>>>>.+.>>--.<<.>>-.++.<<<<<<.>>>>>
>>++.<<+.>+.<<<<<<<.>>>.>>.>>+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<
<<.>>>>>-.<.>--.<++++.<<<<.>>>>>>>.<<++++.>+++.<<<<<<.>>>>--.>>---.>.<
<<<<<<<.>>>.>>++.>>++++.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>
>>+.<<.>>>.<<<<<<<.>>>>++++++.>+..<---.--.>>>.<<<+++.<<<<<.>>>.>>.>>++
+.<<.>>----.<<<<<<.>>>>++.>.-..<------.<<<<.>>>>>>++.<<++++.>--..<<<<<
.>>>>----.<<<<.>>>>>.<++++++++.----.<<<<.>>>>----.>++.<+++.<<<<.>>>>++
++.>>+.---.++.<<<<<<.>>>>>>>.<<+.>+.

ค่อนข้างแน่ใจว่าฉันสามารถรับได้ดีขึ้นเล็กน้อยโดยการปรับจูน แต่ตอนนี้ค่อนข้างดีสำหรับตอนนี้ สมมติว่าคุณไม่มีปัญหากับเรื่องนี้มากไปกว่าข้อความต้นฉบับ


ฉันคิดว่าคุณสามารถเล่นกอล์ฟได้เล็กน้อยโดยใช้ Unary แทน
Roman Gräf

ดูเหมือนว่าจะเล่นได้ ...
MilkyWay90

16

สกาลา 613 ไบต์

print(("""We'r%e %n&o &strangers9 t&9lo#ve#4
You47 know7 [th[%rules0 aZndZ 0s&d&I
A full commitment's what1 I'm 1[ink=ing= of4 wouldn't get [is from any! o[er !guy>
I just wanna <tell<]- ]you-3 how1feel=
3Gotta _make]_uZerstaZ@>
.
Ne#r$./$ gonna /g2i#]up2$let]down$run arouZ0desert-$_cry$say goodbye$< a lie0hurt-@?

We'#7n each!for s&long4r hear;t's been ;ach= but4:'r%to&:shy9say8 it
8Insid%w%bo[7 wha;going on
We7 [%game0we're/play8?AZ if]ask me3Don't < me-:bliZ9see@@

5(Ooh, g2)
556(Ooh)$gi#, ne#r/gi#^
6(G2)^^?>@@
"""/:("!#$%&Z[]^_"++('-'to'@'))){(x,c)=>val y=x.split(c);y(0)+y(1)+y.drop(2).mkString(y(1))}

นี่เป็นอัลกอริธึมการคลายการบีบอัดข้อความโดยใช้กฎที่~stuff~ blah ~ ~ควรแปลงซ้ำstuff blah stuff stuffเป็นครั้งแรก (เช่นครั้งแรกที่คุณเห็นคู่สัญลักษณ์ที่ไม่คุ้นเคย

หมายเหตุ: อาจมีการรับคืนรถพิเศษในตอนท้ายทั้งนี้ขึ้นอยู่กับวิธีการนับของคุณ หากสิ่งนี้ไม่ได้รับอนุญาตคุณสามารถวางอันสุดท้ายในเครื่องหมายคำพูด (บันทึกหนึ่งตัวอักษร) และเปลี่ยนการแยกเป็นsplit(" ",-1)(ใช้จ่าย 3 ตัวอักษร) สำหรับ 615 ไบต์


ดีมาก. การบีบอัดเล็กน้อยดีกว่าวิธีการแก้ปัญหาของฉัน - สำหรับNการเกิดซ้ำของความยาวLคุณสามารถใช้ตัวอักษรในขณะที่ผมใช้L+N+1 L+N+2แต่รหัสการบีบอัดของคุณคือ 102 ตัวอักษรในขณะที่ฉันเป็น 40
ugoren

@ugoren - แน่นอน; สกาล่านั้นละเอียดเกินไปในเรื่องนั้นและไม่มีการทดแทนที่มีประสิทธิผลมากกว่า> 62 ถึงกระนั้นฉันคิดว่านี่เป็นวิธีการที่น่าสนใจ
Rex Kerr

น่าสนใจ แต่ไม่ได้ผลสำหรับฉันใน REPL ความต้องการของอีกรอบปิด parens ในที่สุด; แต่มันก็ใช้งานได้
ผู้ใช้ที่ไม่รู้จัก

14

589, C (ฟังก์ชันไลบรารีเท่านั้นคือ putchar)

c,k;main(n){char*s="&-P;nDstrKgQsLlove>@rules<sDdD-i7Rfull commitUnMVtASTkEof> wWldNget Sis from Ky?guy10-XifYask U6doNF U5OblTdLseeG//G442201//&383letYdown3run arWnd<desQt53Bcry3sZ[odbye3F Rlie<hurt5G&7P've:n each?for sDlong>r hear=achEbut>OshyLsH7Tside P boS: V=[Eon7P@gaU<P;CplHG&7i just wKnRF56[ttRBundQstKdG/&J)3I, 9IG(-8)G&79&J, 8)G& yW& howAfeelTg7&G-&IYup&nevQ C& know&'re & X&Mbeen &7yW& oSQ &: Se & -i'm &makeY&[nnR&o &Tg &tell&\n&Zit&give&(-ooh&an& tD&t's &n't &;toD&we&er&a &th&in&me&wha&ou&Kd &5 &ay &go";for(k|=32*!n;c=*s++;c-38?n?0:c-45>48U?k=!putchar(c-k):main(c-45):n--);}
  • ตารางกฎการแทนที่ที่อักขระในช่วง -.._ (45..90) ระบุกฎที่จะใช้ดังนั้นจึงมีกฎ 48 ข้อ (45, c-45> U48 เป็นรหัส) อักขระอื่น ๆ จะถูกพิมพ์

  • กฎถูกคั่นด้วยอักขระ '&' (38 ในโค้ด, n จะลดลงจนเป็นศูนย์และทำให้ชี้ไปที่กฎที่ถูกต้อง)

  • กฎ 0 บ่งชี้ว่าอักขระตัวถัดไปควรเป็นตัวพิมพ์ใหญ่ (โดยการตั้งค่า k = 32 ในโค้ด) สิ่งนี้ทำให้มีพื้นที่ว่างมากขึ้นเพื่อเพิ่มช่วงของอักขระต่อเนื่องที่ใหญ่ขึ้นสำหรับกฎ

  • main (.. ) ถูกเรียกด้วย 1 (ตามศูนย์อาร์กิวเมนต์โปรแกรมแบบ C) และดังนั้นกฎ 1 คือกฎรูท

วิวัฒนาการของรหัส

  • ลดการโกนอีก 9 ไบต์ด้วยคำแนะนำของ ugoren

  • ลดขนาดอีก 36 ไบต์ด้วยการสร้างอัลกอริธึมแทนที่จะเป็นแบบใช้มือและใช้ปลาย "" "

  • โกนอีก 15 ไบต์ด้วยการเปลี่ยนตารางจากถ่าน * [] เป็นสตริงเดียวโดยที่ '&' คั่นส่วนต่างๆ

  • ยังโกนได้อีก 19 ไบต์ขอบคุณคำแนะนำเพิ่มเติมจาก ugoren

  • โกน 31 ไบต์ด้วยการเพิ่มกฎเพิ่มเติมสร้างกฎพิเศษเพื่อใช้ประโยชน์ให้มีพื้นที่มากขึ้นสำหรับดัชนีกฎ

  • โกน 10 ไบต์ด้วยเคล็ดลับเพิ่มเติมจากแรงกระตุ้นและกฎการปรับแต่งเล็กน้อย


1
*p>>4^3?putchar(*p):e(r[*p-48])
ugoren

ah! ขอบคุณตอนนี้รวมอยู่ในรหัส
baby-rabbit

นอกจากนี้การ"\'"แปลไม่จำเป็นต้องใช้ "We're"เป็นสตริงที่ถูกต้อง ingเป็นผู้สมัครที่ดีกว่า
ugoren

เป็นการเปลี่ยนแปลงที่ดี หลายเทคนิคการเล่นกอล์ฟมาตรฐานสามารถนำไปใช้: ->d(int n) d(n)เปลี่ยน*s=='~'ไป*s-'~' and reverse the ? , also saving parenthesis around ! n .. : 0 . Using 126 instead of '~' `ไม่มีประโยชน์ แต่ทำไม~?
ugoren

นอกจากนี้คุณไม่จำเป็นต้องใช้สองฟังก์ชั่น - ทำmainซ้ำ โทรเริ่มต้นเป็นmain(1)แทนd(0)แต่ก็สามารถจัดการกับ (อาจจะเป็นผู้นำ~ในs) นอกจากนี้ทางเลือกที่ดีที่สุด~คือแท็บ (ascii 9 - หลักเดียว)
ugoren

14

Perl, 724 714 883 ไบต์

ดังนั้นการเปลี่ยนแปลงกฎที่ลงโทษการใช้ Latin-1 ชนิดที่ฆ่าโซลูชั่นของฉัน มันเป็นวิธีที่แตกต่างกันมากพอที่ฉันเกลียดที่จะลบมันดังนั้นนี่เป็นรุ่นที่ จำกัด ที่ใช้เพียง ASCII 7 บิตตามกฎใหม่ที่เพิ่มขึ้นอย่างมาก

sub d{($d=$d{$_})?d(@$d):print for@_}sub r{%d=map{chr,($d=pop)&&[$d,pop]}0..96,113..127;&d}r"We^P nEstraKersPElo~^_-SP< 5lesMsEdEI
A3ull commitment's#hat I'mPhink9 of^_#}ldn't^?/Phis3romVny %<r^?uy
I just#azP6UhS I'm3eH9
G%ta +JTerstaT^HX5^D    1^@^U^F^CXt^E^Y^X

We'~-; each %<r3or sEloK^_r <aL's=ee8ch9=ut^_^PPoEshyPE& it
Insi.#e=%h-S#hat's=een|9 on
We-SP<^?am7we^Px pl? it
ARif]Vsk me hS I'm3eH9
Don'tP6 me]^PPoEb*RtE1e^HX5^D   1^@^U^F^CXt^E^Y^X^HX5^D 1^@^U^F^CXt^E^Y^X

(Ooh,FB)
(Ooh,FB)
(Ooh)4, n^F
(GQB)
(Ooh)4, n^F
(GQB)

We'~-; each %<r3or sEloK^_r <aL's=ee8ch9=ut^_^PPoEshyPE& it
Insi.#e=%h-S#hat's=een|9 on
We-SP<^?am7we^Px pl? it

I just#azP6UhS I'm3eH9
G%ta +JTerstaT^HX5^D    1^@^U^F^CXt^E^Y^X^HX5^D 1^@^U^F^CXt^E^Y^X^HX5^D 1^@^U^F^CXt^E^Y^X
g evuoo^?nna{0z|000000xry q~_e}`0^N[
0 Z0a  ]dnwo T~it 00RVtrgnuU0le0Q^? o0]LpJ00yaamb ehnSekKiVnMelHurFZf k es0teedn20:>il000?sto0w 0}Y0!
+XXy}rB4Cu7*^ZhdUr'|&bdMT^[
U^^e^V^QC^W/X^R;^N^Ll0.^S^K^MV6^To ^G^\8ey^]r^Bc^A^O"=~/./gs

แน่นอนว่าอักขระควบคุมยังคงอยู่ที่นี่ดังนั้นคุณจะยังต้องการใช้การเข้ารหัสแบบ 64:

c3ViIGR7KCRkPSRkeyRffSk/ZChAJGQpOnByaW50IGZvckBffXN1YiByeyVkPW1hcHtjaHIsKCRk
PXBvcCkmJlskZCxwb3BdfTAuLjk2LDExMy4uMTI3OyZkfXIiV2UQIG5Fc3RyYUtlcnNQRWxvfh8t
U1A8IDVsZXNNc0VkRUkKQTN1bGwgY29tbWl0bWVudCdzI2hhdCBJJ21QaGluazkgb2YfI31sZG4n
dH8vUGhpczNyb21WbnkgJTxyf3V5CkkganVzdCNhelA2VWhTIEknbTNlSDkKRyV0YSArSlRlcnN0
YVQIWDUECTEAFQYDWHQFGRgKCldlJ34tOyBlYWNoICU8cjNvciBzRWxvSx9yIDxhTCdzPWVlOGNo
OT11dB8QUG9Fc2h5UEUmIGl0Ckluc2kuI2U9JWgtUyNoYXQncz1lZW58OSBvbgpXZS1TUDx/YW03
d2UQeCBwbD8gaXQKQVJpZl1Wc2sgbWUgaFMgSSdtM2VIOQpEb24ndFA2IG1lXRBQb0ViKlJ0RTFl
CFg1BAkxABUGA1h0BRkYCFg1BAkxABUGA1h0BRkYCgooT29oLEZCKQooT29oLEZCKQooT29oKTQs
IG5eRgooR1FCKQooT29oKTQsIG5eRgooR1FCKQoKV2Unfi07IGVhY2ggJTxyM29yIHNFbG9LH3Ig
PGFMJ3M9ZWU4Y2g5PXV0HxBQb0VzaHlQRSYgaXQKSW5zaS4jZT0laC1TI2hhdCdzPWVlbnw5IG9u
CldlLVNQPH9hbTd3ZRB4IHBsPyBpdAoKSSBqdXN0I2F6UDZVaFMgSSdtM2VIOQpHJXRhICtKVGVy
c3RhVAhYNQQJMQAVBgNYdAUZGAhYNQQJMQAVBgNYdAUZGAhYNQQJMQAVBgNYdAUZGApnIGV2dW9v
f25uYXswenwwMDAwMDB4cnkgcX5fZX1gMF5OWwowIFowYSAgXWRud28gVH5pdCAwMFJWdHJnbnVV
MGxlMFF/IG8wXUxwSjAweWFhbWIgZWhuU2VrS2lWbk1lbEh1ckZaZiBrIGVzMHRlZWRuMjA6Pmls
MDAwP3N0bzB3IDB9WTAhCitYWHl9ckI0Q3U3KhpoZFVyJ3wmYmRNVBsKVR5lFhFDFy9YEjsODGww
LhMLDVY2FG8gBxw4ZXkdcgJjAQ8iPX4vLi9ncw==

เพราะฉันคิดว่ามันควรจะยังคงปรากฏให้เห็นแม้จะเป็น DQ ก็ตามนี่เป็นคำตอบดั้งเดิม:

sub d{($d=$d{$_})?d(@$d):print for@_}sub r{%d=map{chr,[pop,pop]}45..63,122..255;&d}r" ¯:ç5raâ08/þ; Ölesì|dçI
AÌull comm°6ntŒ3èhink1fÍýldn'tÿÙèhisÌromðny4ÿuy ju5Íaú=î9GÐ Ëäï0ï
'þœn ea}4Ìo|/â-aêÔ}ÜÚut.shy8ÎnsiÞÍeÚÐhœ3nü1n;ÿamÓwe¯ù plá
Aíifôðsk 6 9Don't= 6ô.bÕítçÏe
,ã2,ã2)Û,:õã¶Gé2)Û,:õã¶Gé
'þœ ea}4Ìo|/â-aêÔ}ÜÚut.shy8ÎnsiÞÍeÚÐhœ3nü1n;ÿamÓwe¯ù plá
 ju5Íaú=î9GÐ Ëäï0ï
g evuooÿnnaûúürþýyøeùö÷ N
õó òa dn ô ïíðwotrþit  oleôêuîéÿgnyalæpäedkaâiãòb teënØkurilðnìeeheÝtoesásw f ÑmÖñY
r'bdhÓÏÞÕ tñìïñåîÙëdÎñ× s'oüyrÁÅeyÄð(

åÞŸºrÔlñtieÈàŽý²Æ·Â­¬®Ë¹À±šßÊnuª¥Çcîµ€£©eW³¡«»¢ýÉŠ¿§ÛoOI
° I )ßee¶ rhm'Úat 
oèÜæçŒrÒÐtaÒèëo hcçseÌ
hz{àèreœn >?çèhÍemts 7~Üs<ol¯Ò"=~/./gs

การเข้ารหัส base64 ของสคริปต์:

c3ViIGR7KCRkPSRkeyRffSk/ZChAJGQpOnByaW50IGZvckBffXN1YiByeyVkPW1hcHtjaHIsW3Bv
cCxwb3BdfTQ1Li42MywxMjIuLjI1NTsmZH1yIqCvOuc1cmHiMDgv/ps7INZsZXPsfGTnSQpBzHVs
bCBjb21tsDZudLwzjOhoaW5rMWabzf1sZG4ndP/Z6Ghpc8xyb23wbnk0/3V5lSBqdTXNYfo97jlH
0Iogy+TvMIrvCpeJJ/69biBlYX00zG+PfC/imy1h6oXUfdzadXSbLnNoeTjOlJVuc2nezWXa0Gi9
M4Vu/DFuiTv/YW3Td2Wv+SBwbOGUCkHtaWb08HNrIDYgOURvbid0PSA29C5i1e10589lCn+OLOMy
LOMyKdssOvXjtkfpMinbLDr147ZH6ZIKiSf+vSBlYX00zG+PfC/imy1h6oXUfdzadXSbLnNoeTjO
lJVuc2nezWXa0Gi9M4Vu/DFuiTv/YW3Td2Wv+SBwbOGUCpUganU1zWH6Pe45R9CKIMvk7zCK7wp/
l2cgZXZ1b2//bm5h+/r8cv79efhl+fb3IE4K9fMg8mEgZG4g9CDv7fB3b3Ry/ml0ICBvbGX06nXu
6f9nbnlhbOZw5GVka2HiaePyYiB0Zetu2Gt1cmls8G7sZWVoZd10b2Vz4XN3IGYg0W3W8VkKcidi
ZGjTz97VIHTx7O/x5e7Z62TO8dcgcydv/HlywcVlecTwKAoK5cO4vrpy1GzxdGllyOC0/bLGt8Kt
rK7LucCxqN/KbnWqpcdj7rWko6llV7Ohn6u7nqKd/cmmv5yap9uZmG9PSQqwIEkgKd9lZZa2IHJo
kG0njZOR2mF0oApv6Nzm54iLvHLShNB0YdLojOuXl28gaGPnc2XMCoeAaHp74OhyZYG9biA+P+fo
aM1lbXRzgyCCN46SftxzPG9shq/SjyI9fi8uL2dz

1
@ w0lf มีขนาด 724 ไบต์ซึ่งแปลเป็น 644 UTF-8 อักขระ ฉันไม่แน่ใจว่าอันไหนสำคัญจริง ๆ
พหุนาม

1
@ Polynomial ฉันไม่รู้เหมือนกัน แต่หวังว่าจะมีใครบางคนรู้และให้ความกระจ่างแก่เรา
Cristian Lupascu

5
ในกรณีนี้ฉันคิดว่าควรเป็นไบต์เพราะนั่นคือสิ่งที่สตริงประกอบด้วย (มันเป็นเรื่องบังเอิญโดยแท้ ๆ ถ้า bytestream นั้นประกอบไปด้วยลำดับ UTF-8 ที่ถูกต้องทั้งหมด)
breadbox

11
ดูเหมือนว่าจะสามารถอ่านได้มากกว่าสคริปต์ Perl โดยเฉลี่ย!
Agos

2
(คุณรู้ว่าฉันจะไม่บ่นถ้า APL ถูกพิการโดยต้องนับไบต์แทนตัวอักษร .... )
4256

11

Python 781 731 605 579 Chars

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

แก้ไข: ขอบคุณคำแนะนำของ Ed H สับ 2 ตัวเพื่อไปต่อฉันอาจต้องปรับโครงสร้างสิ่งต่าง ๆ มากมายที่นี่ซึ่งจะต้องใช้เวลา

s="e |nd|-We| a|-(Ooh|N| what|ive| go|ay it-|I|er|G|o |make5 |D| th| othH |A| tF|ing |nna |tell|'s been|'rS|-You|-N4| know|L5 up|PR | you|evHK>| how I'm feeling-|O, g7)|O)9gL, n4gL-(G7)|-I just wa>=53Gotta EuRHstaR-.|Q've8n eachBfor sFlong:r heart<Pch?but:;toFshy@sJInsidSwSboth8M<K?onQ8CSgame6we;go>plJ|9g79let5 down9runProuR6desHt59Ecry9sayKodbye9=P lie6hurt5-|\n|Q;nFstrangHs@love:8CSrules6sFdFI-A full commitment'sM I'mCink?of: wouldn't getCis fromPnyBguy0/AR if5Psk me3Don't = me5;toFbliR@see-..2211-/0..";i=83
exec"x,s=s.split('|',1);s=s.replace(chr(i),x);i-=1"*39
print s

หลังจากครั้งแรกที่ฉันสร้างสตริงด้วยตนเอง (น่าเบื่อมาก) ฉันเขียนฟังก์ชั่นซ้ำเพื่อหารูปแบบการแทนที่ซึ่งเป็นผลกำไรมากที่สุด (ในขั้นตอนนั้น) ซึ่งให้วิธีแก้ปัญหาให้ฉัน แต่มันกลับกลายเป็นการเพิ่มขนาด 10 ตัวอักษร

ดังนั้นฉันจึงทำให้อัลกอริทึมของฉันโลภน้อยลงแทนที่จะทำอันดับสุดท้ายเฉพาะใน 'ตัวอักษรลดลง' จัดอันดับในฟังก์ชั่นของ 'ตัวอักษรลดลง', 'ความยาวของรูปแบบ' และ 'จำนวนรูปแบบ'

รูปแบบความยาว = ความยาวนับ = นับ

rank = [(length-1)*count - length - 2] + lengthWeight * length + countWeight * count

แล้วผมถามแล็ปท็อปที่ไม่ดีของฉันทำงานเพียบกำหนดค่าสุ่มlengthWeightและcountWeightและได้รับการบีบอัดขนาดสุดท้ายที่แตกต่างกันและจัดเก็บข้อมูลสำหรับการบีบอัดขนาดต่ำสุดในแฟ้ม

ในครึ่งชั่วโมงหรือมากกว่านั้นมันเกิดขึ้นกับสตริงข้างต้น (ฉันพยายามที่จะคนจรจัดกับมันต่อไปเพื่อดูว่าฉันสามารถย่อรหัส) และมันจะไม่ลดลงฉันเดาว่าฉันไม่มีอะไรที่นี่

นี่คือรหัสของฉันมันmax_patternช้ามาก (หมายเหตุ: รหัสแตกสตริงคล้ายกับแบบฟอร์มในโซลูชันรุ่นก่อนหน้าของฉันฉันทำงานด้วยตนเองเพื่อรับแบบฟอร์มปัจจุบันด้วยตนเองฉันหมายถึงด้วยตนเองในเปลือกงูหลาม)

import itertools

global pretty
global split
split = False
pretty = False

# try to keep as much visibility as possible
def prefrange():
    return range(32,127) +  ([] if pretty else ([10, 9, 13] + [x for x in range(32) if x not in (10, 9, 13)] + [127]))

def asciichr():
    return [chr(x) for x in prefrange()]

def max_pattern(s, o, lenw, numw):
    l = len(s)
    patts = []
    for c in range(l/2+1,1,-1):
        allsub = [s[i:i+c] for i in range(0, l, c)]
        subcounts = [[a, s.count(a)] for a in allsub if len(a) == c]
        repeats = [(x, y, ((c-o)*y - o*2 - c)) for x, y in subcounts if y > 1]
        ranks = [(x, y, (z + lenw*c + numw*y)) for x,y,z in repeats if z > 0]
        patts = patts + ranks
    try:
        return sorted(patts, key=lambda k: -k[2])[0]
    except:
        return None

def sep():
    return '~~' if pretty else chr(127) + chr(127)

def newcharacter(s):
    doable = [x for x in asciichr() if x not in s]
    if len(doable) == 0:
        doable = list(set(x+y for x in asciichr() for y in asciichr() if x+y not in s and x+y != sep()))
        if len(doable) == 0:
            return None
    return doable[0]

def joined(s, l):
    one = [x for x in l if len(x)==1]
    two = [x for x in l if len(x)==2]
    return ''.join(reversed(two)) + sep() + ''.join(reversed(one)) + sep() + s

def compress(s, l=[], lenw=0, numw=0):
    newchr = newcharacter(s)
    if newchr == None:
        if not l:
            return s
        return joined(s,l)
    else:
        ptn = max_pattern(s, len(newchr), lenw, numw)
        if ptn == None:
            if not l:
                return s
            return joined(s, l)
        s = s.replace(ptn[0], newchr)
        s = ptn[0] + newchr + s
        l.append(newchr)
        return compress(s, l, lenw, numw)

def decompress(s):
    lst2, lst, s = s.split(sep(),2)
    li = [lst2[i:i+2] for i in xrange(0, len(lst2), 2)]+list(lst)
    for c in li:
        x, s = s.split(c, 1)
        s = s.replace(c, x)
    return s


def test(times):
    import random
    rnd = random.random
    tested = {(1001, 1001): (10000, 10, False),}
    org = open('text').read()
    minfound = 1000
    for i in xrange(times):
        l,n = 1001,1001
        while (l,n) in tested:
            # i guess this would be random enough    
            xr = lambda: random.choice((rnd(), rnd()+rnd(), rnd()-rnd(), rnd()*random.choice((10,100,1000)), -1*rnd()*random.choice((10,100,1000)),))
            n = xr()
            l = xr()
        sm = compress(org, l=[], lenw=l, numw=n)
        try:
            dc = decompress(sm)
        except:
            tested[l,n] = (len(sm), len(sm)/float(len(org)), 'err')
            continue
        tested[l,n] = (len(sm), len(sm)/float(len(org)), dc==org)

        if len(sm) < minfound:
            minfound = len(sm)
            open('min.txt','a').write(repr(tested[l,n])+'\n')
            print '~~~~~~~!!!!!!! New Minimum !!!!!!!~~~~'
    return tested

if __name__ == '__main__':
    import sys
    split = False
    try:
        if sys.argv[2] == 'p':
            pretty = True
    except:
        pretty = False
    org = open(sys.argv[1]).read()
    try:
        l=float(sys.argv[3])
        n=float(sys.argv[4])
    except:
        l,n=0,0
    sm = compress(org,lenw=l,numw=n)
    print 'COMPRESSED -->'
    print sm, len(sm)
    #open('new.py','w').write(sm)
    print len(sm)/float(len(org))
    print 'TRYING TO REVERT -->'
    dc = decompress(sm)
    #print dc
    print dc==org

1. ตัวแปรพิเศษสำหรับการ\nจะเสียค่าใช้จ่าย 5 ตัวอักษรและบันทึก 9. 2. in (g,l..)พื้นที่พิเศษใน 3. join(..)ทำงานเช่นเดียวกับjoin([..])(อย่างน้อยใน 2.7)
ugoren

126 ตัวอักษรน้อยลงมันสนุกมาก
Optimus

ดูเหมือนว่าโปรแกรมของคุณจะมีความยาวเพียง587ไบต์ (การจัดรูปแบบ unix) - คำตอบน้อยกว่า 588 คำตอบที่น้อยกว่า 588
res

ขอบคุณสำหรับการชี้ให้เห็นจริง ๆ แล้วเสียงเรียกของฉันเพิ่ม endline ไปยังจุดสิ้นสุดของไฟล์หลาม
Optimus

ฉันได้เพิ่มข้อมูลบางอย่างเกี่ยวกับวิธีการแก้ปัญหาของฉันฉันต้องทำสิ่งผิดปกติที่ไหนสักแห่งขั้นต่ำติดอยู่ในบางจุด แต่เห็นได้ชัดว่าเอ็ด H ทำได้ดีกว่าดังนั้นจึงมีขอบเขตในการปรับปรุง
Optimus

11

Malbolge, 12735 ไบต์

D'`N^?o!6}{FW1gSSR2PO)oo98[H('3}C#"?xwO*)L[Zp6WVlqpih.lkjihgI&^F\a`Y^W{[ZYX:Pt7SRQPOHGkK-CHA@d>C<;:9>=6Z:9876v43,+Op.',%*#G'&}$#"y?}_uts9qvo5sUTpong-NMib(fedFEa`_X|\[T<RQVOsSRQP2HlLKJCgAFE>=aA@">76;:9870Tu-2+*)Mn,+*#"!Efe{z!x>|utyxwpo5Vlqpih.fed*ba`&^c\[`Y}@\[TSXQuUTMLQPOHl/EDIHAeED=BA@?8\<|438765.R,r*)(L,+$j"'~D${c!x>_uzyrq7XWsl2ponmfN+LKgf_^c\"Z_^]VzZYX:VOsSRQ3IHGk.JCBAeEDCB;:9]~<5Yzy705432+0/(L,l$H('&feB"yxw={zsxq7Xnsrkjoh.lkdiba'eGcba`Y}@VUySXQPONMqQ3IHlLEJIBA@d'=BA:?87[;:z870T4-2+O/.'&JIj"'&}Cd"!x>|uzyxqpo5slk10nPf,jLKa'_dcb[!_X@VzZ<XQPOsSRQJImMFEJCBAeED=<;_?>=6|:32V05432+0)M-&+*#Gh~}|Bc!x>_{tyr8vutsrTpoh.lkjihgI&^F\[`_X|VUZSRWVOs6LQJImGLEJIBAeED&B;_?!=654X87wv4-Q1qp('&Jk)"!&}C#zb~wv{t:[qpotsrk1oQPlkd*hgfe^]#aZB^]V[ZSwWP8TSLpJ2NGkE-IBA@dDCBA:^!~654Xy705.-Q1*/.'&%Ij('&}C#"!~}|ut:[wvonm3qpongO,jLKa'eGc\[!_A@VzZYX:Pt7SRQPImM/KJIBAe?'=<;_9>=<5492V6/43,P0/('&+*#G'&feBzb~}|uts9wYXn4rqpoQPlkd*hJIe^$ba`Y}WV[Tx;:PONrLKJONGkE-IBAe(D=<A@?>7[;{z810/S-,+0/('&J$j(!E}|#z!x>|{t:xqYo5slTpingf,jLba`&^Fb[`_X|\UTx;WPUTMqQPO1GkE-IBA@dD=B;:?8\<;4981U5432+*)Mn,%Ij('~}|Bc!x}|ut:9wYunmrk1onmfN+LKa'edFEa`_X|?Uyx;WPUTMqQ3ONMFjJIHA@d'CB;:?8\6|:32V65ut,P0po'&+$#(!E%|#"y?w|{tyr8vutsrTpoh.lkjihgI&^F\[`_X|VUZSRWVOsS5QPIHGkEJIHAed>&<`@9>=<;4X876/.3210)(Lm+*#G'~}$#zy~w=u]sxq7Xtmlkji/POe+*hg`Hd]#DZ_^]Vz=SXQVUNrR43ImMLKJIH*@d>C<`#"8=<;:3Wx05.3,P0po'&+$#(!E%$#"yx>|uts9wYonm3Tpinglkd*hJIedcb[!_X@VzT<RQVOsSRQP2HlL.JIBf)?DCB;@?>7[;43Wx0/43,P0/.-m%*#GF&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,Pqp(Lm%I)i!~}C{cy?}v{tyr8vuWmrqji/mlejihgf_^]#a`BA]\[Tx;WPUTMqQP2NGFEiIHA)?c&<;@98\};:3W76/u3,+*N.',+$H(!g%${A!~}vu;sxwpun4rqjRnmf,MLbgf_dc\"`BXWVzyYXWP8NrRQ32NMLEDhHGF?>C<`@9876Z4321U5432+*)M-,+*ji!E}|{"y?w|utyr8potsrk1onmlkdiba'eGcba`Y}]?>ZYXQuOTSLpPIHMLEDCg*@?>=a$@9]=<;{z876/S3210/o-&J*j"!~D|{z@awv{zyr8pXn4rqjoh.-kjchgf_%cE[`Y}]\[ZSRWVOsS54JnNML.DhHA@EDCB;_"!=<5Y3y165.-Q1*/.-&Jk#"'~D|#z@x}vut:rwpun4rqjih.lkjihJI_%F\aZ_^W{>=YXWPOs65KJOHlL.JIHG@dDCB$@?>=<5Y98x6543,P0)(-,%$#(!E%|#"!x>_{tyr8vuWmrqji/mlejihgf_^]#a`BA]\[TxR:u8NSRQJImG/EJCHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}]\>=SwWP8NrLKPOHGkKJ,HG@d'=BA:?87[|{98765.R210).'K+k#G'&feB"!x}v{zs9wYXn4rTSoh.lNjibg`&G]#aC_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;yxq7utVrkji/Pledihg`&dcba`Y}W?UZYRQuONMLQJOHlkKJI+AeED=%;_?!~<5Y98x6543,P0/.-m%*#G'&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,P0po'&%I)(!g%${Aya}|u;:rwpun4rqjih.fN+cha`_^$ba`BX|\[ZYX:Pt7SRQPOHGkKJ,HAF?>bB$:?8=6Z:3y76/St,+O).',%$#G'~f$#"!x>|{z\xwp6tsrkpong-kjihgfH%cbDCYXW{>=YXQu8NMLpJINGLEJIBfeE'=<;:9]=<;{z870T.-2+*/.-&J*)(!~}C{cy?}v{tyr8YXnml2ji/glkdcb(f_dcbaZ~^]\U=SwQVOTMRQJImG/EJCHAe(D=B;@?>7[|:9876/.3,Pqp(',+*#G'&feBzy~w={]yxwvo5mrqj0hmlejiba'eG]b[`Y}@VUySXWPUTMqQJ2NGkEJCHA@dDCB;_987<;:9810Tu3,10).'K+$j"'~D|dz@~}_{t:xqpon4rqjRnmf,jchaf_%]Ea`_^]VzZYXQ9UNr54JnH0LKDhHGFEDCB;_?!~<;:981U/u3,+*N.-,%k)"Fg%$#"!x>v{tyrq7Xtmrk1oQPfejc)gfH%]baZ_^W{[TSwv9OTMLp3ONMLEDhBGFEDC<;_"!7[|{9870T43,+Op.-&+$)"F&f$#zy~w=^]sxqpo5srqpoQg-Njchafedc\"`_X]VzZYR:u87SLKJnNM/KDhBGF?>=aA@?!~6;:3W7wv.-2+O/o-&J$j"'~D${c!x>|{tyxq76nsrkpi/gfkdiba'HGcb[!_^@VUTx;WPUTMqQPONM/EiCHG@dDCB;_987<;:9810T.-,10)M',%$)"F&feB"!a}|u;\xqputm3qpRQ.fkdcbg`&dFEaZ~A@\[TxXQ9UTMqQPINMFjJ,HG@d'=BA:?87[;:z8765.R210/o-&J$j"'~D$dc!x>|uzyxqpo5Vlqping-kdchg`_%cE[`Y}]?>ZSRWVOsM5KoOHMFjJCHGF?cCB;@?87[;:z8765.R,1*/.-&%Ij('~}|Bc!x>_utsxqpo5mlk1onmfN+iKg`_^$E[!~^]\U=SwQVOTMRQJImMLKD,HAe?DCBA@?>7[|{92V6/.3210)(Lm+*#G'&feBzy~w={ts9wvXnm3kSohglkjiha'e^]\a`Y}@VUyYX:POTMqQJ2NMLKDhHA@dD=<`#"8=<;:3W7654-Q10/('K+$)(!EfeBzb~wv{t:[wpon4Ukji/Plkjchgf_^$bDZ_^]VzZ<Rv9OTMLpPON0/KJIHAeE>=B;:9]~654X270T.-2+*/.-&J*j"!~D${cy?}v{tyr8vuWsrqpi/mleMihgf_^]#aZ_XWVzyYXWP8NrRQ32NMLEDhHA)?cCB$@987[5{321U5u32+O)o'&J*ji'~D${c!x>_{tsrwvun4lTjih.lkjihJI_%F\aZ_^W{>=YXWPOsS54PIm0/KJCBAe(>=<A@?>=<;4Xyx65.R210).'K+k#G'&feB"b~}v<zsxwp6Wmrqping-kdcha'e^F\[`_X|\[ZYX:Pt7SRQPOHGkE-CHA@d>C<;:9>=6Z:z8765.R210)o'&J$)"!~%${A!~`v{zyr8pXnslk1onmfN+Lbgfe^]#aC_X|{[ZSXWVOsMRKoONML.DhHA)E>bB;:9]=6|49810/.R2r*).-&J*)(!&}C#c!x}v<]\xqputm3qponmfN+LKa'edFEa`_X|?Uyx;WPUTMqQJnH0FKJCHAe?>CBA:?87[|{98765.R210).'K+k#G'gfC{cy~}vu;yxwvXWsl2ponmfN+LKa'_^$#DZ_^]Vz=<XWPtT65QJn1GLEDhHGF(>C<A@9]=<;:3y76/St,+Opo'&%Ij(!~%|Bz@a}|{t:[wvun43qpRQ.-Ndcha'edFEa`_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;yxqYo5srTSihg-kMc)J`e^]#DZ_^]VzTSRQVONMqQJOHlF.JIBf)d'CB;:?8\<;492Vw5.-,+O/('&J$j(!E%e{zy?}|^]yxq7XWsrkji/mfN+ihg`H^$b[Z_^W\UySRQPtsSR43ImM/KJIBAeE>&<`@9876Z4321U5432+*)M-,+*ji!E}|{"y?w|utyr8potsrk1onmlkdiba'eGcba`Y}]?>ZYXQuOTSLpPIHMLEDCg*@?>=a$@9]=<;{z876/S3210/o-&J*j"!~D|{z@awv{zyr8pXn4rqjoh.-kjchgf_%cE[`Y}]\[ZSRWVOsS54JnNML.DhHA@EDCB;_"!=<5Y3y165.-Q1*/.-&Jk#"'~D|#z@x}vut:rwpun4rqjih.lkjihJI_%F\aZ_^W{>=YXWPOs65KJOHlL.JIHG@dDCB$@?>=<5Y98x6543,P0)(-,%$#(!E%|#"!x>_{tyr8vuWmrqji/mlejihgf_^]#a`BA]\[TxR:u8NSRQJImG/EJCHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}]\>=SwWP8NrLKPOHGkKJ,HG@d'=BA:?87[|{98765.R210).'K+k#G'&feB"!x}v{zs9wYXn4rTSoh.lNjibg`&G]#aC_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;yxq7utVrkji/Pledihg`&dcba`Y}W?UZYRQuONMLQJOHlkKJI+AeED=%;_?!~<5Y98x6543,P0/.-m%*#G'&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,P0po'&%I)(!g%${Aya}|u;:rwpun4rqjih.fN+cha`_^$ba`BX|\[ZYX:Pt7SRQPOHGkKJ,HAF?>bB$:?8=6Z:3y76/St,+O).',%$#G'~f$#"!x>|{z\xwp6tsrkpong-kjihgfH%cbDCYXW{>=YXQu8NMLpJINGLEJIBfe(>=a$@9]=<;{z876/S3210/o-&J*j"!~D|{z@awv{zyr8pXn4rqjoh.-kjchgf_%cE[`Y}W?UZYRQuUTS54PImGLKJIHGF?cCB$#9]=6|:32V0/432+Op.'K+k#G'&feBzb~w=^]srqpo5srqpRQ.fejiha'edFEa`_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;y[qvotsrk1inmle+LKa'eGc\[!_^@VUTxXQ9UNr54JnH0LKJIBAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Aya}|{ts9ZYotmrk1Rnglkdihg`&d]\a`_^]\UTxX:Pt7MRKJIHlLE-IBAe(D=<A:^>~6549270T432r0/.'KJ$#('~%|Bcb~w|u;yxwYXn4rqpohg-kjiba'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+O/('&%$Hi!&}${Ab~}vut:rwpun4lTpi/Plkjchgf_^$ba`_A@\[TxX:Pt7MRKJIHlL.JIBf)dDCBA#9]~65:9870T4-2+O/.-m%*#G'&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,P*).-,%Ij('~}|B"!~`|u;yxwvXWsl2ponmfN+LKgf_%cba`YX|\[ZSRvVOTSLQPImMLKDhB*F?>CB;_?8=<5Y9y765.-,+O/('&J$j(!E%e{zy?}|^]yxq7XWsrkji/mfN+ihg`H^$b[Z_^W\UySRQPtsSR43ImM/KJIBAeED=<;_"!=<5Y9yx65.R210)o'&J*j('~}${A!~}_{t:9wpXtsl2poQg-NMiba`&dFEa`_X|\[ZYR:u8NSRQJImG/EJCHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}]\U=YXWPt7MLKJImGLKDCHAed>=B;_"!=<5Y9216543,P*)('&J*ji'~D${cy?}v{tyr8vutVrkji/mlkjihJI_%F\aZ_^W{>=YXWPOsSRQP2NGLEDhBGF?c=B;_?>~}5Y9876v43,+O/o',+$)"Fg%|{"y?w|utyr8vXnm32poQ.lkdib(feGcba`Y}]?UTYRvPOTSRKo2NGFjD,HAeED&B;_?>~<;:3W165.-,P0)o'&J*ji!E}|{"y?w|utyr8potsrk1ongOkd*hgfe^F\"C_^W\UyYR:uOTMqQP2NGLEiIHGF?>CB;_?!~<;:981U/43,10/.-&J$j"'~De#"!~w={tyrwpun4rqpRh.Okdihgf_^$bDZ_^]VzTSRQVONMqQJOHlF.JIBf)d'CB;:?8\<;492V0vS-s+*NonK+k)('~De{z!x>_uzyrq7Xtsrkpi/POedchg`&G]#aC_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;yxqYo5srTSihg-kMc)J`e^]#aCBXW{>=YXWPOsM5Ko2HMFKJIHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}W?UZYRQuUTS54PImGLKJIHGF?cCB$#9]=<|49870Tut21*)M'&%*)(!E%$#"y?}|{zyxwpo5Vlqpih.fN+LKgf_%cba`YX|\[ZSRvVOTSLQPImMF.JIBf)(DCB;_?!~6;:981U54-s+*NonK+k)('~De{z!x>_uzyrq7Xtsrkpi/POedchg`&G]#aC_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;yxqYo5srTSihg-kMc)J`e^]#aCBXW{>=YXWPOsM5Ko2HMFKJIHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}W?UZYRQuUTS54PImGLKJIHGF?cCB$#9]=<|49870Tut21*)M'&%*)(!E%$#"y?}|{zyxwpo5Vlqpih.fN+LKgf_%cba`YX|\[ZSRvVOTSLQPImMF.JIBf)(DCB;_?!~6;:981U54-s+*NM-ml*)(!E%${cy?`v{zyr8putsrkj0hgfejiba'eGc\[!_^W{U=SwQ9UNr5QPIHMFjJ,BAe?'C<;@9]~<5Y3876/.3,Pqp(',+*#G'&feBzy~w={]yxwvo5mrqj0hmlejiba'eG]b[`Y}@VUySXWPUTMqQJ2NGkEJCHA@dDCB;_987<;:9810Tu3,10).'K+$j"'~D|dz@~}_{t:xqpon4rqjRnmf,jchaf_%]Ea`_^]VzZYXQ9UNr54JnH0LKDhHGFEDCB;_?!~<;:981U/u3,+*N.-,%k)"Fg%$#"!x>v{tyrq7Xtmrk1oQPfejc)gfH%]baZ_^W{[TSwv9OTMLp3ONMLEDhBGFEDC<;_"!7[|{9870T43,+Op.-&+$)"F&f$#zy~w=^]sxqpo5srqpoQg-Njchafedc\"`_X]VzZYR:u87SLKJnNM/KDhBGF?>=aA@?!~6;:3W7wv.-2+O/o-&J$j"'~D${c!x>|{tyxq76nsrkpi/gfkdiba'HGcb[!_^@VUTx;WPUTMqQPONM/EiCHG@dDCB;_987<;:9810T.-,10)M',%$)"F&feB"!a}|u;\xqputm3qpRQ.fkdcbg`&dFEaZ~A@\[TxXQ9UTMqQPINMFjJ,HG@d'=BA:?87[;:z8765.R210/o-&J$j"'~D$dc!x>|uzyxqpo5Vlqping-kdchg`_%cE[`Y}]?>ZSRWVOsM5KoOHMFjJCHGF?cCB;@?87[;:z8765.R,1*/.-&%Ij('~}|Bc!x>_utsxqpo5mlk1onmfN+iKg`_^$E[!~^]\U=SwQVOTMRQJImMLKD,HAe?DCBA@?>7[|{92V6/.3210)(Lm+*#G'&feBzy~w={ts9wvXnm3kSohglkjiha'e^]\a`Y}@VUyYX:POTMqQJ2NMLKDhHA@dD=<`#"8=<;:3W7654-Q10/('K+$)(!EfeBzb~wv{t:[wpon4Ukji/Plkjchgf_^$bDZ_^]VzZ<Rv9OTMLpPON0/KJIHAeE>=B;:9]~654X270T.-2+*/.-&J*j"!~D${cy?}v{tyr8vuWsrqpi/mleMihgf_^]#aZ_XWVzyYXWP8NrRQ32NMLEDhHA)?cCB$@987[5{321U5u32+O)o'&J*ji'~D${c!x>_{tsrwvun43qpohgf,jihgfH%cba`_A@\Uy<;QPONMqQP2HlL.JIBf)dD=BA@9>7[5{321U/.3,10/(LKl*)"F&feBc!x>|^]yxq7utVlkj0/mfN+LKgf_%cba`YX|\[ZSRvVOTSLQPImGLEDIBAe(D=<A@?>7[;43W76v43,+O/(n,%I)('gfCd"!xw|{zs9wvutm3qponmlkdcb(f_^$#[`_^]VzTYRv9OTMLpP21GkKD,BG@d>CBA:^>~6549270T.3,1*)ML,%k)"F&feB"!~w=^]s9wYXnml2ponmlkjiba'eGc\[!_^@VUTxXQ9UNr54JnH0LKJIBAeEDCBA:^>=<54X8x6/S3,10/.-&J*j"!~D|#zyx>v{zs9qvutsrk1Rngfkd*hJIedcb[!_A]\UZSwvPUNSLp3INGFjJI+*F?cCB$#9]~}5:32V6v43,+O/o-,+*#G'~f|{"y?}|{zsxq76tVrkji/mfN+ihg`H^$b[`Y}@VUTxX:Pt7SRQPOHGk.JCBGF?cC<A:^>=<5:3W76v43,+Op.'&%Iji!&}$#z@a`|{zsxq7uWsrkj0QPlejchg`&d]\a`_^]\UTxX:Pt7MRKJIHlLE-IBAe(D=<A:^>~6549270T432r0/.'KJ$#('~%|Bcb~w|u;y[qvotsrk1inmle+LKa'eGc\[!_^@VUTxXQ9UNr54JnH0LKJIBAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Aya}|{ts9ZYotmrk1Rnglkdihg`&d]\a`_^]\UTxX:Pt7MRKJIHlLE-IBAe(D=<A:^>~6549270T432r0/.'KJ$#('~%|Bcb~w|u;yxwYXn4rqpohg-kjiba'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+O/('&%$Hi!&}${Ab~}vut:rwpun4lTpi/Plkjchgf_^$ba`_A@\[TxX:Pt7MRKJIHlL.JIBf)dDCBA#9]~65:9870T4-2+O/.-m%*#G'&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,P*).-,%Ij('~}|B"!~`|u;yxwvXWsl2ponmfN+LKgf_%cba`YX|\[ZSRvVOTSLQPImMLKDhB*F?>CB;_?8=<5Y9y765.-,+O/('&J$j(!E%e{zy?}|^]yxq7XWsrkji/mfN+ihg`H^$b[Z_^W\UySRQPtsSR43ImM/KJIBAeED=<;_"!=<5Y9yx65.R210)o'&J*j('~}${A!~}_{t:9wpXtsl2poQg-NMiba`&dFEa`_X|\[ZYR:u8NSRQJImG/EJCHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}]\U=YXWPt7MLKJImGLKDCHAed>=B;_"!=<5Y9216543,P*)('&J*ji'~D${cy?}v{tyr8vutVrkji/mlkjihJI_%F\aZ_^W{>=YXWPOsSRQP2NGLEDhBGF?c=B;_?>~}5Y9876v43,+O/o',+$)"Fg%|{"y?w|utyr8vXnm32johg-Njchgf_^$\a`Y^]\UTxX:Pt7MRKJIHlLE-IBAe(D=<A:^>~6549270T432r0/.'KJ$#('~%|Bcb~w|u;yxqYo5srTSihg-kMc)J`e^]#DZ_^]VzTSRQVONMqQJOHlF.JIBf)d'CB;:?8\<;492Vw5.-,+O/('&J$j(!E%e{zy?}|^]yxq7XWsrkji/mfN+ihg`H^$b[Z_^W\UySRQPtsSR43ImM/KJIBAeE>&<`@9876Z4321U5432+*)M-,+*ji!E}|{"y?w|utyr8potsrk1onmlkdiba'eGcba`Y}]?>ZYXQuOTSLpPIHMLEDCg*@?>=a$@9]=<;{z876/S3210/o-&J*j"!~D|{z@awv{zyr8pXn4rqjoh.-kjchgf_%cE[`Y}]\[ZSRWVOsS54JnNML.DhHA@EDCB;_"!=<5Y3y165.-Q1*/.-&Jk#"'~D|#z@x}vut:rwpun4rqjih.lkjihJI_%F\aZ_^W{>=YXWPOs65KJOHlL.JIHG@dDCB$@?>=<5Y98x6543,P0)(-,%$#(!E%|#"!x>_{tyr8vuWmrqji/mlejihgf_^]#a`BA]\[TxR:u8NSRQJImG/EJCHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}]\>=SwWP8NrLKPOHGkKJ,HG@d'=BA:?87[|{98765.R210).'K+k#G'&feB"!x}v{zs9wYXn4rTSoh.lNjibg`&G]#aC_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;yxq7utVrkji/Pledihg`&dcba`Y}W?UZYRQuONMLQJOHlkKJI+AeED=%;_?!~<5Y98x6543,P0/.-m%*#G'&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,P0po'&%I)(!g%${Aya}|u;:rwpun4rqjih.fN+cha`_^$ba`BX|\[ZYX:Pt7SRQPOHGkKJ,HAF?>bB$:?8=6Z:3y76/St,+O).',%$#G'~f$#"!x>|{z\xwp6tsrkpong-kjihgfH%cbDCYXW{>=YXQu8NMLpJINGLEJIBfe(>=a$@9]=<;{z876/S3210/o-&J*j"!~D|{z@awv{zyr8pXn4rqjoh.-kjchgf_%cE[`Y}W?UZYRQuUTS54PImGLKJIHGF?cCB$#9]=6|:32V0/432+Op.'K+k#G'&feBzb~w=^]srqpo5srqpRQ.fejiha'edFEa`_X|?>ZYXWPt7MLKJImMFEDCgGFEDCB;_?>=<5{3W165.R2r0/.'KJ$#('~%|Bcb~w|u;y[qvotsrk1inmle+LKa'eGc\[!_^@VUTxXQ9UNr54JnH0LKJIBAe?'CBA@9]~65:9870Tut,+0/(Lm+*)"!&%${Aya}|{ts9ZYotmrk1Rnglkdihg`&d]\a`_^]\UTxX:Pt7MRKJIHlLE-IBAe(D=<A:^>~6549270T432r0/.'KJ$#('~%|Bcb~w|u;yxwYXn4rqpohg-kjiba'eGc\[!_^]\[Z<Rv9UTMRKPOHlF.DhBGF?>=a;:?8=6Z:3y76/St,+O/('&%$Hi!&}${Ab~}vut:rwpun4lTpi/Plkjchgf_^$ba`_A@\[TxX:Pt7MRKJIHlL.JIBf)dDCBA#9]~65:9870T4-2+O/.-m%*#G'&f${A!awv{zs9wpunsrkj0hgfejiba'eG]b[`Y}@VUy<;WVUTMqQJ2NGkKJIHA@dc&BA@?>=<5Y9216543,P*).-,%Ij('~}|B"!~`|u;yxwvXWsl2ponmfN+LKgf_%cba`YX|\[ZSRvVOTSLQPImMLKDhB*F?>CB;_?8=<5Y9y765.-,+O/('&J$j(!E%e{zy?}|^]yxq7XWsrkji/mfN+ihg`H^$b[Z_^W\UySRQPtsSR43ImM/KJIBAeED=<;_"!=<5Y9yx65.R210)o'&J*j('~}${A!~}_{t:9wpXtsl2poQg-NMiba`&dFEa`_X|\[ZYR:u8NSRQJImG/EJCHAeE'=B;@?>7[;49870T4t2+*)M-,+*#"!E}|{"y~w={]\xqpo5srqjoh.-kjchgf_%cE[`Y}]\U=YXWPt7MLKJImGLKDCHAed>=B;_"!=<5Y9216543,P*)('&J*ji'~D${cy?}v{tyr8vutVrkji/mlkjihJI_%F\aZ_^W{>=YXWPOsSRQP2NGLEDhBGF?c=B;_?>~}5Y9876v43,+O/o',+$)"Fg%|{"y?w|utyr8%

ลองออนไลน์

สร้างโดยใช้เครื่องมือที่นี่


ว้าว! คำตอบ Malbolge? น่ากลัว!
MilkyWay90

10

JavaScript 666 Bytes

แรงบันดาลใจจากโซลูชันของtkazec

ลองดูโพสต์บล็อกที่ฉันเขียนเกี่ยวกับมันมันมีแหล่งข้อมูลทั้งหมดและอธิบายวิธีสร้างโค้ดนั้น

คุณสามารถคัดลอกและวางรหัสลงในคอนโซลของเบราว์เซอร์ของคุณ หรือลองที่http://jsfiddle.net/eikes/Sws4g/1/

t="We're no strangers to love|YouSrules;so do I|A full commitment's what?think7f|You wouldn't get this from anyLguy^zQnqAnd if:ask me[Don'tEme yRblind=ee{HUH_]|Qq^{x<br>{zxz||xxZKVlet:downVrun around;deseBVMcryVsay goodbyeV8a liFhuB||q eachLfor so long|Your hearPaching but|YRshy=@Inside we bothCwhaPgo7n|WeSgamFwe'reJpl@_U]^|I just wannaEyou[Gotta Munderstand](Ooh)|Z, nX|(GU[ how?feeling|ZNXXTgiveV|NTUiveK)|TeverJSCthe Rou're too QWe've9Pt's been Mmake:L other K:upJ gonna H(Ooh, gFe;E 8C9 Brt you@ay it|? I'm = to s; and : you 9 know8tell 7ing o";c="|{zxq_^][ZXVUTSRQPMLKJHFECB@?=;:987".split("");while(l=c.pop()){t=t.split(l);t=t.join(t.pop())}document.write(t)

9

Perl, 584 578 577 576 575 571 564 554 553 540

วิธีการแก้ปัญหานี้เป็นไปตามวิธีการพื้นฐานเช่นเดียวกับคนอื่น ๆ ส่วนใหญ่: รับสายเริ่มต้นดำเนินการแทนซ้ำของส่วนซ้ำของข้อความ

กฎการแทนที่ถูกระบุด้วยอักขระเดียวโดยเฉพาะอย่างยิ่งสิ่งที่ไม่เกิดขึ้นในข้อความเอาต์พุตดังนั้นกฎความยาว L และการเกิด N ครั้งจะบันทึกประมาณ N * LNL-1 (N * L เป็นความยาวดั้งเดิมของการเกิดทั้งหมด แต่ อักขระการแทนที่เกิดขึ้น N ครั้งและข้อความตัวอักษรมีความยาว L และกฎถูกแบ่งโดยอักขระการแยก) ถ้าอักขระการแทนที่ถูกระบุไว้อย่างชัดเจนดังนั้นการออมจะลดลงเป็น N * LNL-2 เนื่องจากภาษาส่วนใหญ่สามารถคำนวณอักขระด้วย chr () หรือรหัสย่อในทำนองเดียวกันวิธีแรกมีแนวโน้มที่จะดีกว่า

มีข้อเสียบางประการในการคำนวณอักขระการแทนที่สิ่งที่สำคัญที่สุดคือความต้องการอักขระ ASCII ที่ต่อเนื่อง เอาท์พุทส่วนใหญ่ใช้ตัวอักษรตัวพิมพ์เล็ก แต่มีตัวอักษรตัวพิมพ์ใหญ่และเครื่องหมายวรรคตอนเพียงพอที่จะต้องแทนที่ตัวละครด้วยตัวเองแมปตัวละครสองสามตัวในระยะการแก้ไขในภายหลังหรือสั่งซื้อกฎเช่นการแทนที่ การใช้ภาษาที่ใช้แทนที่ regexes ก็หมายความว่ามี gotchas สำหรับตัวละครที่มีความหมายพิเศษภายใน regex:. + * \ ?

วิธีดั้งเดิมของฉันมี 63 ไบต์ในตัวถอดรหัสและ 521 ในกฎ ฉันใช้เวลามากมายในการปรับแต่งกฎซึ่งอาจเป็นเรื่องยากโดยเฉพาะกับกฎสั้น ๆ ที่พวกเขาสามารถซ้อนทับกัน ฉันถอดรหัสได้ถึง 55 ไบต์และกฎลดเหลือ 485 โดยโกงสูตรนิดหน่อย โดยปกติแล้วกฎ 2 ตัวที่เกิดขึ้น 3 ครั้งหรือกฎ 3 ตัวที่เกิดขึ้นสองครั้งจะไม่ได้บันทึกความยาวใด ๆ แต่มีช่องโหว่ซึ่งช่วยให้สามารถสร้างคำที่ไม่ได้เป็นส่วนหนึ่งของผลลัพธ์ได้ - )

ฉันจะใช้ประโยชน์จากตัวควบคุมในการแก้ปัญหานี้ดังนั้นวิธีการแก้ปัญหามีให้ที่นี่ base64- เข้ารหัส

cz09AhpuCnRyYQ8QcxIHbG8OGRwVBHJ1bGVzDRRzB2QHSQFBE3VsbCBjb21taXQIbnQXcxFoYXQs
FWluaxtvZhkRC2xkbhd0BWV0FWlzE3JvbQ1ueR8FdXkuJ0EUaWYYDXNrIAgtRG9uF3QgHiAIGBp0
bwdibGkUdAoDKysBKSkoKCcuKys9OyRjPWNociQ9LS0sczpbJGNdOigiCldlZWVlICBnb3RvIG1l
b3cHc291bmQgYXZlbmdlciB3IHQgZgwgEmhpDiciPX4vLj9cRC9nLHNwbGl0CjAsJyB5CzABWQsw
F3IEMGkPIDAga24JMG5uYSAwdGVsbDAgBmgQMCAwFhggdXAwZQ5yBW8dMHQXcyBiA24gMGF5IGl0
ATABTiIwAShPb2gwAQECFw4cbiBlYWNoHxNvciBzB2xvDxlyIGhlYXIjYWNoG2J1dBkadG8KaHkS
CiRJbnNpZGURBGIGaBwRaGEjZ28bb24BAhwVBGdhCA0Ud2UaZ28dcGwkMCYpJWcWLCBuImcWAShH
ISkwJiwFISkwbWFrZRggMAElZyElbGV0GCBkCW4lcnVuDXILFGEUZGVzEHQYJSpjcnklc2F5BW9v
ZGJ5ZSUeDSBsaWUNFGh1cnQYMCBJF20wIGgJLBMDbGkPATABSSBqdXN0EWEdHhgtRwZ0YSAqdQwQ
c3RhDCsnKVskPV06ZWd3aGlsZSQ9O3ByaW50

และที่นี่เป็นรุ่นที่อ่านได้ง่ายขึ้น (แต่ปฏิบัติการน้อยกว่า) เล็กน้อย

s==^B^Zn
tra^O^Ps^R^Glo^N^Y^\^U^Drules^M^Ts^Gd^GI^AA^Sull commit^Hnt^Ws^Qhat,^Uink^[of^Y^Q^Kldn^Wt^Eet^Uis^Srom^Mny^_^Euy.'A^Tif^X^Msk ^H-Don^Wt ^^ ^H^X^Zto^Gbli^Tt
^C++^A))(('.++=;$c=chr$=--,s:[$c]:("
Weeee  goto meow^Gsound avenger w t f^L ^Rhi^N'"=~/.?\D/g,split
0,' y^K0^AY^K0^Wr^D0i^O 0 kn^I0nna 0tell0 ^Fh^P0 0^V^X up0e^Nr^Eo^]0t^Ws b^Cn 0ay it^A0^AN"0^A(Ooh0^A^A^B^W^N^\n each^_^Sor s^Glo^O^Yr hear#ach^[but^Y^Zto
hy^R
$Inside^Q^Db^Fh^\^Qha#go^[on^A^B^\^U^Dga^H^M^Twe^Zgo^]pl$0&)%g^V, n"g^V^A(G!)0&,^E!)0make^X 0^A%g!%let^X d^In%run^Mr^K^Ta^Tdes^Pt^X%*cry%say^Eoodbye%^^^M lie^M^Thurt^X0 I^Wm0 h^I,^S^Cli^O^A0^AI just^Qa^]^^^X-G^Fta *u^L^Psta^L+')[$=]:egwhile$=;print

อย่างไรก็ตามฉันสงสัยว่านี่ยังไม่ต่ำสุดเนื่องจาก Ed H. ชี้ให้เห็นว่าการถอดรหัส php นั้นสั้นที่สุดที่ 44 ไบต์และฉันได้เห็นห้องสำหรับการปรับปรุงในกฎที่เขาใช้ ฉันมีตัวถอดรหัส 52 ไบต์ใน Perl แต่ฉันไม่สามารถใช้สำหรับการแก้ปัญหานี้เพราะฉันจำเป็นต้องวิ่งผ่านช่วงในการย้อนกลับ


8

PHP 730 707 ตัวอักษร

<? $ l = 'you'; $ n = 'Never gonna'; $ z = "ให้ $ l up"; $ m = "
$ n $ z
$ n ปล่อย $ l ลง
$ n วิ่งไปรอบ ๆ แล้วละทิ้ง $ l
$ n ทำให้ $ l ร้องไห้
$ n บอกลา
$ n โกหกและทำร้าย $ l

"; $ o ="
เรารู้จักกันมานาน
หัวใจของคุณเจ็บปวด แต่
คุณอายเกินกว่าจะพูดได้
ข้างในเราทั้งคู่รู้ว่าเกิดอะไรขึ้น
เรารู้เกมและเราจะเล่น
"; $ p =" (Ooh, $ z) "; $ r =" ($ z) "; $ g =" ฉันรู้สึกอย่างไร "; $ s =" $ n ให้, $ n ให้ ", $ t = "ฉันแค่อยากจะบอก $ l $ g
ต้องทำความเข้าใจกับ $ l "; echo" เราไม่มีคนแปลกหน้าที่จะรัก
คุณก็รู้กฏแล้ว
ความมุ่งมั่นอย่างเต็มที่คือสิ่งที่ฉันคิด
คุณจะไม่ได้สิ่งนี้จากคนอื่น
$ T
$ $ ม o
และถ้า $ l ถามฉัน $ g
อย่าบอกฉันว่าฉันตาบอดเกินกว่าจะมองเห็นได้
$ $ มม.
$ P
$ P
(Ooh)
$ s
$ R
(Ooh)
$ s
$ R
$ o
$ T
$ $ มม. $ m ";

1
คุณสามารถทำให้สิ่งนี้สั้นลงโดยใส่ "คุณ" และ "คุณ" ลงในตัวแปร
พหุนาม

@ PeterTaylor เป็นคำที่พิมพ์ผิดขอบคุณสำหรับการแจ้งให้ทราบล่วงหน้า
l0n3sh4rk

@ Polynomial เสร็จแล้ว!
l0n3sh4rk

$s="Never gonna give...$nจะสั้นลงด้วย
นาย Llama

1
แนะนำให้ "ให้" ตัวแปรเช่นกัน มันถูกใช้ใน 5 แห่ง
Glen Solsberry

8

Perl - 589 588 583 579 576 ไบต์

แต่ละกฎประกอบด้วยหัวถ่าน 1 ตัวร่างกายและขีดล่าง ตราบใดที่กฎสามารถถูกตัดออกจากส่วนเริ่มต้นได้ส่วนหัวของกฎจะถูกแทนที่ด้วยเนื้อความในส่วนที่เหลือของข้อความ ส่วนหัวของกฎแรกจะถูกกำหนดส่วนหัวของกฎต่อไปนี้ทั้งหมดจะถูกสร้างขึ้นจากตัวแปร $ i

เนื่องจากส่วนหัวของกฎต่อไปจะถูกวางไว้ที่จุดเริ่มต้นของข้อความตามกฎก่อนหน้ากฎล่าสุดจะสร้างตัวละครที่จะไม่ถูกลบอีกต่อไป ฉันต้องเลือกชื่อที่หลากหลายซึ่งชื่อสุดท้ายจะเป็น "W" ดังนั้นฉันสามารถลบ "W" ดั้งเดิมออกจากจุดเริ่มต้นของเนื้อเพลงและแทนที่ด้วยการแทนที่กฎ

การเข้ารหัสทำโดยสคริปต์ Python โดยใช้อัลกอริธึมแบบ Hillclimbing อย่างง่าย

นี่คือรหัส Perl:

$_="qou_on_er_Hh_ w_
(Ooh_ell_ a_ay it
_'reHoC_g0na _makeR _ve_ oth1 _ing_e ___A_t's been _o _D_4, gP)_
Yq_G_ t_I_ know_
NT_nd _ how I'm feel=
_N_O_i;R up_4)Kgi;, nTgi;
(GP)_ yq_
I just3annaH5RMGotta :und1stand
V_e;r 9_
We';Jn each<for sCl0gFr hearBach= butF8shyHCs7Insid>w>bothJ3haBgo= 0
WeJ2>gam>aLwe'r>9pl7_KgPKletR downKrun6rqLaLdes1tRK:cryKsay goodbyeKt56 li>aLhurtR
_e'r>nCstrang1sHClo;FJ2>rules6LsCdCI
A full commitment's3hat I'm2ink= ofF3qldn't get2is from6ny<guySUALifR6sk meMD0'tH5 meR8bliLtCsee
VVEEQQ
USVV";$i=48;eval"s/$1/$2/g"while s/(.)(.*?)_/chr($i++)/se;print

(ฉันคิดว่ามันน่าทึ่งที่ข้อความที่บีบอัดประกอบด้วย "hearBach": D)

และนี่คือรหัสไพ ธ อนที่สร้างขึ้น:

import collections, sys
text = sys.stdin.read().replace('\r\n','\n')
text = text[1:]
names = list(["q"] + map(chr, xrange(ord('0'), ord('W'))))
done = False
name = ""
while not done:
    done = True
    best = (0, None)
    for m in xrange(1, len(text) / 2 + 1):
        counter = collections.Counter()
        for i in xrange(0, len(text) - m + 1):
            snippet=text[i:i+m]
            if not '_' in snippet:
                counter[snippet] += 1
        for snippet in counter:
            n = counter[snippet]
            gain = n * m - n - (m + 1)
            if gain > best[0]:
                actual_gain = len(text) - len(text.replace(snippet,"")) - n - (m + 1)
                if actual_gain > best[0]:
                    best=(actual_gain, snippet)
                    done=False
    if not done:
        snippet = best[1]
        try:
            lastname = name
            name = names.pop()
            while name in 'ADGION':
                text = name + '_' + text
                name = names.pop()
            while name in '?@':
                text = '_' + text
                name = names.pop()
        except:
            sys.stderr.write('Warning: out of names.\n')
            lastname = "0"
            break
        text = snippet + '_' + text.replace(snippet, name)
sys.stdout.write('$_="')
sys.stdout.write(name + text)
sys.stdout.write('";$i=' + str(ord(lastname)) + ';eval"s/$1/$2/g"while s/(.)(.*?)_/chr($i++)/se;print')

นี่เป็นสิ่งที่น่าประทับใจ! แต่คุณควรเล่น Perl ของคุณจริงๆ ในตัวอย่างสั้น ๆ นั้นคุณมีอย่างน้อยห้าตัวอักษรที่สามารถลดได้ (parens ที่ไม่จำเป็นและสิ่งที่คล้ายกัน)
breadbox

5 ตัวอักษร? ฉันมีหนึ่งอันสำหรับใช้ for-loop, 2 สำหรับ eval-parens และ 1 สำหรับ regex-modifier ที่ไม่ได้ใช้ แต่ตอนนี้ฉันติดอยู่ (ยังคงอยู่ข้างหน้าของ Optimus อีกครั้ง: D)
quasimodo

ลองใช้รูปแบบคำต่อท้ายของwhileการวนซ้ำ; สิ่งนี้จะช่วยให้คุณละทิ้งวงเล็บปีกกาและวงเล็บ แนวคิดอื่น: หาวิธีใช้sayแทนที่จะprintทำเอาต์พุต
breadbox

@quasimodo ไม่ได้อีกต่อไปคุณไม่ได้ แค่อยากจะบอกว่าครั้งเดียว: P
Optimus

2
มันสนุกมากใช่ แต่ฉันคิดว่าฉันควรหยุดที่นี่จริง ๆ ฉันไม่อยากคิดถึงทุกชั่วโมงที่ฉันเสียไป: D
quasimodo

8

Python 2.7, 975 803 ไบต์

ไม่ใช่ที่ยิ่งใหญ่ที่สุด - ฉัน (ตอนนี้) หวังว่าหลามทำการจัดรูปแบบการขยายเช่นนี้ อนิจจามันไม่

แก้ไข: ส่วนขยายจำลองพร้อมไวยากรณ์การจัดรูปแบบทางเลือก (เรียงจาก .. )

print("""We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
{10}{8}
{11}

%s
{13}
And if you ask me{8}
Don't tell me you're too blind to see

%s
%s
{0}, {2})
{0}, {2})
{0})
{1}{12}
{9}
{0})
{1}{12}
{9}

{13}

{10}{8}
{11}

%s
%s
%s"""%tuple(['{1}{2}\n{1}{3}\n{1}{4}\n{1}{5}\n{1}{6}\n{1}{7}']*6)).format(*"(Ooh|Never gonna |give you up|let you down|run around and desert you|make you cry|say goodbye|tell a lie and hurt you\n| how I'm feeling|(Give you up)|I just wanna tell you|Gotta make you understand|give, never gonna give|We've known each other for so long\nYour heart's been aching but\nYou're too shy to say it\nInside we both know what's been going on\nWe know the game and we're gonna play it".split('|'))

7

Clojure

720 ไบต์ / ตัวอักษร:

(ทำซ้ำที่นี่ด้วยช่องว่างพิเศษเพื่อให้คุณสามารถดูการจัดรูปแบบ)

(let [r{\&" and "\Y"You"\0"\n"\1" you"\2" gonna"\3"give"\5" up"\6"ever"\F" how I'm feeling"\T" to"}
      s str 
      n"0N62 "
      c(s n"315"n"let1 down"n"run around&desert1"n"make1 cry"n"say goodbye"n"tell a lie&hurt10")
      p"0(Ooh, 315)"
      g"0(Give15)"
      q(s n "3, n62 3")
      o"0(Ooh)"
      w(s "0We've known each other for so long0Yr heart's been aching but0Y'reTo shyT say it0Inside we both know what's been going on0We know the game&we're2 play it0")
      u(s "I just wanna tell1F0Gotta make1 understand0")
      v"We're no strangersT love0Y know the rules&so do I0A full commitment's what I'm thinking of0Y wouldn't get this from any other guy0"
      R(s v u c w"And if1 ask meF0Don't tell me1'reTo blindT see0"c c p p o q g o q g\0 w\0 u c c c)]
  (apply s(map #(r% %)R)))      

รุ่นไบต์ขนาดเล็กที่สุดของรุ่นนี้คือเท่าใด
CalculatorFeline

7

C # - 605 ตัวอักษร | T-SQL - 795 ตัวอักษร | C # - 732 ตัวอักษร | C # - 659 ตัวอักษร

แรงบันดาลใจสำหรับสิ่งนี้มาจากตัวอย่างที่ไม่ดี การเปลี่ยนแปลงที่สำคัญอย่างเดียวที่ฉันทำจากสิ่งนั้นคือการค้นหาตัวละคร ASCII ที่ต่อเนื่องกันดังนั้นจึงไม่จำเป็นต้องประกาศ น่าเสียดายที่มันเป็น C # ดังนั้นฉันไม่รู้วิธีที่จะทำให้เล็กลง ฉันเอาข้อความเดิมมาแทนที่และทำโค้ดใน T-SQL โดยใช้ตารางชั่วคราว

var f='#';Debug.Print("HWe've0n each o=F forCo long5r hear+@ch>but5E<oChy<C1InsideBe bo=0Bha+;o>onHWe0 =e;ame7weE8pl1|HI justBanna :4*Gotta 2u?Fsta?%|H/93up/let3down/run@rou?7desFt4/2cry/say;oodbye/:@ lie7hurt4|(Ooh)/9,nevF89H(G.|'|(|)| how6feelingH|t's been|, |(Ooh,g.|ive3up)H|HNevF8| know|ay itH|make3|4 | you|HYou| I'm |@? |;onna |give|tell| g| to|th|ing |nd| a|A| w| s|D|'re|er|G|\n"
.Split('|').Aggregate("WeE noCtrangFs< love50 =e rules7so do IHA full commitment'sBhat6=ink>of5Bouldn't;et =is from@ny o=F;uy$H#A? if3ask me*Don't : me4E<o bli?<Cee%%HH--&&#$%%",(x,t)=>x.Replace(f++.ToString(),t)));

T-SQL

CREATE TABLE #t(i int IDENTITY(35,1),t varchar(1000) COLLATE Latin1_General_CS_AS) 
DECLARE @s varchar(4000)
SET @s = REPLACE(REPLACE('
INSERT #t SELECT ''We"ve0n each o=F forCo long5r hear+@ch>but5E<oChy<C1InsideBe bo=0Bha+;o>on
We0 =e;ame7weE8pl1|
I justBanna :4*Gotta 2u?Fsta?%|
/93up/let3down/run@rou?7desFt4/2cry/say;oodbye/:@ lie7hurt4|(Ooh)/9,nevF89
(G.|"|(|)| how6feeling
|t"s been|, |(Ooh,g.|ive3up)
|
NevF8| know|ay it
|make3|4 | you|
You| I"m |@? |;onna |give|tell| g| to|th|ing |nd| a|A| w| s|D|"re|er|G'''
,'"',''''''),'|','''
INSERT #t SELECT ''')
EXEC(@s)
SET @s = 'WeE noCtrangFs< love50 =e rules7so do I
A full commitment''sBhat6=ink>of5Bouldn"t;et =is from@ny o=F;uy$
#A? if3ask me*Don"t : me4E<o bli?<Cee%%

--&&#$%%'
SELECT @s = REPLACE(@s, CHAR(#t.i), #t.t) FROM #t
PRINT @s

C # - ลองครั้งที่สองนี่เป็นการลองวิธีอื่น การบีบอัดทำโดยคอมพิวเตอร์เพื่อหาสิ่งทดแทนที่ดีที่สุด การค้นหานั้นเป็นไปตามลำดับและเรียงตามขนาดดังนั้นจึงไม่จำเป็นต้องทำการค้นหาใหม่อย่างไรก็ตามรหัสที่ใช้ในการค้นหานั้นมีประสิทธิภาพน้อยกว่าที่ฉันคิดไว้ ใช้ชีวิตและเรียนรู้

static void Main()
{
var o="6Gn/tr7g0s,+lo-FJrules.Ds+d+}$z8ull commit9nKLtR1ink:ofF23ldn't4et1is8rom.nyUguy]Xn_zDifC.sk 9[\"5't,I 9CM+bliDt/;^^$N<N\\<X_]^^";
for(char z='\0',y;z<12;z++)
{y='_';for(int i=0,f=333,k=65;i<z;k=y-"'?MRTQNL@(} "[i++]){
for(;y>"^]\\[ZVROB) y"[i];){
f-=k;
o=o.Replace(y--.ToString(),"AWGINODY\n,&'()e o  tve a+ser,h wou gon{ean fmeH eeS)tCowaDr oti- y3nd $~P$#3'r*ingellQ1*t's2haGtoT%4ache-@V kn> }'mBC up$(!oh Ah0 g5na K b;n $$6'-QmakeC ay it$ h>R8;lH$<T)EgB% nPgB$(|$} just27na,IC[|Ata Yund0st7d^$EgSEle= d>nErun.r3D?des0=EYcryEsay4oodbyeEtI. li*?hur= eOUfo@s+l5gF@hearWO:butFM/hy,/Z}nsid*w*bAhQLWgo:5$6Jgam*?weGVplZ".Substring(f,k));
if(y==' '){y='~';i++;}}}}
Console.WriteLine(o);
}

ลองครั้งที่ 3 ที่ C # ครั้งนี้ฉันต้องการด้วยตัวอักษร \ b, \ r, \ t คุณสามารถใช้ \ rN \ n เพื่อแทนที่อักขระแรกในบรรทัดด้วยตัวพิมพ์ใหญ่ N แต่จริง ๆ แล้วไม่ได้บันทึกอักขระ ฉันสร้างชื่อแทน \ b เพื่อเลื่อนเคอร์เซอร์ไปด้านหลังแล้วเขียนทับข้อความที่มีอยู่ แต่ไม่มีพื้นที่ที่บันทึกไว้นี้และในที่สุดฉันก็ยังแย่กว่ากลยุทธ์การค้นหาและแทนที่ที่ง่าย

static void Main()
{
    var f='*';
    Console.Write("C04EC0let8downEC0run arouKJdes>t8EC06cryEC0say goodbyeEC0tePa lie Jhurt8E|CWe'veQn each=for sLlongC7r hear?<achFbutC75HoLshyHLs;Inside we bothQ wha?<goFonCWe3ga@ Jwe51pl;|,|CI just wannaHell82CGotta 6und>stJC|(Ooh)C0:, 91:EC(4)R(GC|(Ooh, 4)C|91| gonna |how I'm feelF|QHhe |:8up|'re|make8|You| you |nev>|give|ay itC|been | oth> |er|t's |me|A|EC0|\n|D|RN|ing |G| t|I|aK|nd |o |n't |N|O|ll | know|\r"
    .Split('|')
    .Aggregate(
        "We5 nLstrang>sHLloveC73rules JsLdLICA fuPcommit@n?what I'mHhinkFofC7 wouldMgetHhis from any=guy-*C+AKif8ask @ 2CDoMteP@8\b5HoLbliKtLseeC*C*CC//..+-*C*C*",
        (x,t)=>x.Replace(f++.ToString(),t)));
}

ฉันชอบREPLACEวิธีการที่ฉลาดโดยเฉพาะกับ SQL แบบไดนามิก แต่มีหลายวิธีในการเล่นกอล์ฟที่มากขึ้น: ใช้@เป็นตัวแปรแทน@sทำให้เป็นตารางถาวรtแทน#t(คุณไม่ต้องล้างข้อมูลด้วยตัวเอง) กำจัดคำสั่ง COLLATE 29 ตัวอักษรและเพียงต้องการให้มันรันบนเซิร์ฟเวอร์ / ฐานข้อมูลด้วยการเปรียบเทียบที่เหมาะสมใช้varchar(999)หรือvarchar(max)พื้นที่สีขาวที่ไม่จำเป็นจำนวนมากรอบเครื่องหมายเท่ากับและเครื่องหมายจุลภาค ฯลฯ
BradC

587 - ลิงก์ไปยัง pastbin เนื่องจากข้อจำกัดความยาวของข้อคิดเห็น
dana

7

PHP, 591 585 568 564 ไบต์

<?=strtr(ucwords(str_replace(range('-',a),split(q,"/3/let@d_n/runxarouPxBdese5/?cry/sayxKodbye/7VliLBhu5
q;)/4,x04
 3)q
0qneOUCq;,x3)q
ixju[TNnax7J6KttV?uPR[Nd
q4@upqgiOqrZJqxh_If`lA
qtellxq
S'O=nxeach<foUsMlXg>UheartDachAxbut>HshyEsG\sidLwLboY=FDKAxX
S:gamLB9CplGqS'rLq=QhLq
 oohqxoYRxqxkn_q
Jqmake@qxJxq\gqNdxqgXnVq'^b`nxqQMqThatqayxit
q'rLtoMqxz'mxqyouq".join(q,str_split(goexoxanvendxterwexwrxaxmeonthtxstinulsxoweea,2))),"9nM[rNgRsEloO>:r]e^BsMdMz
Vf]lxcommitWnt'sFIY\kAxof>To]dn'ZgetxYi^fromxNy<guy2-8Bif@askxW6dX'tx7mLJHbliPEs`
--11..
82---")),'x z',' (I');

ฉันคิดว่าคุณอาจจะพลาดอะไรบางอย่างในรหัส ดูเหมือนว่าจะทำให้เกิดข้อผิดพลาด: ideone.com/WxIpG
Cristian Lupascu

นี่คือ PHP 5.4 สำหรับเวอร์ชั่นเก่าแทนที่ [z => xx] ด้วย array (z => xx) (และรับ 590 bytes)
เพื่อนที่เศร้า

ใช่แล้วideone.com/o8hdU ใช้งานได้ ดี +1!
Cristian Lupascu

1
โซลูชัน PHP ที่สั้นกว่า (ใช้กฎจากรหัสทับทิมของฉัน): ideone.com/XoW5t
Ed H.

ใช่เดา "LOWERCASE ทุกอย่าง!" เป็นความคิดที่ดีหลังจากทั้งหมด) ดี!
เพื่อนที่น่าเศร้า

7

Ruby, 1,014 ไบต์

ฉันแค่เรียนรู้การเขียนโปรแกรมดังนั้นฉันจะไม่ทำลายสถิติใด ๆ ที่นี่ แต่นี่เป็นงานที่สนุก

def c
  wonts = ['give you up', 'let you down', 'run around and desert you', 'make you cry', 'say goodbye', 'tell a lie and hurt you']
  wonts.each do |w|
    puts "Never gonna #{w}"
  end
  b
end

def b
  puts "\n"
end

def never
  puts "Never gonna give, never gonna give
(Give you up)"
end

def v1
puts "We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand"
b
end

def v2
  puts "We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it"
end

def s1
puts "And if you ask me how I'm feeling
Don't tell me you're too blind to see"
end

def s2
b
puts "I just wanna tell you how I'm feeling
Gotta make you understand"
b
end

def soul
2.times {puts "(Ooh, give you up)"}
puts "(Ooh)"
never
puts "(Ooh)"
never
end

v1
c
v2
s1
b
c
c
soul
b
v2
s2
c
c
c

2
เคล็ดลับ: เปลี่ยนชื่อตัวแปรทุกตัวให้เป็นชื่อตัวละครหนึ่งตัว, ลบการเยื้องและลบช่องว่างรอบตัวดำเนินการ
TuxCrafting

6

GolfScript (511 ไบต์)

สิ่งนี้ใช้การเปลี่ยนแปลงฐานเพื่อแพ็คบิตดังนั้นจึงมีอักขระที่ไม่อยู่ใน ASCII อย่างไรก็ตามมันไม่เหมาะสมที่จะให้คะแนนตัวละครเหล่านั้นด้วยการเข้ารหัส UTF-8 ของพวกเขาเพราะล่ามถือว่าโปรแกรมเป็น ISO-8859-1 ด้วยเหตุนี้ฉันจึงระบุความยาวเป็นไบต์แทนที่จะเป็นตัวอักษร

การเข้ารหัส Base-64:

J4w1DTwkp317WvYq88CFQym52dINzC36obopJBLKCGZZHq1S+tpz79e4/JdDYS2cdIlm+LUARZ1w
wpJyGDhagRfmNaJWjOt8yZIiIFai/7cMAeKucCTyZpkYmCb/7ogGRwfR1dV0z9wEOoIFo0dudezp
ERmcWcJ7X1CUcUsVz17ScmG7T2SbTnooFFINjz7y1yW9i7k9iFTM/afWhI4A/wuqo6jPRezucfGQ
g1xcvmEsidxT+jKCaYv3Gh4lvcfMdklUNqqeQG/tMDVrk0pUQjz5CVFcJ5uYRLAPzfwQI5sUKHzO
rBZrx/hAC9MPISJPKAQLP4dU3Yy14zL/djogoBxkG1DNRMoPEtwHIZmEPwaELWshCTdS+vF+zI6X
ei7BL5bqVhXZdKGqPFjHS0+rQfHUDUfggt/AkIGfV/focklq9IXmqINpS4eroTqzCMLJQpiZiTXm
7jdu1xqm1hftTPEr/VteBOCqKIsx596o+/ZaGRi/opjley/l2bnZi4Z6L+TZsqUqyj4Pfhf4JFiw
9a/kcBffIu2yWmQGgSOeHwcyllCMvL27qtw1+CEKtuya5ITI1oRWUasTSdBWin3XBQePAWEW7dp7
qoiP1osWiicyNTZiYXNlIDE1M2Jhc2VbMF0vKDMwLHtcWzEkKV0vXDIkPSp9L1wsKXstfSslKw==

Hex dump (เอาต์พุตจากxxd):

0000000: 278c 350d 3c24 a77d 7b5a f62a f3c0 8543  '.5.<$.}{Z.*...C
0000010: 29b9 d9d2 0dcc 2dfa a1ba 2924 12ca 0866  ).....-...)$...f
0000020: 591e ad52 fada 73ef d7b8 fc97 4361 2d9c  Y..R..s.....Ca-.
0000030: 7489 66f8 b500 459d 70c2 9272 1838 5a81  t.f...E.p..r.8Z.
0000040: 17e6 35a2 568c eb7c c992 2220 56a2 ffb7  ..5.V..|.." V...
0000050: 0c01 e2ae 7024 f266 9918 9826 ffee 8806  ....p$.f...&....
0000060: 4707 d1d5 d574 cfdc 043a 8205 a347 6e75  G....t...:...Gnu
0000070: ece9 1119 9c59 c27b 5f50 9471 4b15 cf5e  .....Y.{_P.qK..^
0000080: d272 61bb 4f64 9b4e 7a28 1452 0d8f 3ef2  .ra.Od.Nz(.R..>.
0000090: d725 bd8b b93d 8854 ccfd a7d6 848e 00ff  .%...=.T........
00000a0: 0baa a3a8 cf45 ecee 71f1 9083 5c5c be61  .....E..q...\\.a
00000b0: 2c89 dc53 fa32 8269 8bf7 1a1e 25bd c7cc  ,..S.2.i....%...
00000c0: 7649 5436 aa9e 406f ed30 356b 934a 5442  vIT6..@o.05k.JTB
00000d0: 3cf9 0951 5c27 9b98 44b0 0fcd fc10 239b  <..Q\'..D.....#.
00000e0: 1428 7cce ac16 6bc7 f840 0bd3 0f21 224f  .(|...k..@...!"O
00000f0: 2804 0b3f 8754 dd8c b5e3 32ff 763a 20a0  (..?.T....2.v: .
0000100: 1c64 1b50 cd44 ca0f 12dc 0721 9984 3f06  .d.P.D.....!..?.
0000110: 842d 6b21 0937 52fa f17e cc8e 977a 2ec1  .-k!.7R..~...z..
0000120: 2f96 ea56 15d9 74a1 aa3c 58c7 4b4f ab41  /..V..t..<X.KO.A
0000130: f1d4 0d47 e082 dfc0 9081 9f57 f7e8 7249  ...G.......W..rI
0000140: 6af4 85e6 a883 694b 87ab a13a b308 c2c9  j.....iK...:....
0000150: 4298 9989 35e6 ee37 6ed7 1aa6 d617 ed4c  B...5..7n......L
0000160: f12b fd5b 5e04 e0aa 288b 31e7 dea8 fbf6  .+.[^...(.1.....
0000170: 5a19 18bf a298 e57b 2fe5 d9b9 d98b 867a  Z......{/......z
0000180: 2fe4 d9b2 a52a ca3e 0f7e 17f8 2458 b0f5  /....*.>.~..$X..
0000190: afe4 7017 df22 edb2 5a64 0681 239e 1f07  ..p.."..Zd..#...
00001a0: 3296 508c bcbd bbaa dc35 f821 0ab6 ec9a  2.P......5.!....
00001b0: e484 c8d6 8456 51ab 1349 d056 8a7d d705  .....VQ..I.V.}..
00001c0: 078f 0161 16ed da7b aa88 8fd6 8b16 8a27  ...a...{.......'
00001d0: 3235 3662 6173 6520 3135 3362 6173 655b  256base 153base[
00001e0: 305d 2f28 3330 2c7b 5c5b 3124 295d 2f5c  0]/(30,{\[1$)]/\
00001f0: 3224 3d2a 7d2f 5c2c 297b 2d7d 2b25 2b    2$=*}/\,){-}+%+

ในฐานะที่เป็นโซลูชั่นที่ดีที่สุดส่วนใหญ่จะใช้วิธีการที่อิงกับไวยากรณ์ด้วยการแยกสตริงและรวมเพื่อขยายไวยากรณ์ ไวยากรณ์มี 30 กฎและถูกค้นพบโดยการค้นหาโลภ


6

JavaScript, 854 chars (เพิ่มบรรทัดใหม่สำหรับ "การอ่าน")

var a="We're no strangers to love:You know the rules and so do I:A full commitment's what I'm thinking of:You wouldn't get this from any other guy:I just wanna tell you how I'm feeling:Gotta make you understand:Never gonna give you up:Never gonna let you down:Never gonna run around and desert you:Never gonna make you cry:Never gonna say goodbye:Never gonna tell a lie and hurt you:We've known each other for so long:Your heart's been aching but:You're too shy to say it:Inside we both know what's been going on:We know the game and we're gonna play it:And if you ask me how I'm feeling:Don't tell me you're too blind to see:6:7:8:9:10:11:6:7:8:9:10:11:(Ooh, give you up):31:(Ooh):Never gonna give, never gonna give:(Give you up):33:34:35:12:13:14:15:16:4:5:6:7:8:9:10:11:6:7:8:9:10:11:6:7:8:9:10:11".split(':'),
i=0,x;
while(x=a[i++])console.log(a[x]||x)


5

Naive sh / echo - 810 ไบต์

#!/bin/sh
A="ever gonna"
D=" you"
B="ive$D up"
C="$A give"
echo "We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell$D how I'm feeling
Gotta make$D understand"
f(){
echo "
N$C$D up
N$A let$D down
N$A run around and desert$D
N$A make$D cry
N$A say goodbye
N$A tell a lie and hurt$D"
}
f
g(){
echo "
We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it"
}
g
echo "And if$D ask me how I'm feeling
Don't tell me$D're too blind to see"
f
f
echo "
(Ooh, g$B)
(Ooh, g$B)
(Ooh)
N$C, n$C
(G$B)
(Ooh)
N$C, n$C
(G$B)"
g
echo
echo "I just wanna tell$D how I'm feeling
Gotta make$D understand"
f
f
f

5

JavaScript 789 ตัวอักษร

javascript ของฉัน (พิมพ์ด้วย "document.write ()"):

eval('f="18927993248999".replace(/1/g,"Were no strangers to love4You6тe rules and so do I4A full commitmentжs what Iжm тinking of4You wouldnжt get тis from any oтer guy4ю8/g,"I just wanna tellйhow Iжm feeling4Gotta makeйunderstand44ю9/g,"Neverгgiveйupвгletйdownвгrun around and desert youвгmakeйcryвгsay goodbyeвгtell a lie and hurt you44ю2/g,"Weжve known each oтer for so long4Your heartжs been aching but4Youжre too shy to say it4Inside we boт6whatжs been going on4We6тe game and weжreгplay it4ю7/g,"And ifйask me how Iжm feeling4Donжt tell me youжre too blind to see44ю3/g,"ц, gяц, gяц)вгgive, neverгgive4(Gяц)вгgive, neverгgive4(Gя4 ют/g,"thюя/g,"iveйup)4юй/g," you юв/g,"4Neverю4/g,"</br>юц/g,"(Oohю6/g," know юг/g," gonna юж/g,"\'");document.write(f);'.replace(/ю/g,"\").replace(/"))

ฉันเปลี่ยนคำและวลีทั่วไปด้วยตัวอักษรไซริลลิกจากนั้นเปลี่ยนกลับด้วยฟังก์ชัน replace ()

หลังจากที่เนื้อเพลงสั้นลงฉันก็ย่อโปรแกรมของฉันด้วยวิธีเดียวกันและรันโค้ดด้วย eval ()


5

Ruby, 741 678 657 627 619 ไบต์

_="12/3400/5/3/200"
28.times{|i|_.gsub!'120=34589%#^*&@!/?><[]|{}:;~'[i],"We? n{strangers] love/>& the rules!s{d{I/A full commitment's}hat:thinking of/>}ouldn't~et this from;ny<guy/+I just}anna [*@/Gotta make* understand/0+=g#=let* down=run;round!desert*=make* cry=say~oodbye=[; lie!hurt*/+/N^+We've&n each<for s{long/>r heart's been;ching but/>?]{shy] say it/Inside}e both&}hat's been~oing on/We& the~ame!we?|play it/+And if*;sk me@/Don't [ me*?]{blind] see/+8899+(Ooh,~#)/+(Ooh)/N%, n%/(G#)/+^give+ive* up+ever|+ you+ know+ how:feeling+;nd +\n+'re+You+ other +tell+ to+~onna +o + w+ I'm + a+ g".split('+')[i]}
puts _

นี่คือการขยายสัญลักษณ์ซ้ำ สำหรับแต่ละอักขระ 28 ตัวของสตริงในอาร์กิวเมนต์แรกที่gsub!เกิดขึ้นทั้งหมดของอักขระ_นั้นจะถูกแทนที่ด้วยส่วนที่เหมาะสมของสตริงที่สอง (คั่นด้วย+อักขระ)


5

Python 573 ตัวอักษร

sedทางออกของฉันจะไม่ไปอีกต่อไปและมันถูกตีโดยหลายคนดังนั้นฉันจึงไปหาแนวทางใหม่
น่าเสียดายที่มันดีพอสำหรับอันดับที่ 2 (จนถึงตอนนี้) - Ed H. ยังคงอยู่ข้างหน้าฉันมาก

x="WM n=straQRsF=loB7Erules3s=d=IXA full commitSnt'sKhatVFhink;of7KTldn'tUetFhis fromLny9guy.-AC if?Lsk S1Don'tFP S?<bliCF=see//X82)8002)-.//"
i=45
for r in"XXW'BHn each9for s=loQ7r hear6ach;but7<shyF=s@InsideKe bothHKha6go;onXWEgaS3weM:pl@|XI justKannaFP?1Gotta >uCRstaC/|X4g24let? down4runLrTC3desRt?4>cry4sayUoodbye4tPL lie3hurt?|2)J)4giB, n5giBX(G| howV feeliQX|iB? up|LC |XN5|eBr:|t's been |XYT|J,U| othR |Uonna |iQ |MFo=|o |make? | yT|ay itX|A|ve|nd|D|HFhe | t|G| know|I|X(Ooh| w| a|'re|N|O|ell|ng|er|me|ou| g| I'm|We|\n".split("|"):x=x.replace(chr(i),r);i+=1
print x

หมายเหตุ :

  1. แนวคิดหลักถูกยืมมาจาก Ed H. โดยใช้อักขระแทนเพื่อแทนที่แทนที่จะระบุในกฎการแทนที่แต่ละกฎ

  2. ทางของฉันที่จะจัดการกับตัวอักษรที่มีอยู่ในเพลงจะแตกต่างจากของเอ็ด - ฉันเพียงแค่ให้แน่ใจว่าจะแปลแต่ละคนเพื่อตัวเอง (และถ้ามันตามมาเสมอโดยสิ่งที่เพิ่มเช่นกันซึ่งทำงานเฉพาะW)

  3. รหัสถูกสร้างขึ้นโดยสคริปต์ที่ค้นหาคำแปลที่ดี ตอนแรกฉันใช้อัลกอริธึมโลภซึ่งจะนำไปสู่การลดที่ดีที่สุด จากนั้นฉันก็พบว่าการปรับแต่งเพื่อให้ได้สายที่ยาวกว่าจะช่วยปรับปรุงให้ดีขึ้นเล็กน้อย ฉันคิดว่ามันยังไม่ดีที่สุด


ฉันก็พยายามที่จะสร้างสตริงผ่านอัลกอริทึมโลภซึ่งจบลงด้วยการเพิ่ม 11 ตัวอักษร ฉันสังเกตุเห็นว่าโซลูชั่นของไพ ธ อนทั้งหมดมาบรรจบกันในรูปแบบที่เหมาะสมที่สุดไม่มากก็น้อย ฉันเดาว่ามันจะไปกับ 'ทางเดียวเท่านั้นที่ชัดเจนต่อพวกเขา'
Optimus

ในอดีตฉันพบว่าบางครั้งมันทำงานเพื่อแก้ไขสคริปต์ดังกล่าวเพื่อใช้อัลกอริทึมส่วนใหญ่โลภแทนการเพิ่ม slop เล็กน้อยเพื่อสุ่มเลือกตัวเลือกที่สองหรือสามจากนั้นเรียกใช้ซ้ำ ๆ กำลังมองหาการปรับปรุง (หรือถ้าฉันมีแรงบันดาลใจพอให้เขียนโค้ดการค้นหาแบบฮิวริสติกเหมือนการจำลองแบบการอบ)
breadbox

ฉันใช้การจำลองแบบง่าย ๆ ซึ่งแก้ไขการจัดอันดับอัลกอริทึมโลภของฉันในนิพจน์ที่มีค่าสัมประสิทธิ์ตัวแปรตามความยาวของรูปแบบและจำนวนการนับทำประมาณ 100,000 จำลองเท่านั้น (การค้นหารูปแบบที่ใหญ่ที่สุดช้ามาก) โดยสุ่มค่าสัมประสิทธิ์ และ 100 ที่มีการแจกแจงแบบเกาส์ประมาณศูนย์) พบคู่ที่ให้ 15 ตัวอักษรน้อยกว่าสตริงที่กระทืบด้วยตนเองของฉันลดการแก้ปัญหาของฉันเป็น 590 ตัวอักษร ฉันเดาว่าฉันจะปล่อยให้มันข้ามคืนเพื่อดูว่ามันให้ผลที่ดีกว่าหรือไม่
Optimus

@ ออปติมัสฉันคิดว่าการแปลสองคำแรกนั้นชัดเจนและคุณสามารถเขียนโค้ดได้ยาก นี่เป็นการเพิ่มความเร็วในการค้นหาของฉันอย่างมีนัยสำคัญ ตรรกะของฉันช้ามาก - ~ 30 วินาทีสำหรับการวิ่งครั้งเดียว - ดังนั้นจึงไม่มีประโยชน์สำหรับการจำลอง ฉันสามารถลองปรับให้เหมาะสม
ugoren

@ugoren ฉันโพสต์รหัสการจำลองของฉันในคำตอบของฉันมันทำงานในประมาณ 0.5 วินาทีต่อการทำงานและใช่แล้วฉันทำ hardcode 3-4 ขั้นตอนแรกซึ่งลดลงโดยประมาณ 30 chars ดูเหมือนว่าจะไม่สามารถผ่านขั้นต่ำได้ คุณดูและแนะนำบางอย่าง
Optimus

5

Golfscript, 708 702 699 691 ไบต์

"Never gonna ":g;
"I just wanna tell you how"" I'm feeling":i"
Gotta make you understand"++:j;
{n"give you up
let you down
run around and desert you
make you cry
say goodbye
tell a lie and hurt you"n/{n g@}%}:^;"

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
":_;
"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
"j
^
_
"And if you ask me how"i"
Don't tell me you're too blind to see"
^^
n
n
"(Ooh, give you up)
"."(Ooh)
"g"give, never gonna give
(Give you up)"++.n\_
j
^^^

ฉันอาจจะหายไปบางสิ่งบางอย่าง แต่ฉันไม่เห็นเหตุผลสำหรับบล็อก คุณไม่สามารถเพียงแค่ใช้เช่น" I'm feeling":i;?
Peter Taylor

@PeterTaylor คุณพูดถูก บล็อกมีความจำเป็นก็ต่อเมื่อฉันกำหนดสตริงจำนวนมากให้กับตัวแปร ขอบคุณมาก! สิ่งนี้ตัดออก 6 ตัวอักษรและเพิ่งให้ความคิดอื่นกับฉันที่ฉันสามารถลองได้
Cristian Lupascu

ใช่มันใช้งานได้! แทนที่ฉันจะกำหนดบล็อกให้กับตัวแปรjฉันได้กำหนดสตริงที่ต่อกันสามรายการ (ถูกลบ{และ}แต่เพิ่ม++สำหรับการต่อข้อมูล) นี้ได้รับอนุญาตให้ฉันไปประกาศแบบอินไลน์เมื่อเขียนเนื้อหาของi j
Cristian Lupascu

ฉันคิดว่าคุณสามารถประหยัดอีกไม่กี่โดยดึงขึ้นบรรทัดใหม่นำgและสำหรับนักร้องโดยใช้สายเดียวกับขึ้นบรรทัดใหม่แล้วn/g*
Peter Taylor

ความคิดที่ดี! ฉันไม่สามารถเปลี่ยนแปลงได้gเนื่องจากใช้ไปจนจบ (จริง ๆ แล้วเป็นไปได้ แต่จะมีค่าใช้จ่ายเพิ่มอีก 1 ถ่านในที่สุด) อย่างไรก็ตามวิธีการแบ่ง / พับเพื่อแทรก g ที่จุดเริ่มต้นของทุกบรรทัดเป็นตัวช่วยที่ดี
Cristian Lupascu

5

Java, 858 ไบต์

interface a{static void main(String[]A){String b="I just wanna tell you how I'm feeling\nGotta make you understand\n\n",B="Never gonna give you up\nNever gonna let you down\nNever gonna run around and desert you\nNever gonna make you cry\nNever gonna say goodbye\nNever gonna tell a lie and hurt you\n\n",c="We've known each other for so long\nYour heart's been aching but\nYou're too shy to say it\nInside we both know what's been going on\nWe know the game and we're gonna play it\n",C="(Ooh, give you up)\n",d="(Ooh)\nNever gonna give, never gonna give\n(Give you up)\n";System.out.print("We're no strangers to love\nYou know the rules and so do I\nA full commitment's what I'm thinking of\nYou wouldn't get this from any other guy\n"+b+B+c+"And if you ask me how I'm feeling\nDon't tell me you're too blind to see\n\n"+B+B+C+C+d+d+"\n"+c+"\n"+b+B+B+B);}}

ว้าว. ฉันไม่คิดว่าฉันจะบีบอัดอย่างหนักนี้

Ungolfedในรูปแบบที่มนุษย์อ่านได้:

interface a {
    static void main(String[] A) {
        String b = "I just wanna tell you how I'm feeling\n"+
                   "Gotta make you understand\n\n";

        String B = "Never gonna give you up\n"+
                   "Never gonna let you down\n"+
                   "Never gonna run around and desert you\n"+
                   "Never gonna make you cry\n"+
                   "Never gonna say goodbye\n"+
                   "Never gonna tell a lie and hurt you\n\n";

        String c = "We've known each other for so long\n"+
                   "Your heart's been aching but\n"+
                   "You're too shy to say it\n"+
                   "Inside we both know what's been going on\n"+
                   "We know the game and we're gonna play it\n";

        String C = "(Ooh, give you up)\n";

        String d = "(Ooh)\n"+
                   "Never gonna give, never gonna give\n"+
                   "(Give you up)\n";

        System.out.print(
            "We're no strangers to love\n"+
            "You know the rules and so do I\n"+
            "A full commitment's what I'm thinking of\n"+
            "You wouldn't get this from any other guy\n"+
            b+
            B+
            c+
            "And if you ask me how I'm feeling\n"+
            "Don't tell me you're too blind to see\n\n"+
            B+
            B+
            C+
            C+
            d+
            d+
            "\n"+
            c+
            "\n"+
            b+
            B+
            B+
            B
        );
    }
}

ฉันได้คำตอบ 14 ข้อนี้ ฉันเล่นกอล์ฟได้ดีใน Java หรือเป็นเพราะเนื้อเพลงของเพลงนี้บีบอัดได้ง่ายอย่างน่าประหลาดใจ?
dorukayhan

คุณไม่สามารถกำหนดตัวแปรเช่น String a = "1", b = "2"; แทนที่จะเป็นข้างบน? บันทึกสองสามไบต์: P
Mario Ishac

@MarDev ฉันสร้างสตริงเช่นนั้นในโปรแกรม golfed อย่างไรก็ตามการทำเช่นนั้นทำให้ความเจ็บปวดในการอ่านง่ายขึ้นดังนั้นฉันจึงทำเช่นนั้นString foo; String bar;เมื่อไม่อวดดี
dorukayhan

"Never gonna" เหล่านั้นทั้งหมดสามารถปรับให้เหมาะสมเช่นกันโดยการแยกออกเป็นตัวแปร
masterX244


4

JavaScript, 1428 1451 883 *ตัวอักษร

ไม่ใช่ทางออกที่สั้นที่สุด แต่ที่นี่จะไป

d="(Give you up):(Ooh):(Ooh, give you up):A full commitment's what I'm thinking of:And if you ask me how I'm feeling:Don't tell me you're too blind to see:Gotta make you understand:I just wanna tell you how I'm feeling:Inside we both know what's been going on:Never gonna give you up:Never gonna give, never gonna give:Never gonna let you down:Never gonna make you cry:Never gonna run around and desert you:Never gonna say goodbye:Never gonna tell a lie and hurt you:We know the game and we're gonna play it:We're no strangers to love:We've know each other for so long:We've known each other for so long:You know the rules and so do I:You wouldn't get this from any other guy:Your heart's been aching but:You're too shy to say it:".split(/:/);"hk3l76o9bdcefojmn8g45o9bdcefo9bdcefo221a01a0oimn8go76o9bdcefo9bdcefo9bdcef".split("").map(function(i){return d[parseInt(i,25)]}).join("\n")

ตรรกะของโซลูชันค่อนข้างง่าย:

d="dictionary:of:uniqe:lines".split("/:/");
"012345".split("").map(function(i){return d[parseInt(i,25)]}).join("\n")

* แน่นอนว่าการแก้ปัญหาจะสั้นลงมากเมื่อจดบรรทัดที่ไม่ซ้ำกันแทนที่จะเป็นคำที่ไม่ซ้ำกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.