写拘留线


63

介绍

坏消息们-您被拘留了。您的英语老师不理解该站点,希望您“停止对数字式冰球进行数学运算,这是英语课!”

她判您在黑板上写下自己最喜欢的谚语25次,这将在黑板上总共显示100行。

The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.

幸运的是,您是一个狂热的读者(更不用说专家级代码窃贼了!)您已阅读了有关可能使您脱身的技巧。

狐步舞

(比尔·阿曼德(Bill Amend)的狐步舞)

不幸的是,对于杰森,它没有奏效。但是你有一个更好的主意!由于您的英语老师认为您正在做数学,因此,如果您将所有数字留在程序之外,它可能会起作用!您还希望使程序尽可能短,因为您是个懒惰的学生,不想在黑板上写很多东西。

编写符合以下规则的程序:

  • 您的程序必须将上述4行打印25次。线路必须以该顺序输出,重复进行。总共总共100行输出(可以在末尾使用换行符,也可以在开始时使用领先的换行符)。
  • 您不能使用字符0123456789。您的老师对数学感到困惑,会叫你出来!
  • 您可以使用任何导入和外部库,而无需计算导入。您的英语老师不了解编程。杰森本可以通过不写#include <stdio.h>而节省很多工作,并且您不想犯同样的错误!
  • 通过byte计数为程序评分。最低分获胜!

2
如果文本将显示为“ 1900s”,则编写输出会有些棘手。
IngoBürk2014年

30
到comix:他没有打印\ n,并且从1开始的循环非常尴尬(就像针对C语言)...
VX

11
@VX比尔·阿曼德(Bill Amend)长期以来一直是顽固的Pascal顽固派,每当他编写C时,它就显而易见。
蓬松的2014年

5
这听起来很像我的一位老英语老师。
卡兹·沃尔夫

2
在这里禁止+是有意义的,但是也许那太难了。
法拉普2014年

Answers:


9

CJam,109个 107 106 104 103字节

0000000: 22 0c 20 4f 18 41 e4 d8 a5 f3 95 cf 5e 2b cb 1c  ". O.A......^+..
0000010: 44 64 2f bf 28 23 e2 47 4e 4e 77 73 fc 43 09 a2  Dd/.(#.GNNws.C..
0000020: 09 0b fb 18 29 e8 e8 49 5d fc 00 da b8 70 b6 3e  ....)..I]....p.>
0000030: 0c 24 d7 5a 5b 28 1c 45 2e 90 63 86 04 5c 3e 95  .$.Z[(.E..c..\>.
0000040: 4b ae 66 22 48 48 2a 62 46 47 2b 62 22 54 0a 20  K.f"HH*bFG+b"T. 
0000050: 2d 2e 22 27 7b 2c 57 25 7c 66 3d 7b 28 2f 29 2a  -."'{,W%|f={(/)*
0000060: 7d 5a 2a 43 44 2b 2a                             }Z*CD+*

上面是可逆的xxd转储。

测试中

您可以通过在在线解释器中运行以下代码来生成并执行上述代码:

"bxyyeighxrum.yninexfun.ytwo-thousands abto run
a civilized classroom.y
The xteen-hundreds webfor bre a time ""T
 -."'{,W%|f#31bHH*b:c`'\2*/'\*"HH*bFG+b""T
 -."`"'{,W%|f={(/)*}Z*CD+*"]:+~

要查看生成的代码(不执行),请删除final ~

计数(一个字符是在ISO-8859-1一个字节)的字节数,则更换最终~,

可列印版本(122位元组)

"bxyyeighxrum.yninexfun.ytwo-thousands abto run
a civilized classroom.y
The xteen-hundreds webfor bre a time "{(/)*}Z*CD+*

推入字符串(S)之后,将执行以下操作:

{    }Z*        " Repeat 3 times:     ";
 (              "     Q := S.shift()  ";
  /             "     T := S.split(Q) ";
   )            "     R := T.pop()    ";
    *           "     S := T.join(R)  ";
        CD+*    " S *= 12 + 13        ";

摩尔打高尔夫球

推送不可打印的字符串(U)之后,将执行以下操作:

HH*b                        " U := U.base(17 * 17) ";
    FG+b                    " U := U.base(15 + 16) ";
        "T\n -."            " P := 'T\n -.'        ";
                '{,W%|      " P |= 'zyx...\0'      ";
                      f=    " U[i] -> P[U[i]]      ";

这将推送可打印版本的字符串。其余代码与以前一样工作。


使用代码,我得到了这个生成的代码,它是144个字节。难道我做错了什么 ?
Optimizer

是的,UTF-8编码将导致更高的字节数。对于ISO-8859-1,字节数为109。可以替换~,进行验证。
丹尼斯

2
我得到了Optimizer确切的结果,但是添加]:+~了它就可以了。为什么不将其添加到代码中呢?
2014年

