摇滚全天候


46

使用尽可能少的Unicode字符,打印以下内容(144个字符):

1, 2, 3 o'clock, 4 o'clock rock,
5, 6, 7 o'clock, 8 o'clock rock,
9, 10, 11 o'clock, 12 o'clock rock,
We're gonna rock around the clock tonight.

除之外,您不得在代码中使用任何数字1


1
前三行的末尾有空格,这些计数吗?
aditsu

@aditsu:这些是由于编辑,因为m.buettner忘记了在编辑回代码块时将其删除。我会对此进行修改,但认为编辑太小。
Wrzlprmft 2014年

1
我现在将其删除
aditsu

4
使用几个答案11。该说明是否意味着您只能使用数字 1或数字 1?
mfvonh 2014年

10
@mfvonh我说你可以用1。我没有指定多少次,所以人们使用的事实11是一个聪明的漏洞,我全力以赴。
rybo111 2014年

Answers:


48

使用Javascript - 140 132

k=1,s=", ",t=" o'clock",x="";while(k<11)x+=k+++s+k+++s+k+++t+s+k+++t+" rock,\n";alert(x+"We're gonna rock around the clock tonight.")

11由两个1组成的事实让我通过了我猜想的规则。

说明

k +++ s等于(k ++)+ s,因此它先将k加到x,然后递增k,然后将s加到x。在添加最后一句话之前,此过程将进行三遍。


你为什么 {} ?暂时不需要,您只有1条指令。但是,因为您必须使用“;” 您只会赢1个字符。^^
Antoine Esteve 2014年

3
怎么k+++s办?是不是(k++) + s还是k + (++s)(k++) + (++s)
seequ 2014年

31
废话+1:x+=k+++s+k+++s+k+++t+s+k+++t+u
Cruncher 2014年

2
@trlkly通常在JS中打高尔夫球,您必须使用输出语句,并且alert比短console.log。在控制台中使用最后一次计算的自动显示就像作弊。
edc65

15
您确定不是Brainfuck吗?
迈克尔·汉普顿

37

C#-186

最佳高尔夫语言还是最佳高尔夫语言?

class P{static void Main(){var s="";for(int i=1;i<11;)s+=i+++", "+i+++", "+i+++" o'clock, "+i+++" o'clock rock,\n";System.Console.Write(s+"We're gonna rock around the clock tonight.");}}

我不知道为什么它也获得了如此多的选票。人们喜欢非高尔夫友好型语言条目,也许
William Barbosa 2014年

7
他启发了我用C ++做到这一点,因此获得了投票。真正的男人(tm)不会在代码高尔夫中使用woosy解释语言!
达伦(Darren)

你实际上并不需要的空间中i++ +
DLeh

我是在dotnetfiddle上编写的,没有空格就无法编译。感谢您指出。
威廉·巴博萨

您可以通过执行WriteLine-> Write\n在字符串末尾使用文字来刮胡子。
Alconja 2014年

27

Brainfuck(1574)

不是认真的陈述,而是遵循规则。

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

可以在这里测试。


12
Brainfuck的答案始终值得尊重。
法拉普

1
也许我们应该给他“最长答案”奖?#RESPECT
杰米

23

红宝石,100

printf"%i, %i#{", %i o'clock"*r=-~1} rock,
"*-~r+"We're gonna rock around the clock tonight.",*1..$$

4
您可以另存几个字符s="%i, %i#{", %i o'clock"*-~1} rock,\n"(用\n文字换行符代替)。好主意$$
Ventero 2014年

3
扩展我之前的评论:如果您r=-~1内联分配,则可以使用"..."*-~r代替s+s+s,允许您将分配拖放到s
Ventero 2014年

非常好,将进行这些编辑。
histocrat

18

Perl 123

$s="*, *, * o'(, * o'( ),";print"$s
$s
$s
We're gonna ) around the ( tonight."=~s![(*)]!(clock,rock)[1+1+1&ord$&]||++$i!reg

正则表达式匹配()*。我用的事实的ASCII码(为40,的)是41和*42。

r正则表达式的标志启用“就地替换”,而e标志则启用代码评估(类似于x.replace(/.../, function(m){...})JavaScript)。

(clock,rock)是两个“裸词”的数组。$&是正则表达式的当前匹配项,并且ord$&是ASCII值。

