我们对打高尔夫球并不陌生,您知道规则,我也是


252

编写最短的程序,打印出瑞克·阿斯特利(Rick Astley)的“ Never Gonna Give You Up”的全部歌词

规则:

  • 必须完全按照上面的pastebin *中的显示输出歌词。这是原始转储:http : //pastebin.com/raw/wwvdjvEj
  • 不能依赖任何外部资源-所有歌词必须由代码生成/嵌入在代码中。
  • 除非您在代码中包含完整的算法,否则不要使用现有的压缩算法(例如gzip / bzip2)。
  • 使用任何语言,以最短的代码为准。

2012年6月1日更新:
对于包含非ASCII文本的解决方案,解决方案的大小将基于UTF-8编码以字节为单位。如果您使用无法在UTF-8中编码的代码点,则不会将您的解决方案视为有效。

更新,2012年6月7日:
谢谢大家的出色解决方案!明天下午我将接受最简短的回答。现在,彼得·泰勒(Peter Taylor)的GolfScript答案正在获胜,因此,如果您想击败他,就可以取得一些进步!:)

* Pastebin中有一个错字(第46行,“知道”应为“已知”)。您可以决定是否复制它。


4
@ w0lf你是对的。我只扫描歌词以验证其准确性,我一定错过了那首。我会接受“知道”或“已知”。
多项式

10
短短3天内观看次数超过26k。哇...
加菲2012年

9
这是如何在世界范围内产生如此多的观点和选票的?无论他做什么,我都会对其进行反向工程。
PhiNotPi 2012年

39
@PhiNotPi好运的逆向工程“杰夫·阿特伍德在推特上给您”。
面包箱2012年

9
UTF-8的限制没有任何意义。如果我的代码编码为UTF-16或Latin-1时较短,该怎么办?您应该计算字节数或字符数,但是将编码权交给作者。
Timwi 2014年

Answers:


81

Ruby 576557556556(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。它比我最初得分554的556个char解决方案的得分略好。
  • 我用“已知”代替“知道”。这使得经文重复相同,并且应该使压缩更好
  • 我最初通过重复搜索将导致当前代码大小减少最多的替换来优化规则。但是,我发现RiderOfGiraffe的替换规则(略)比我的好,所以我现在使用他的规则的修改版本。
  • 我花了一些时间对规则进行重新排序,以便单次替换可以解压缩所有内容。
  • 由于替换规则中计算出的初始字符,我的规则列表为连续ASCII范围内的每个字符都有一个规则。我发现拥有一些“虚拟”替换规则比使用所有真实规则和编码最终文本修正替换更好地实现了代码大小。
  • 这个例子很小,您可能可以成功编写一个程序来找到最佳(总成本最低)的规则集。我不希望这样做会使大小减少超过几个字节。

较旧的实现

这个较早的实现具有576个字符,并从ugoren的bash / sed实现的替换规则开始。忽略替换变量重命名,我的前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 2012年

我在您的程序中找到555个字节(没有结尾的换行符)。
2012年

1
OP的计分方法是在ascii源代码中排除换行符,因此看来应该计分554
res 2012年

很好的解决方案!:)
多项式2012年

看起来最短的解压缩代码是在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并替换XNever gonna
这是通过运行sed一组以形式存在的规则来实现的s/X/Never gonna /g
替换项可以嵌套。例如,Never gonna很常见,但gonna在其他情况下也很常见。因此,我可以使用两个规则:s/Y/ gonna/gs/X/NeverY/g
添加规则时,部分歌曲文本将替换为单个字符,因此变得更短。规则变长了,但是如果替换的字符串又长又频繁,那是值得的。
下一步是从sed命令本身中删除重复项。该序列s/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字节(当然,没有引擎),因此必须有改进的空间(尽管我看不到如何添加霍夫曼编码或类似这样便宜的东西)。
<<Q(或<<_)用于读取直到给定字符。但是脚本(或反引号表达式)的结尾就足够了。有时这会引起警告。

较旧和较简单的解决方案,共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&
面包店2012年

这是到目前为止最短的时间,也是我的最爱。我想知道有人提出sed解决方案需要多长时间:)
多项式

@breadbox,剪切和粘贴确实带来了这个空间。我将其删除,保存了4个字符。使用&它,您将获得5.
ugoren

2
@res,添加了更好的解释。
ugoren 2012年

1
谢谢,特别是“更详细的解释”链接; o))))
2012年

72

空格-33115个字符

StackExchange砍断了我的答案,这是来源:https : //gist.github.com/lucaspiller/2852385

不太好...我想我也许可以缩小一点。