1
@ user23013:Java解释器尊重$ LANG的I / O。在内部,CJam仅具有16位字符。
丹尼斯

3
实际上,您不必对解决方案进行统一编码,因为无需压缩本身就只有124字节,超过了其他所有字节。
Optimizer

77

JavaScript(ES6)164

B='teen-hundreds were a time',alert(B.replace(/./g,
"The eigh"+B+" for rum.\nThe nine"+B+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n"))

在FireFox / FireBug控制台中测试


19
这是天才!
Optimizer

1
是的,用较大的字符串替换每个字符。制作25个较大字符串的副本。
Optimizer

1
@Optimizer那是个天才:)
FryAmTheEggman 2014年

3
@Malvolio实际上重复部分是30个字符。在找到这个简单的解决方案之前,我可以展示大量的尝试序列,添加和剪切单词以及替换替换。
edc65

1
@IsmaelMiguel我认为您的意思是任何ES6浏览器。问题:发布此挑战时,没有在任何浏览器中实现模板字符串:Firefox是第一个-rel 34,2014年12月首先-然后是Chrome,2015年3月。但是即使没有模板字符串,您的搜索结果也还是153,比我的好。您应该将其发布为答案。
edc65

34

的Python:188 173 160 153

a="teen-hundreds were a time"
print"The eigh%s for rum.\nThe nine%s for fun.\nThe two-thousands are a time to run\na civilized classroom.\n"%(a,a)*len(a)

我没有很多python,但这对我来说似乎很短。

编辑:所以我错了,这根本不短!感谢您在评论中的帮助:D


1
您可能会丢失换行符并在for循环上缩进以节省几个字节。
Holloway 2014年

1
@Geobits,我是157
Holloway

1
您正在Windows机器上运行@Geobits吗?Windows中的行编码经常是\ r \ n而不是\ n。这可能就是为什么它为我们显示157个字节,但为您显示160个字节的原因。
罗伯·瓦茨

2
这是160只。你可能会跳过三\\n因逃逸......
优化

1
您可以将的值移动bprint:的%优先级高于*
FryAmTheEggman 2014年

29

CJam,151 140 135 132 130 128字节(Tweetable)

"TeighYrum.TnineYfun.Ttwo-thousands are a time to run
a civilized classroom.""YT"["teen-hundreds were a time for ""
The "]erAF+*

在这里尝试

通过将其转换为unicode,我可以将其缩短到110个字节,但是由于它没有击败其他unicode解决方案,因此我宁愿不放它:)


23
嘿,那:D表情在那做什么?您在拘留期间向朋友发短信吗?去校长办公室!
门把手

2
@Doorknob:D:P
优化器,

也许您可以使用T别名.\nThe ,然后从输出字符串的开头删除多余的行(我的cjam-fu不足以判断您是否可以轻松地做到这一点)

@professorfish最终消耗的字节数超过了保存的字节数。mothereff.in/…*%28Y%2F%28%40 \
Optimizer

提要:使用ASCII兼容代码页的高128字节与Unicode无关。
丹尼斯

23

PHP,0个字节



您可以使用任何导入和外部库,而无需计算导入。

要运行此代码,您必须导入一个名为data://text/plain,<?php...classroom.\n";this 的库:

<?php require_once 'data://text/plain,<?php
  for($i=ord("z");$i>ord("a");$i--)
    echo "The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.
";'; ?>

并且您必须在中allow_url_include启用了php.ini