被3屏蔽或1+1+1ASCII值现在为0、1和2,因此我可以使用它们来检索相应的数组元素。当2不在数组中时,“短路”运算符||求值++$i。在第一个比赛中$iundef如此增加,我得到1,然后得到2,依此类推...

简单来说。用*当前的出现,(“时钟”和)“摇滚” 代替。


1
有。不。计算。请解释一下?
seequ 2014年

1
@TheRare说明已添加;)
core1024

6
这是黑魔法。+1
seequ 2014年

这就是Perl所做的事情,毫不奇怪,它做得很好。
法拉普

16

Bash + coreutils,120 ASCII,92 Unicode

ASCII:

c=clock
f(){ echo $[++i], $[++i], $[++i] o\'$c, $[++i] o\'$c rock,;}
f
f
f
echo We\'re gonna rock around the $c tonight.

Unicode:

iconv -t unicode<<<挊挽潬正昻⤨⁻捥潨␠⭛椫ⱝ␠⭛椫ⱝ␠⭛椫⁝屯␧Ᵽ␠⭛椫⁝屯␧⁣潲正㬬㭽㭦㭦㭦捥潨圠履爧⁥潧湮⁡潲正愠潲湵⁤桴⁥挤琠湯杩瑨ਮ|sed 1d|bash

base64编码的Unicode版本(以防unicode渲染混乱):

aWNvbnYgLXQgdW5pY29kZTw8POaMiuaMvea9rOato+aYiuKkqOKBu+aNpea9qOKQoOKtm+akq+Kx
neKQoOKtm+akq+KxneKQoOKtm+akq+KBneWxr+KQp+Kxo+KQoOKtm+akq+KBneWxr+KQp+KBo+a9
suato+OsrOCpveCppuCppuCppuaNpea9qOWcoOWxpeeIp+KBpea9p+a5ruKBoea9suato+aEoOa9
sua5teKBpOahtOKBpeaMpOeQoOa5r+adqeeRqOCornxzZWQgMWR8YmFzaAo=

2
120,因为不需要在函数声明的右括号后加分号。
manatwork 2014年

@manatwork糟糕!-我不知道那个人是怎么偷偷摸摸的。谢谢!
Digital Trauma 2014年

1
我现在在Windows上,但是使用eval而不是通过管道传递给bashor 的原因是什么sh
core1024

@ core1024除了我,我没有其他理由忘记这种可能性;-)感谢您的提示!
Digital Trauma 2014年

1
糟糕,没有计算$rs!
Shahbaz 2014年

13

Brainfuck,1299年

布鲁乌尔格。太可怕了 我不知道为什么要这么做,一开始似乎很容易。首先也是最后一个Brainfuck脚本。在这里尝试。

自动代码生成器的帮助下,我能够编写一个脚本,该脚本重用了大多数字符,而不是从头开始生成每个字符。它仅比自动生成的字符短275个字符,发布在此处

输出不是以换行符结尾的。

稍后我可能会作一些解释。从本质上讲,任何长线这是不是有点像>>>>>>>或者<<<<<<<或者>>.>>.>>.>>.产生一个字符或一个系列当中。

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

10

LUA - 217 164 154 151 149 143

修改了旧版本以使用循环,从而节省了大量字符。感谢TeunPronk帮助我减少了10个字符,并感谢WilliamBarbosa减少了3个字符。通过使用变量,可以再保存2个字符kr=" rock,"由于使用了一次变量,因此消除了该变量,从而又节省了6个字符。

o=" o'clock"c=", "w=io.write k=1+1 for i=1,11,k+k do w(i,c,i+1,c,i+k,o,c,i+k+1,o," rock,\n")end w("We're gonna rock around the clock tonight.")

不打高尔夫球,

o=" o'clock"
c=", "
w=io.write
k=1+1
for i=1,11,k+k do 
   w(i,c,i+1,c,i+k,o,c,i+k+1,o," rock,\n")
end
w("We're gonna rock around the clock tonight.")

我想知道是否使用循环代替jand 会更短k
Teun Pronk

@TeunPronk:哈哈,随着您的评论平息我,我只是在改变这一点
Kyle

1
您可以将其降低到157。每个第3个数字后都不需要逗号。在您的OORRRO,Rio.write
前面

1
@TeunPronk:已更新。谢谢你的帮助!
凯尔·坎诺斯