(如果您不知道什么是空格,请访问:http : //en.wikipedia.org/wiki/Whitespace_(programming_language)


2
我猜您使用了一些工具将其编译为空格?
evilcandybag 2012年

53
+1用于创建我在CodeGolf上见过的最长的解决方案。
多项式2012年

6
(+1)仅使用逐个字符直接处理,就可以将其减少到27,493字节(如果使用较不严格的WS解释器,则可以减少到25,623字节)-本质上是1,943个“推送并输出”语句,没有跳转,没有循环,没有子例程,没有用于重用的存储/检索值-因此长度仍然可以大大减少。
2012年

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
真的很棒。
吉姆·布莱克勒

由于in作为g的额外成员,因此for in循环可以在控制台中将其破坏。if(g.indexOf(g[i])!=-1)e=修复之前添加。
Tesserex 2012年

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#,就已经成为我的赢家。这是一门很棒的语言!:)顺便说一句:您可以通过删除等号周围的空格来节省一些字符。
克里斯蒂安·卢帕斯库

3
另外:代替var s1="a";var s2="b";尝试使用string s1="a",s2="b"; 如果您有2个以上的声明,则较短。
克里斯蒂安·卢帕斯库

您可以通过放置领先的空格!并将其从其他任何地方删除,来消除许多角色。
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)很好。顺便说一句,我发现没有尾随换行符的588个字节。
res 2012年

17

脑操-9905

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

可以肯定的是,通过调整它我可以变得更好一些,但这目前还不错。假设此文本比原始文本大得多没有问题。


我认为您可以改用Unary打高尔夫球。
罗曼·格拉夫(RomanGräf)

这似乎是可以打高尔夫球的……
MilkyWay90

16

Scala,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+1char,而我使用L+N+2。但是,你的解压缩代码是102个字符,而我的是40
ugoren

@ugoren-确实;在这方面,Scala太冗长了,没有超过62个生产性替代要进行。尽管如此,我还是认为这是一种有趣的方法(与您一样)。
雷克斯·克尔

有趣,但在REPL中对我不起作用。最后,Need需要进行另一轮封闭交易。但随后它起作用了。
用户未知

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递减到零,因此s指向正确的规则)

  • 规则0表示下一个字符应大写(通过在代码中设置k = 32),这将释放更多空间来为规则添加更大的连续字符范围

  • main(..)以1调用(按照零参数C程序约定),因此规则1是根规则

代码的演变

  • 由于ugoren的建议,再减少了9个字节

  • 通过算法创建表(而不是手动创建表)并通过“'”提示,减少了36个字节

  • 通过将表从char * []更改为单个字符串,其中'&'分隔部分,将其减少了15个字节

  • 得益于ugoren的更多技巧,剃了又19个字节

  • 通过添加更多规则来减少31个字节,使特殊规则大写,从而为规则索引留出更多空间。

  • 归功于urgoren的更多提示,并略微调整了规则,从而减少了10个字节


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

啊!谢谢,现在已包含在代码中。
baby-rabbit

另外,"\'"不需要翻译。"We're"是有效的字符串。ing是更好的候选人。
ugoren 2012年