感谢Dennis,没有更多的电话号码或分机号。


9
我的第一个直觉是对漏洞大喊大叫,但是由于这个答案实际上是独立的,因此我认为这是使用PHP利用故意为Python答案创建的漏洞的聪明方法。由于您已经作弊,因此您可以使用require_once "data://text/plain,The eighteen-hundreds...";,不需要sh,不使用数字,并且仍然为0字节。
丹尼斯

10
我会为创造力而投票,但我不会接受这一点。
hmatt1 2014年

14

红宝石, 185 180 176字节

编辑:字符串插值,谢谢@britishtea

这是我有史以来的第一场高尔夫,而且我对Rubist并不多(但我当然喜欢Ruby)。无论如何,就是这样(简而言之,Doorknob的建议)。

t=' were a time for '
s="The eighteen-hundreds#{t}rum.
The nineteen-hundreds#{t}fun.
The two-thousands are a time to run
a civilized classroom."
s.split.size.next.times{puts s}

1
您可以通过用String插值替换一些重复的单词/单词组来进一步降低难度。
britishtea 2014年

3
+1表示字符串中(几乎)有25个单词
Digital Trauma

2
s.split.size.next保存5个字符(您无需指定要分割的空格)。
门把手

我不了解Ruby,但是会不会(s.split.size+1).times短1个字节?
seequ 2014年

1
@Sieg不允许使用数字!
rjdown 2014年

13

爪哇249 231 230 222

我的第一个答案!为什么不开始使用我所熟知的语言。

class c{public static void main(String[]g){for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));}}

不打高尔夫球

import static java.lang.System.*;
class c
{
    public static void main(String[]g)
    {
        for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));
    }
}

9
欢迎!您可以摆脱public课堂上的,并缩短args为一个字符。您也可以这样做,a++<':'而不是单独增加它。由于OP不计入进口量,因此您可以使用节省更多import static java.lang.System.*;,那么您就无需System.稍后再写(它才算重要)。这样做我将其降低到230左右。如果您还没有Java提示页面,则可能需要看看。
Geobits,2014年

@Optimizer谢谢!我只是没有看到上面的删除线。
2014年

@Luminous NP :)
Optimizer

@Geobits谢谢!显然,您也可以将代码直接插入循环本身。没有添加或删除任何内容,但我认为它看起来更像高尔夫球。
发光的2014年

4
循环滥用非常普遍。如果主体中有多个语句,则可以将一个语句放在外面,其余的放在里面以保存一个字符(因为无论如何您都需要在外面使用分号)。这样一来,许多高尔夫球最终成为一个大循环。另外,“看起来更打高尔夫球”是做任何事情的完全正当理由,即使它没有保存:P
Geobits,2014年

11

C 171

a='a';b="teen-hundreds were a time for ";main(){for(;a++<'z';)printf("The eigh%srum.\nThe nine%sfun.\nThe two-thousands are a time to run\na civilized classroom.\n",b,b);}

首先,我尝试了简单的版本(189字节),比其他C解决方案要好。

main(a){for(a='a';a<'z';++a)printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}

我后来对其进行了优化...


1
呵呵,真不错。我没有意识到静态变量的字符串文字隐式地具有type char *
FireFly 2014年

@FireFly GCC a大概可以很好地编译,因为它默认为int,可以接受一个char值。b除非我称其为“ 不”,否则它不会char[]。VX,您使用的是什么编译器?
级圣河

bint太多,但其持有的指针字符串文字。在GCC中完全可以(我的机器上有4.8.2)。
VX

1
for(a='a';++a<'z';)
Seequ 2014年

9

的JavaScript,ES6,174个172 154字节

使用@ edc65的replace把戏。谢谢!

alert((d="teen-hundreds were a time").replace(/./g,`The eigh${d} for rum.
The nine${d} for fun.
two-thousands are a time to run
a civilized classroom.
`))

由于使用了模板字符串,因此只能在最新的Firefox(34及更高版本)中使用。


@Nijikokun您知道这将导致30次重复,而不是25次,对吗?
Optimizer

我猜ff 34是beta或类似的东西,因为我是最新的(刚刚检查过),它是33,在那里不起作用
Sammaye 2014年