1
您可以存储io.write在变量(f=io.write)中,甚至可以进一步减少变量
William Barbosa 2014年

8

CJam-90 ASCII / 54 Unicode

ASCII:

{{T):T}:F~", ":CFCF" o'clock":OCFO" rock,
"}Z*"We're gonna rock around the clock tonight."

Unicode:

"ξ漰㠬༳ᆧᶃ㸩씪咦⏚騤䖫퍃᰽薂ᴤਥ궋씻㱗㽫Ƶꐥ勋䎔䃱魠ꝯ朐酠礢璿狮꓈执낦덋觫ᥛ琚"GZ)#bBC*b:c~

http://cjam.aditsu.net/上尝试一下


您的unico ...“此答案已被编辑。” 哦,没关系。
seequ 2014年

8

巨蟒(123)

print((1+1+1)*"%i, %i, %i o'clock, %i o'clock rock,\n"%tuple(range(1,11+1+1))+"We're gonna rock around the clock tonight.")

宝贝(112)

P((1+1+1)*"%i, %i, %i o'clock, %i o'clock rock,\n"%T(R(1,11+1+1))+"We're gonna rock around the clock tonight.")

7

脑干-680

在此处进行测试:ideone.com/Wi9ftB

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

正如我所承诺的,这是一个更好的版本。我的大脑感觉就像..哦,那是这个名字的来历。

说明:(因为它无法维护,我不想忘记它的工作原理)

首先,您必须选择最佳的数据布局来应对这一挑战。我想出了

-4 outmost loop -3 newline char -2 space -1 numbers 1 lowercase #1 2 lowercase #2 3 comma, apostrophe, period 4 condition (outmost loop < 3) 5 inner loop 6 second inner loop

我们必须相信,这是最佳选择,除非会有太多的移位(这种情况下您必须重新排列布局)

之后,我使用4x9x3循环来设置换行符,数字,两个小写字母和逗号的起始值。(所有较小的ascii代码都得到4x9 = 36,而两个小写字母得到4x9x3 = 108,然后我加减了一些就得到了它们的真实价值)

预设完成后,代码进入最外循环,循环3次。我用伪代码解释它。

for 3 to 1 where i = numbers
    print '++i, '
    while inner_loop != 0              # this is true after the first loop
        while second_inner_loop != 0   # and this is true after the second
            print '10, 11 o'clock, 12' # prints the difference
            condition = 0              # it prevents the printing below
        second_inner_loop += 1
    inner_loop += 1
    while condition != 0
        print '++i, ++i o'clock, ++i'
    print ' o'clock rock,\n'

完成本节后,我只需要打印最后一行。但是我们必须在不使用太多字符的情况下生成大写字母W。此时,我们在这里:

Address  Value  Pointer
     -4      0  <--
     -3     10
     -2     32
     -1     50
      1     99
      2    111
      3     44

因此我将[-3]放在[-1]上四次,然后减去3以得到87(W):>[>>++++<<-]>>---.
然后将其擦除[-]
并将[-2]移到该位置[-1],这样空格将接近小写字母。<[>+<-]

之后,它仅打印字母。小写字母#1用于下部97-107,小写字母#2用于上述区域。


2
+1比其他BF答案短300个字符
durron597

我当时正在考虑走得更低。如果没有像样的教程(esolangs已关闭),创建条件会很糟糕,但可以再缩短200个字符左右
bebe

6

JavaScript,111 107个字符,不使用任何数字。

在浏览器的JS控制台中执行以下代码段:

107(灵感来自http://xem.github.io/obfuscatweet/以及其他JS答案):

eval(unescape(escape('𩡯𬠨𬰽𘠬𘀢𛁴🐢𘁯𙱣𫁯𨱫𘠬𪐽𮀽𙰧𞰫𚱩🀽𜐱𞱸𚰽𪐫𚰫𬰫𪐫𚰫𬰫𪐫𚰫𭀫𬰫𪐫𭀫𘠠𬡯𨱫𛁜𫠢𚐻𮀫𘡗𩐧𬡥𘁧𫱮𫡡𘁲𫱣𪰠𨑲𫱵𫡤𘁴𪁥𘁣𫁯𨱫𘁴𫱮𪑧𪁴𛠢').replace(/uD./g,'')))

111(只需打包所有字符串并删除周围的eval):

unescape(escape('𜐬𘀲𛀠𜰠𫰧𨱬𫱣𪰬𘀴𘁯𙱣𫁯𨱫𘁲𫱣𪰬𒠵𛀠𝠬𘀷𘁯𙱣𫁯𨱫𛀠𞀠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𞐬𘀱𜀬𘀱𜐠𫰧𨱬𫱣𪰬𘀱𜠠𫰧𨱬𫱣𪰠𬡯𨱫𛀊𥱥𙱲𩐠𩱯𫡮𨐠𬡯𨱫𘁡𬡯𭑮𩀠𭁨𩐠𨱬𫱣𪰠𭁯𫡩𩱨𭀮').replace(/uD./g,''))

4
有人在里面看到乌龟吗?wtf
Dunno 2014年

嘿,是的,由obfuscatweet生成的“随机” Unicode字符有时会导致表情符号:)
xem 2014年