真好。可以应用几种标准的高尔夫技巧:d(int n)-> d(n)。更改*s=='~'*s-'~' and reverse the ?:, also saving parenthesis around !n?..:. Using 126 instead of 0'〜'`没有用,但是为什么~呢?
ugoren 2012年

另外,您不需要两个函数-进行main递归。最初的电话是main(1)不是d(0),但它可以与(可能是导致被处理~s)。此外,最好的替代方法~是制表符(ASCII 9-一位数字)。
ugoren 2012年

14

Perl中,724个 714 883字节

因此,对惩罚使用Latin-1的规则进行的更改杀死了我的解决方案。但是,这是一种我不希望删除它的足够不同的方法,因此,这是一个受限制的版本,根据新规则,它仅使用7位ASCII,而且大小大为增加。

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

当然,此处的控制字符仍然被弄乱,因此您仍然要使用base64编码:

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字符。我不确定哪个是真的。
多项式2012年

1
@Polynomial我也不知道,但希望有人会认识并启发我们。
克里斯蒂安·卢帕斯库

5
在这种情况下,我认为应该是字节,因为这是字符串组成的内容。(如果字节流完全由有效的UTF-8序列组成,则完全是巧合。)
面包店

11
这看起来比一般的Perl脚本更具可读性!
阿戈斯2012年

2
(您知道,如果必须要计数字节而不是字符,我不会抱怨APL是否
受阻

11

蟒蛇781 731 605 579个字符

当我初次看到它时,会有很多更好的答案,但是我确实在我的python脚本上浪费了很多时间,所以我将以任何方式发布它,希望能进一步缩短它的建议真是太棒了,

编辑:由于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

然后,我要求我的劣质笔记本电脑无限运行,为分配随机值lengthWeightcountWeight并获得不同的最终压缩大小,然后将最小压缩大小的数据存储在文件中

在半小时左右的时间里,它想到了上面的字符串(我尝试进一步修改一下,看是否可以缩短代码),并且它不会再降低了,我想我在这里遗漏了一些东西。

这是我的代码,它也max_pattern很慢(注意:代码吐出的字符串类似于我以前版本的解决方案中的表格,我手动处理它来获取当前表格,方法是在python shell中手动创建)

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 2012年

减少126个字符,这很有趣
Optimus

您的程序似乎只有587个字节长(unix格式),比588的几个答案少一个。–
res

感谢您指出这一点,实际上我的vim在Python文件的末尾添加了结尾行
Optimus

我添加了一些有关如何获得解决方案的信息,我必须在某处做错了什么,最低限度在某个时候被卡住了,但显然是Ed。H表现更好,因此还有改进的余地。
Optimus 2012年

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字节

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字符。输出大部分使用小写字母,但是有足够的大写字母和标点符号要求用其自身替换字符,然后在修复阶段重新映射一些字符,或者对规则进行排序,以便较早地替换有问题的字符。使用替代正则表达式的语言也意味着在正则表达式中存在一些具有特殊含义的字符:. + * \ ?

我的原始方法在解码器中有63个字节,在规则中有521个字节。我花了很多时间来优化规则,这尤其棘手,因为短规则可能会重叠。通过一点点欺骗公式,我将解码缩减为55个字节,将规则缩减为485。通常,两次出现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字节,我发现他正在使用的规则还有改进的余地。我在Perl中确实有一个52字节的解码器,但是由于需要反向运行该范围,因此无法将其用于此解决方案。


8

PHP 730 707个字符

<?$ l ='您'; $ n ='永远不会'; $ z =“ give $ l up”; $ m =“
$ n $ z
让我们失望
$ n奔跑而沙漠$ l
哭泣
$ n说再见
$ n撒谎和伤害$ l

“; $ o =”
我们认识很久了
你的心一直在痛,
你不好意思说
内部我们都知道发生了什么事
我们知道游戏,我们会玩
“; $ p =”(Ooh,$ z)“; $ r =”($ z)“; $ g =”我的感觉“; $ s =” $ n给予,$ n给予“; $ t =“我只想告诉$ l $ g
要使我理解“; echo”我们对爱不陌生
你知道规则,我也知道
我想的是全面承诺
你不会从任何其他人那里得到这个
$ t
$ m $ o
如果我问我克
不要告诉我,我太盲目看不见
百万美元
$ p
$ p
(哦)
$ s
$ r
(哦)
$ s
$ r
$ o
$ t
$ m $ m $ m”;

1
您可以通过将“ You”和“ you”放入变量中来使其更短。
多项式

@PeterTaylor,感谢您的注意,这是一个错字。
l0n3sh4rk'5

@多项式,完成!
l0n3sh4rk'5

$s="Never gonna give...可以用来缩短$n
拉马先生2012年

1
建议也将“ give”设为变量。它在5个地方使用。
Glen Solsberry 2012年

8

Perl的- 589 588 583 579 576个字节

每个规则由一个1个字符的头部,一个主体和一个下划线组成。只要可以将规则从开头切掉,规则的标题就会在文本的其余部分中替换为规则的正文。给定第一个规则的开头,所有后续规则的开头都是从变量$ i生成的。

由于下一条规则的开头位于上一条规则的文本开头,因此最后一条规则将创建一个不再删除的字符。我必须选择一系列名称,其中最后一个将是“ W”,因此我可以从歌词开头删除原始的“ W”,并用规则替换代替它。

编码是通过Python脚本使用简单的爬坡算法完成的。

这是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非常了不起)

这是生成它的Python代码:

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打高尔夫球。在这个简短的代码段中,您至少可以减少五个字符(不需要的括号)。
面包箱2012年

5个字符?我有一个使用for循环,2个用于eval-parens,1个用于未使用的regex-modifier,但是现在我陷入了困境。(仍然在擎天柱之前:D)
quasimodo,2012年

尝试while对循环使用后缀形式;这可以让您放弃括号和括号。另一个想法:弄清楚如何使用say而不是print做输出。
面包箱2012年

@quasimodo不再了,您不是。只是想说一次:P
Optimus

2
是的,这很有趣。但我想我真的应该在这里停下来,我不想想我在此上浪费的所有时间:D
quasimodo

8

Python 2.7版,975个 803字节

不是最大的-我(现在)希望python能够像这样格式化扩展。las,不是。

编辑:使用其他格式的语法模拟扩展(..)

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个字符

灵感来自sed示例。我所做的唯一主要更改是使查找连续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#-第二次尝试这是尝试另一种方法。压缩完全由寻求最佳替代品的计算机完成。查找是顺序的,并且按大小排序,因此不需要进行倾斜查找,但是,执行查找的代码效率比我想象的要低,因此最终总共要多花127个字符!活到老,学到老。

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);
}

第三次尝试使用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(您不必自己清理),摆脱了29个字符的COLLATE语句,只是要求其在服务器/数据库上使用适当的排序规则,使用运行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 2012年

这是PHP 5.4。对于较旧的版本,将[z => xx]替换为array(z => xx)(并获得590字节)
一个可悲的家伙

是的,ideone.com/o8hdU可以工作。不错,+ 1!
Cristian Lupascu 2012年

1
较短的PHP解决方案(使用我的ruby代码中的规则):ideone.com/XoW5t
Ed H.

是的,猜猜“一切都小写!” 毕竟是个坏主意)很好!
可悲的家伙2012年

7

Ruby,1014字节

我只是在学习编程,所以在这里我不会打破任何记录。但是,这是一个有趣的任务。

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

十六进制转储(来自的输出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个字符(为“可读性”添加了换行符)

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

天真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

红宝石,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 _

这是迭代符号扩展。对于to的第一个参数中字符串的28个字符中的每个字符,第二个字符串的相应部分(由字符分隔)将替换gsub!该字符中所有出现的字符。_+


5

Python,573个字符

我的sed解决方案无法继续进行,并且受到了很多人的青睐,因此我选择了一种新方法。
不幸的是,仅排在第二名到第三名就足够了(到目前为止)-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. 我处理歌曲中存在的字符的方式与Ed的处理方式不同 -我只是确保将每个字符都翻译成自己(如果总是跟随某些内容,则也添加它,这仅适用于W)。

  3. 该代码由寻找良好翻译的脚本生成。最初,我使用了贪心算法,该算法仅采用能提供最佳还原效果的算法。然后我发现,对其进行调整以使其更喜欢较长的字符串会有所改善。我想这仍然不是最佳的。


我也尝试通过贪心算法生成字符串,最终增加了11个字符。我注意到,所有的python解决方案都收敛到或多或少相似的最佳形式。我猜想这与他们的“唯一显而易见的方式”相伴。
Optimus 2012年

过去,我偶尔会发现它可以修改此类脚本以改用大多数贪婪的算法,而是添加一些斜率以随机选择第二或第三名,然后重复运行寻找改进。(或者,如果我有足够的动力,可以编写启发式搜索(例如模拟退火)。)
面包房

我运行了一个简单的模拟,修改了一个贪婪算法的排名,该表达式在模式长度和计数数量具有可变系数的表达式上进行,仅围绕100000次模拟(发现最大的模式非常慢)进行了随机值(在-100之间)的模拟和100,且高斯分布在零附近),结果发现这对货币对比我手动处理的字符串减少了15个字符,从而使我的解决方案减少到590个字符。我想我会让它运行一整夜,看看它是否会产生更好的效果。
Optimus

@Optimus,我认为前两个翻译很明显,您可以对它们进行硬编码。这大大加快了我的搜索逻辑。我的逻辑非常慢-一次运行大约需要30秒-因此对于仿真没有用。我可以尝试对其进行优化。
ugoren 2012年

@ugoren我在答案中发布了我的模拟代码,它每次运行大约需要0.5秒,是的,我已经对前3-4个步骤进行了硬编码,从而将其减少了大约30个字符,似乎无法超过最小值,可以您看看并提出一些建议。
Optimus 2012年

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

我可能会遗漏一些东西,但看不到出现障碍的原因。您不能只使用eg " I'm feeling":i;吗?
彼得·泰勒

@PeterTaylor你完全正确;仅当我将多个字符串分配给变量时才需要块。非常感谢!这剥离了6个字符,只是给了我另一个可以尝试的想法。
克里斯蒂安·卢帕斯库

是的,它有效!j我没有为变量分配块,而是分配了三个串联的字符串(已删除{},但++为串联而添加了)。这使我i在编写的内容时可以内联声明j
克里斯蒂安·卢帕斯库

我认为您可以通过g使用带换行符的单个字符串将领先的换行符放入合唱中,然后再节省一些时间,然后n/g*
Peter Taylor

好想法!我无法更改,g因为它也将在末尾使用(实际上是可能的,但最后要多花1个字符)。但是,在每行的开头插入g的拆分/折叠方法可以节省大量的字符。
克里斯蒂安·卢帕斯库

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
马里奥·伊沙克

@MarDev我在高尔夫球程序中创建了类似的字符串。但是,这样做会损害可读性,因此我像String foo; String bar;取消高尔夫时那样进行操作。
dorukayhan

通过将其提取到变量中,也可以优化所有这些“永不进行”
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")

* 当然,当采用唯一的行而不是唯一的单词时,解决方案变得更短了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.