8

BrainFuck(1,597个字符

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

如果有人感兴趣,它仍然可以打得更远。

您可以对此进行测试,并在满足所有规则的同时确认它给出了正确的输出。


5
这是什么?我告诉你写句子,而不是随意的花鼓!这里甚至什么也没有!
2014年

5
嗯..我认为目标是使用最少的字符。您确定赢得了“反目标” :-)
卡尔·威索夫特

7

Perl-145

我很高兴看到这么多答案!这是一个Perl解决方案。

$s="teen-hundreds were a time for";print"The eigh$s rum.
The nine$s fun.
The two-thousands are a time to run
a civilized classroom.
"for b..z

7

由于她非常讨厌数学,所以为什么不选择Mathematica(177)

   a = "teen-hundreds were a time for "; Do["The eigh" <> a <> "rum.
   The nine" <> a <> "fun.
   The two-thousands are a time to run a civilized classroom." // Print, {StringLength@a}]

6

JavaScript的ES6,198个 193字节

m=Math;alert("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n".repeat(~~(m.exp(m.PI)+m.E)))

您的老师不需要任何数字,但是由于他们是英语老师,所以他们不知道这Math.floor(Math.exp(Math.PI)+Math.E)是什么意思。

更具可读性:

alert("The eighteen-hundreds were a time for rum.\n\
 The nineteen-hundreds were a time for fun.\n\
 The two-thousands are a time to run\na civilized\n classroom.".repeat(Math.floor(Math.exp(Math.PI)+Math.E)))

必须在最新的Firefox中运行


1
末尾缺少换行符,因此在第一行和最后一行附加了75行
edc65 2014年

对于XKCD引用e ^ pi的规则,我将授予+1奖励,但使用+ e而不是-pi来奖励规则。
WallyWest 2014年

-4个字节:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore 2014年

噢,算了算了:(q='aaaaa'.length)*q
edc65

忘记@ edc65评论了!使用这个:"\x18".charCodeAt()!(将箭头硬编码,您将节省一吨!)
Ismael Miguel

6

Javascript- 178字节 176字节

我的第一场高尔夫,以为我会和一些杂乱无章的操作员一起打球,结果并没有希望的那么好,但是哦!

c="teen-hundreds were a time for "
b=!!c
alert(Array((b+b+b<<b+b)+b<<b).join("The eigh"+c+"rum.\nThe nine"+c+"fun.\nThe two-thousands are a time to run\na civilized classroom.\n"))

由于我已经被拘留了,因此在表现自己时很麻烦…… Javascript-71字节

这可能会给我带来更深的麻烦,但是,如果我已经把自己放进了拘留所,并且我打算作弊,显然,我在课堂上应该表现得很好。也许我可以将一位老师推倒,我可以将一位其他高尔夫球手推倒。

b=+true;alert( Array((b+b+b<<b+b)+b<<b).join($('code')[+!b].innerHTML))

快!Chrome / IE 11 / Firebug用户,立即打开控制台并尝试。

(请不要对我造成太大的伤害,我认为这很有趣)


1
72很有趣。176错误很多次:Array(25).join()给出24次重复,并且结尾句子的换行符丢失。总共24 * 3 = 72行,而不是100行(懒男孩!)
edc65

好的,好的。现在,178和71
悉尼

1
您可以节省2个字节,并在“一百...为”中加上t和尾随空格。
2014年

第二个代码在做什么?
2014年

1
@justhalf,它使用JQuery,这显然是SO网络使用的通用JavaScript库。$实际上是一个函数,在许多其他事情中,花费了很多DOM元素选择工作。通过使用$('<selector>'),在这种情况下,所有元素都带有'code'标签,我得到了一个包含所有元素的对象。通过使用[+!b],我得到了false的整数值,该值为零,因此我选择了第0个索引,该索引恰好是OP的第一个代码块,实际上这是老师们最喜欢说的。
悉尼

5

C#-229216字节

免费usingFTW!

using c=System.Console;
class S{static void Main(){var a="teen-hundreds were a time";for(int b=a.Length,i=b-b;i++<b;)c.Write("The eigh"+a+" for rum.\nThe nine"+a+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}}

替代方法,相同的字节数(using尽管滥用更多)

using i=System.Int32;
using c=System.Console;
class S{static void Main(){var a="teen-hundreds were a time";for(int b=new i();b++<a.Length;)c.Write("The eigh"+a+" for rum.\nThe nine"+a+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}}

4
~~(╯°□°)╯︵┻━┻–
William Barbosa

您可以在a
FryAmTheEggman中

@FryAmTheEggman字符串长度为25个字符,他使用它来离散获取数字25。但是,他可以换掉这种方法,以简单地彼此减去字符(':'-'!'== 25),该字符比短a.Length,并且可以按照您的建议包括在内。(或者,按照其他答案的方式做,并在!和之间循环:,有趣的是我们都选择了相同的字符)
VisualMelon 2014年

@VisualMelon糟糕,您完全正确。
FryAmTheEggman 2014年

1
我以为我可以,因为甚至不算使用次数,OP可以澄清这一点吗?
William Barbosa 2014年

5

Befunge-93,268 260 256(网格大小:72x6自动= 432)

#v"K">:!#@_v>$"enin">,,,,::-" rof emit a erew sderdnuh neet">:#,_$::!!-#
, ,,,"The "<|\!\%-"\^"::%-" #":-!!:
   -"#-"-::$_ "hgie"^v1"two-thousands are a time to run"
$_$  "nuf"v"rum"
v1-"##",,,<      >:#,_"moorssalc dezilivic a"1
_# < ^,,\-"AK."$_,#!:

这是我第一次打高尔夫球,所以我认为我会尝试一种尚未解决此问题的语言,因为我不会添加任何其他内容。由于它与Befunge-93兼容(适合80x25网格,并且仅使用Befunge-93指令),因此它也应在Befunge-98中工作。为了以防万一,我还避免了使指针越过空格以外的任何非指令字符。我不记得该规范是否实际上将这些字符定义为“无操作”,而且我的代码中不会有任何鼻恶魔

您不能真正取消高尔夫Befunge代码。这里要注意的关键是,Befunge将字符作为ASCII值压入堆栈,这使得引用数字相对简单,而无需从字面上引用它们。的"K"左上角是75,指的重复次数的每个重复“的”条款的数目; 我在该数字(的副本)上使用了模数和其他技巧,以确定每次复飞时要通过哪个打印路径。::-是一个很好的零成语,对以零结尾的字符串很有用;我在这里使用了两次。

有时,指针需要经过我定义字符串的地方,因此,某些时候需要使用特定的字符选择来获取特定的数字。

关于许多Befunge解释器的好处是,您可以观察网格周围的指针飞镖,以及查看堆栈中的值。这样,您就可以逐步了解该程序的工作原理,或多或少!如果您没有自己喜欢的Befunge解释器,建议您使用http://befungius.aurlien.net/

这可能可以减少更多(或更多)。请给我反馈!如果我需要提供更好的解释,请让我知道。我是新来的。

编辑 -通过在程序终止时摆脱不必要的重定向到最后一行,节省了几个字节(只需将原来的@位置放置在原处^)。

另一个编辑 -在各个地方删除了更多字节,大多数情况下是采用了欺骗手段。(还增加了网格大小,这似乎是Befunge答案的趋势。)


嗨,Kasran欢迎来到codegolf堆栈交流!这个答案看起来很棒。您的解释很好,而且您链接到Befunge解释器,该解释器对奇怪的语言确实有用,而不是每个人都有其编译器(人们通常会执行“在此运行”)。
hmatt1 2014年

Befunge是一种非常难懂的语言,编写时必须牢记代码本身的大小。您的代码看起来不错并且可以正常工作。但是,如果您保存在re a time 某个地方,它会减小尺寸吗?
Ismael Miguel 2014年

我没有使用我所知道的任何特定于Funge-98的指令或行为,但是自从我写了这个答案以来,我确实了解到Befungius解释器的某些行为不是标准的-即#在一行的一端跳过另一端的字符(例如,在CCBI中,该字符#跳过了它与另一端的字符之间的无限空间),这破坏了该程序。考虑到这一点,我没有费心再回来修改此提交内容。
卡斯兰

那里有几个1数字,这是不允许的
Jo King

4

Pyth 135 136 140

*ltG%"The eigh%srum%snine%sfun%stwo-thousands are a time to run\na civilized classroom.\n"*hhZ("teen-hundreds were a time for "".\nThe 

注意尾随空格。

使用与@Geobits和他的注释者朋友在Python答案中几乎相同的技巧来构造字符串。现在也使用一些这样的答案

这使用了内置变量G,该变量包含abcdefghijklmnopqrstuvwxyz的长度小于其长度,且比其长度小1,以产生25个输出。


1
这似乎是136个字节,而不是135 个字节
Optimizer

1
@Optimizer抱歉,我应该阅读我自己的笔记:我自己在其中粘贴尾随空格时,我就忘了:S
FryAmTheEggman 2014年

4

红宝石- 152 141

puts"The eight#{e="een-hundreds were a time for "}rum.
The ninet#{e}fun.
The two-thousands are a time to run
a civilized classroom.
"*(?X-??)

http://repl.it/2Om/6


1
巧妙使用1.8的字符文字!您可能可以String#*重复25行而不是Integer#times
britishtea

@britishtea-工作了:)
Mikey

1
您可以通过不先分配行来减少一些字节。放置和字符串文字之间的空格是可选的(puts"hi"合法的)。
britishtea

在插值内分配e是很好的选择。
韦恩·康拉德

3

Python,165个字节

h="hundreds were a time for "
t="The "
for i in h:print t+"eighteen-"+h+"rum.\n"+t+"nineteen-"+h+"fun.\n"+t+"two-thousands are a time to run\na civilized classroom."

计算得出h的长度为25确实很好,这不是故意的。=)


3

Python 2-143

一个愚蠢的答案:

from this import i
a="teen-hundreds were a time for ",".\nThe "
print"The eigh%srum%snine%sfun%stwo-thousands are a time to run\na civilized classroom.\n"%(a+a)*i

请注意,总数为162。我省略了所有from this import i

使用与我的pyth策略类似的替代方法,但是在发现从此导入的乐趣之后,我忍不住张贴了此内容:)


+1使用from this import i!您怎么知道的?
Beta Decay

1
@BetaDecay我实际上很无聊,决定阅读禅宗的python,所以我去了我的解释器并写道import this。然后我想:“ this模块中还有什么?” 所以我打电话给dir(this)。瞧,与字典,一乱码向上串,和一个沿着"!"可变,有一个数字常数...等于25
FryAmTheEggman

3

PHP(175 157156个字节;152(使用unix EOF):

不是最受关注的解决方案,但肯定可以完成这项工作,并且比某些尝试要小。

这是代码:

$a=a;$f='re a time';$r="teen-hundreds we$f for";while($a++<z)echo"The eigh$r rum.
The nine$r fun.
The two-thousands a$f to run
a civilized classroom.
";

旧版本:

$a=a;while($a++!=z)echo"The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.
";

这是可行的,因为php会循环字符,我们只是检查它是否不是z并停止。

(好奇的是,当php到达时z,它便转到aa。)


3
这里的一般约定是将换行符仅计为一个字节,除非您的语言如此固执,以至于它仅接受CRLF,而PHP则不是这样。
nyuszika7h 2014年

3

Python 2-155

注意:由于控制字符不在SE上显示,因此我将其替换为\x19

a,b='\nThe ','teen-hundreds were a time for '
print(a+'eigh'+b+'rum.'+a+'nine'+b+'fun.'+a+'two-thousands are a time to run\na civilized classroom.')*ord('\x19')

Base 64版本:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=

关于导入,我认为您可以节省一些时间,from string import *或者用Python来调用它
FireFly 2014年

1
您可以将“ teen”移到b。
FryAmTheEggman 2014年

2
您可以删除[]第一行中的括号,这将隐式创建一个元组,然后将其解压缩。
门把手

您还可以移动ord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman 2014年

1
@Dennis OP的最新编辑允许使用换行符。
Beta Decay 2014年

3

LiveScript-181

p=(a,b)->"The #{a}teen-hundreds were a time for #b.\n"
each console.log,map (->(p \eigh \rum)+(p \nine \fun)+'The two-thousands are a time to run\na civilized classroom.'),[\A to\Y]

所需进口:

{each, map} = require 'prelude-ls'

如果要在Node.js下运行它,请从npm 安装LiveScriptnot livescript)和prelude-ls软件包,并替换alertconsole.logrun lsc prog.ls,其中prog.ls包含程序。


13
请参阅规则:“您不能使用字符0123456789
Paul R

2
不错,固定。
nyuszika7h 2014年

2

T-SQL:206

在五行上使用交叉联接以生成25行选择短语。换行符对于输出很重要。

with c as(SELECT\ N FROM(VALUES(\),($),($),($),($))A(B))SELECT REPLACE('The eigh$rum.
The nine$fun.
The two-thousands are a time to run
a civilized classroom.','$','teen-hundreds were a time for ')FROM c a,c b

2

Bash,151个字节

您的答案几乎是直截了当的

t="teen-hundreds were a time for"
for i in {a..y};{
echo "The eigh$t rum.
The nine$t fun.
The two-thousands are a time to run
a civilized classroom."
}

2

C,196个字符

对于优秀的C而言,这不是一件容易的事。排除掉“%steen-数百...”模式可以为我节省两个字符。

为清楚起见,空格不包括在内。

#include <stdio.h>
main(){
  for (char*p="The %steen-hundreds were a time for %s.\n",
           *s="The two-thousands are a time to run\na civilized classroom.",
           *q=p;
       *q++ - 'a';
       puts(s))
   printf(p,"eigh","rum"), printf(p,"nine","fun");
}

2

红宝石145

?K.upto(?c){puts"The eigh#{x="teen-hundreds we#{t="re a time "}for "}rum.
The nine#{x}fun.
The two-thousands a#{t}to run
a civilized classroom."}

说明

  • 使用String#upto打印线的25倍。范围"K".."c"是25个字符。
  • 使用基本的字符串插值来缩短行。

2
#{a="The "}实际上会花费您更多角色!#{a}The
Mikey 2014年

2

球拍173

(let([x"teen-hundreds were a time for "])(for([z(+ #xa #xf)])(displayln(~a"The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a time to run\na civilized classroom."))))

取消高尔夫:

(let ([x "teen-hundreds were a time for "])
  (for([z(+ #xa #xf)])
    (displayln (~a "The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a
     time to run\na civilized classroom."))))

2

C,215个 203 199字节

main(a){a<<='\xC'+'\xD';while(a>>=!!a)printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}

不打高尔夫球

main(a)
{
  a<<='\xC'+'\xD';
  while(a>>=!!a)
    printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");
}

我使用了移位来迭代没有任何数字。

a<<='\xC'+'\xD' 将a设置为0b1 [25个零]

a>>=!!a 每次迭代循环时右移一位

编辑: a等于argc,因此在不带参数的情况下运行程序时其值已经为1。更改a>>='\xB'-'\xA'a>>=!!'\xA'短4个字节。文本也仅显示24次。修复。删除了中的多余括号while

编辑2:更改!!'\xA'!!a。似乎可以工作并节省4个字节


1
您可以puts用来保存更多字节。
Spikatrix

2

Rant,191个字节

不是最短的解决方案,但仍然很酷。我编写了一个子例程来编写前三行,并对其进行了设计,以便使用空参数调用它返回的字符串长度为25个字符。然后,我将其长度传递给中继器。

[pin:][$[_:a]:The [arg:a][sync:;ordered]{thousands a|teen-hundreds we}re a time ][r:[len:[$_:]]]{[step:][$_:eigh]for rum.\N[$_:nine]for fun.\N[step:][$_:two-]to run\Na civilized classroom.\N}

取消高尔夫:

[pin:]
[$[_:a]:The [arg:a][sync:;ordered]{thousands a|teen-hundreds we}re a time ]
[r:[len:[$_:]]]
{
    [step:]
    [$_:eigh]for rum.\N
    [$_:nine]for fun.\N
    [step:]
    [$_:two-]to run\N
    a civilized classroom.\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.