5

C-145- 试试我

main(i){i<11?main(i-~1+1,printf("%d, %d, %d o'clock, %d o'clock rock,\n"
,i++,i,i-~1,i-~1+1)):puts("We're gonna rock around the clock tonight.");}

C-172- 试试我

#define l ,__LINE__+~1
#define f ;printf("%d, %d, %d o'clock, %d o'clock rock,\n"
main(){f l
l
l
l)f
l
l
l
l)f
l
l
l
l);puts("We're gonna rock around the clock tonight.");}

1
我不是C程序员,所以如果我天真,请原谅我,但是您不需要#include <stdio.h>使用printf吗?
凯尔·坎诺斯

1
默认库链接到vc ++和gcc中的源(因此,如果您不需要特殊的东西,则可以通过键入自由地开始高尔夫挑战赛main(){...
Bebe 2014年

知道了 奇怪的是,它在默认情况下会发出警告(仅通过我的gcc和icc进行检查,没有用于测试的vc ++)。
凯尔·坎诺斯

它还会发出顺序点警告,所以...- w :)
bebe

@Kyle包含文件定义外部函数的工作方式(返回类型和参数)。与链接库无关。标准的C编译器会将您喜欢的任何参数传递给任何函数(带有警告),并且返回值通常被忽略,因此无论如何它都可以工作。
edc65 2014年

5

PHP- 125129

版本1(129)

$i;while($i<11)echo++$i.", ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";echo"We're gonna rock around the clock tonight";

版本2(125)

while($i++<11)echo"$i, ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";echo"We're gonna rock around the clock tonight";

干净版本:

while($i++<11)
    echo "$i, ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";
echo "We're gonna rock around the clock tonight";

5

Perl中,114 111 110 108

$s=", X o'clock";$_="X, X$s$s rock,
"x(1+1+1)."We're gonna rock around the clock tonight.";s/X/++$i/eg;print

110:

$s=", X o'clock";print(("X, X$s$s rock,
"x(1+1+1)."We're gonna rock around the clock tonight.")=~s/X/++$i/egr)

111:

print(("X, X, X o'clock, X o'clock rock,
"x(1+1+1)."We're gonna rock around the clock tonight.")=~s/X/++$i/egr)

114:

($s="X, X, X o'clock, X o'clock rock,
"x(1+1+1)."We're gonna rock around the clock tonight.")=~s/X/++$i/ge;print$s

4

C ++ 261 203

#include<iostream>
#define x i++;
#define y std::cout<<
#define z y x y
void m(){for(int i=1;i<11;){z", ";z", ";z" o'clock, ";z" o'clock rock, "<<"\n";}y"We're gonna rock around the clock tonight.";}

编辑了我的第一次尝试;当我第一次测试它时,它起作用了,但这似乎是seems幸。流中的后增量是“未定义的行为”,当我尝试重新运行它时,它做了奇怪的事情(包括蓝屏Windows 7!)。我认为使用printf代替std :: cout可以与后增量一起使用,以获得更短的程序。

再次进行编辑,通过重新实现循环将其降至231。再次编辑,现在降至203 ...这些#defines在循环版本中并非全部有用。

对于那些想知道C ++如何运行函数“ m”的人,可以将入口点定义为仅带有编译器选项的任何函数,也可以将所有函数设置为stdcall。编译以上内容时,我同时使用了两个开关。如果您不喜欢重新定义的入口点,请在我的字符数上加上3。


您正在使用哪个编译器?gcc(4.7.1)不允许我调用main函数m()。不过,您可以删除void和保存5个字符(如果您将该方法命名为2个字符main
ChristophBöhmwalder2014年

它到底是如何获得投票的?首先,您编写了一个名为“ m”的函数,该函数默认不会编译,其次,每个编译器都以相反的顺序显示小时数。这需要大的更正
Bebe 2014年

1
@HackerCow如果没有定义void返回类型,我似乎无法使VS2013正常工作。是否有一个允许这样做的编译器开关?
达伦(Darren)

1
@bebe我在编辑中解释了m()入口点;至于以相反顺序打印的输出小时数,我从未设法重复,但是我确实设法使其正确打印(第一次尝试),然后重新测试所有的1、5和12。重新测试它使操作系统崩溃。因此,从技术上讲,它只运行了一次,但是依靠未定义的行为可能是一个“坏主意”,所以我重写了它:)
Darren 2014年

1
@bebe不管怎样我都很酷;我绝不会用C ++赢得任何代码高尔夫难题,因此添加3个字符并不是什么大问题。我同意-D开关宏定义会作弊,但是几乎所有其他编译器标志在我看来都是合法的,因为它们在所链接的线程中对于其他人而言也是合法的。任何优势,你挤掉简单的编译器开关会不完全,甚至播放℃之间和Python /猛砸场++ / Perl里等
达伦-

4

斯威夫特- 136 134

var x=1
for;x<11;{print("\(x++), \(x++), \(x++) o'clock, \(x++) o'clock rock,\n")}
print("We're gonna rock around the clock tonight.")

3

爪哇228

硬编码的解决方案可能会更短。

public static void main(String[] a){
        String s = "";
        int i=1,j=1;
        for(i--,j--;i<=11;){
            s += ++i + (j > 1 ? " o'clock rock, ":", ");
            if(j == "one".length()){
                j -= j;
                s +="\n";
            }else
                j++;
        }
        System.out.println(s+"We're gonna rock around the clock tonight");
}

3
+1表示硬编码会更短。
凯尔·坎诺斯

1+1+1比短9个字符"two".length()"。有String[] a必要吗?
凯尔·坎诺斯

那有点像作弊,是的,String [] a是必需的。
当之无愧的2014年

它不是在作弊,有人用过它:D
Kyle Kanos

3

Befunge-98(402 268)

现在放心了!

".thginot kcolc eht dnuora kcor annog er'eW"a11+/a*1-> #;:,1+" ,",,:,1+" ,",,:,1+" ,kcolc'o "a1-k,:,1+a",kcor kcolc'o "ek,:a11+/a*b1111+++-+-#;_:,a-1+" ,",,:a111++-:*,,1+" ,",,:a111++-:*,,1+" ,kcolc'o "a1-k,:a111++-:*,,1+a",kcor kcolc'o "ek,:a11+/a*b1111+++-+$$$aa*k,@

1
落后的文本随机位,,:,1+a11+/a*b1111+++-+w:,流浪字符下面的代码主线......典型Befunge。大多数在线口译员的行长都存在问题(超出限制),您知道不介意吗?

我在网上找不到任何Befunge-98编译器,但是您可以使用PyPI中提供的pyfunge。
waylon531 2014年

3

Groovy- 140139个字符

打高尔夫球,受威廉·巴博萨William Barbosa)的回答影响

s="ock"
i=1
f={->println "${i++}, ${i++}, ${i++} o'cl$s, ${i++} o'cl$s r$s,"}
f();f();f()
println "We're gonna r$s around the cl$s tonight"

取消高尔夫:

s = "ock"
i = 1
f = { ->
    println "${i++}, ${i++}, ${i++} o'cl$s, ${i++} o'cl$s r$s,"}
}

f();f();f()

println "We're gonna r$s around the clock tonight"

2

Mathematica-153

i=1;
StringReplace[
  StringJoin[
    Riffle[{s="X, X, X o'clock, X o'clock rock,",s,s},"\n"]]<>
    "\nWe're gonna rock around the clock tonight.","X":>ToString[i++]]

+1,我认为这是最好的策略,但是可以更短一些

2

C ++ 252

#define P(x) cout<<x
#define Q cout<<", "
#define N cout<<endl
#define C P(" o'clock")
#define R P(" rock")
#define F P(++i);Q;P(++i);Q;P(++i);C;Q;P(++i);C;R;N;
int i;
main()
{
    F F F
    P("We're gonna rock around the clock tonight.");
}

1
除非我的数学很烂,否则使用P(", ")代替会Q节省2个字符。
凯尔·坎诺斯

2
N并且R只出现一次:内联它们比制作宏要好。

使用上面的注释和更多内容,可以将其压缩为200(即使使用我的编译器需要的include和名称空间):#include<iostream> #define P std::cout<<++i<< #define C" o'clock" #define F P", ";P", ";P C<<", ";P C<<" rock"<<std::endl; int i;main(){F F F std::cout<<"We're gonna rock around the clock tonight.";}
Hagen von Eitzen 2014年

2

的Java(V2) - 250 241 232个字符

这是一个完整的运行程序,受William Barbosa的回答影响

打高尔夫球:

public class R{
static int o=1;
static String c(){return o+++", "+o+++", "+o+++" o'clock, "+o+++" o'clock rock,\n";}
public static void main (String[] a){System.out.println(c()+c()+c()+"We're gonna rock around the clock tonight");}}

取消高尔夫:

public class R {
    static int o = 1;
    static String c() { 
        return o+++", "+o+++", "+o+++" o'clock, "+o+++" o'clock rock,\n";
    }

    public static void main (String[] a) {
        System.out.println(c()+c()+c()+"We're gonna rock around the clock tonight");
    }
}

2

ECMAScript6- 136 135

甚至不使用允许的1数字:

alert([,...a=[s=", ",s,(c=" o'clock")+s,c+" rock,\n"],...a,...a].map((x,i)=>i+x).join("")+"We're gonna rock around the clock tonight.")

在Firefox控制台中测试。


或使用xem.github.io/obfuscatweet ;)的114个字符;)
xem14年

4
@xem,我知道它符合法律的规定,但是我不喜欢Unicode压缩(或任何其他编译器/生成器)。在我看来,高尔夫是对技巧的考验,所有代码都应该手工制作……但这就是我。
Alconja 2014年

2

PowerShell中,123 118 109

1,1,1|%{"$('',''," o'clock"," o'clock rock"|%{"$((++$a))$_,"})"}
"We're gonna rock around the clock tonight."

在一个可怕的开始(167)之后,我摆脱了一些我什至不需要的成语,至少使它比参考文献短。


2

哈斯克尔- 138 137个字符

作为独立程序:

r n=show n++s!!n
s=" o'clock rock,\n":c:c:" o'clock, ":s
c=", "
main=putStr$(r=<<)[1..11+1]++"We're gonna rock around the clock tonight."

编辑:我曾经有一个用于定义的辅助函数o

s=o" rock,\n":c:c:o c:s;o=(" o'clock"++)

但结果却要多花1个字符。有什么办法可以压缩所有的“时钟” /“摇滚” /“摇滚”吗?


2

JavaScript,140

a=", x o'clock",b="x, x"+a+a+" rock,\n",b+=b+=b+"We're gonna rock around the clock 
tonight.";for(i=1;i<=11+1;)b=b.replace("x",i++);alert(b)

我输入“ x,x,x时点x时点岩石,\ n ...”之类的字符串,然后用数字替换“ x”。


1

PHP 150

没有数字,包括不会将两个1粘在一起的11,而是数字值11。

function f(){static $i;echo++$i.", ".++$i.", ".++$i." o'clock, ".++$i." o'clock rock,\n";}f();f();f();echo"We're gonna rock around the clock tonight";

它缺少尾随的句号。
2014年

1

PowerShell,156 140 136 129 127

for($i=1;$i-lt11){$i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', '}"We're gonna rock around the clock tonight."

取消高尔夫:

for($i = 1; $i -lt 11){
    $i++, $i++ , "$(($i++)) o'clock", "$(($i++)) o'clock rock," -join ', '
}
"We're gonna rock around the clock tonight." 

您可以$i++,$i++,"$(($i++)) o'clock","$(($i++)) o'clock rock,"-join', '在循环内使用将其降低到127 。
2014年

@Јοеу确实,感谢您的建议!
DarkAjax

1

眼镜蛇-193

class P
    var i=1-1
    def main
        print[.f,.f,.f,"We're gonna rock around the clock tonight."].join("")
    def f as String
        return"[[.i+=1,.i+=1,.i+=1].join(", ")] o'clock, [.i+=1] o'clock rock,\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.