Schreiben Sie Zeilen in Haft


63

Einführung

Schlechte Nachrichten, Leute - du hast Haft. Ihr Englischlehrer versteht diese Seite nicht und möchte, dass Sie "aufhören, mit Ihren digitalen Dohickeys zu rechnen, das ist Englischunterricht!"

Sie hat dich 25 Mal dazu verurteilt, ihren Lieblingsspruch an die Tafel zu schreiben, was insgesamt 100 Zeilen an die Tafel ergibt.

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.

Glücklicherweise sind Sie ein begeisterter Leser (ganz zu schweigen von einem erfahrenen Code-Golfer)! Sie haben eine Lektüre über einen Trick, der Sie möglicherweise leicht abbringen könnte.

Foxtrott

(Foxtrot von Bill Amend)

Leider für Jason hat es nicht geklappt. Aber du hast eine bessere Idee! Da dein Englischlehrer glaubt, du machst Mathe, könnte es funktionieren, wenn du alle Zahlen aus deinem Programm herauslässt! Sie möchten auch Ihr Programm so kurz wie möglich halten, weil Sie ein fauler Student sind und nicht viel an die Tafel schreiben möchten.

Schreiben Sie ein Programm, das den folgenden Regeln entspricht:

  • Ihr Programm muss die 4 obigen Zeilen 25 Mal drucken. Die Zeilen müssen in dieser Reihenfolge wiederholt ausgegeben werden. Insgesamt genau 100 Ausgabezeilen (ein abschließender Zeilenumbruch ganz am Ende oder ein führender Zeilenumbruch ganz am Anfang ist in Ordnung).
  • Sie können die Zeichen nicht verwenden 0123456789. Ihr Lehrer wird durch Mathe verwirrt und wird Sie ausrufen!
  • Sie können beliebige Importe und externe Bibliotheken verwenden, ohne die Importe zu zählen. Ihr Englischlehrer kennt sich nicht mit Programmierung aus. Jason hätte viel Arbeit sparen können, wenn er nicht geschrieben hätte, #include <stdio.h>und du willst nicht die gleichen Fehler machen!
  • Bewerte dein Programm nach byteAnzahl. Die niedrigste Punktzahl gewinnt!

2
Wenn der Text "1900s" gelesen hätte, wäre das Schreiben der Ausgabe etwas schwieriger gewesen.
Ingo Bürk

30
Zum Comix: Er druckt nicht \ n \ und die Schleife von 1 ist ziemlich umständlich (wie gegen C nature) ...
VX

11
@VX Bill Amend ist ein langjähriger Pascal, und wann immer er C schreibt, wird das ziemlich deutlich.
flauschiger

5
Das hört sich sehr nach einem meiner alten Englischlehrer an.
Kaz Wolfe

2
Banning + hätte hier Sinn gemacht, aber vielleicht wäre das zu schwierig gewesen.
Pharap

Antworten:


9

CJam, 109 107 106 104 103 Bytes

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+*

Das obige ist ein reversibler xxd-Dump.

Testen

Sie können den obigen Code generieren und ausführen, indem Sie diesen im Online-Interpreter ausführen :

"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+*"]:+~

Entfernen Sie das Finale, um den generierten Code anzuzeigen (ohne ihn auszuführen) ~.

Um die Anzahl der Bytes zu zählen (ein Zeichen entspricht einem Byte in ISO-8859-1), ersetzen Sie das Finale ~durch a ,.

Druckversion (122 Bytes)

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

Nach dem Drücken der Zeichenfolge (S) wird Folgendes ausgeführt:

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

Moar Golfen

Nach dem Drücken der nicht druckbaren Zeichenfolge (U) wird Folgendes ausgeführt:

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]]      ";

Dies drückt die Zeichenfolge der druckbaren Version. Der Rest des Codes funktioniert wie zuvor.


Unter Verwendung des Codes erhalte ich diesen generierten Code, der 144 Bytes beträgt. Mache ich etwas falsch ?
Optimierer

Eine UTF-8-Codierung würde zu einer höheren Bytezahl führen, ja. Mit ISO-8859-1 ist die Byte - Zählung 109 Sie können ersetzen ~mit ,überprüfen.
Dennis

2
Ich habe das genaue Ergebnis von Optimizer erhalten, aber das Hinzufügen ]:+~hat funktioniert. Warum fügst du das nicht einfach zu deinem Code hinzu?
Leuchtende

1
@ user23013: Der Java-Interpreter respektiert $ LANG für E / A. Intern hat CJam nur 16-Bit-Zeichen.
Dennis

3
Sie müssen Ihre Lösung tatsächlich nicht unicode-ize, da sie ohne Komprimierung selbst nur 124 Byte groß ist und alle anderen übertrifft.
Optimierer

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"))

Test In FireFox / Firebug - Konsole.


19
Das ist Genie!
Optimierer

1
Ja, jedes Zeichen wird durch die größere Zeichenfolge ersetzt. 25 Kopien der größeren Zeichenfolge anfertigen.
Optimierer

1
@Optimizer Das ist Genie :)
FryAmTheEggman

3
@Malvolio Tatsächlich besteht der wiederholte Abschnitt aus 30 Zeichen. Und ich konnte eine riesige Abfolge von Versuchen zeigen, Wörter hinzufügen und schneiden und Ersetzungen ersetzen, bevor ich diese einfache Lösung fand.
Edc65

1
@IsmaelMiguel Ich denke, du meinst jeden ES6-Browser. Problem: Zum Zeitpunkt der Veröffentlichung dieser Herausforderung waren in keinem Browser Template-Zeichenfolgen implementiert: Firefox war die erste - rel 34, dec first 2014 - dann Chrome, März 2015. Aber selbst ohne Template-Zeichenfolgen wäre Ihre Zielgruppe 153, besser als meine . Du solltest es als Antwort posten.
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)

Ich pythoniere nicht viel, aber das kommt mir ziemlich kurz vor.

Edit: Also ich habe mich geirrt, es war überhaupt nicht kurz! Danke für die Hilfe in Kommentaren: D


1
Sie könnten die neue Zeile verlieren und in der for-Schleife einrücken, um ein paar Bytes zu sparen.
Holloway

1
@ Geobits, ich mache das 157
Holloway

1
@ Geobits laufen Sie auf einem Windows-Computer? Die Zeilencodierungen in Fenstern lauten häufig \ r \ n statt nur \ n. Vielleicht zeigt es deshalb 157 Bytes für uns, aber 160 für Sie.
Rob Watts

2
Dies ist nur 160 . Sie überspringen wahrscheinlich die drei \in \nwegen der Flucht ...
Optimierer

1
Sie können den Wert für bin verschieben print: %hat eine höhere Priorität als *.
FryAmTheEggman

29

CJam, 151 140 135 132 130 128 Bytes (Tweetable)

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

Probieren Sie es hier aus

Ich kann dies auf 110 Bytes verkürzen, indem ich es in Unicode konvertiere, aber da dies nicht die andere Unicode-Lösung übertrifft, würde ich es lieber nicht sagen :)


23
Hey, was macht das :DEmoticon da ?! Schicken Sie Ihren Freunden während der Haft eine SMS? Geh ins Büro des Direktors!
Türklinke

2
@Doorknob: D: P
Optimizer

Vielleicht könnten Sie einen TAlias ​​für machen .\nThe und dann die zusätzliche Zeile entfernen, die dies vom Anfang der Ausgabezeichenfolge erzeugt (mein cjam-fu ist nicht gut genug, um herauszufinden, ob Sie das einfach tun können)

@professorfish, das am Ende mehr Bytes verbraucht, als es spart. mothereff.in/… *% 28Y% 2F% 28% 40 \
Optimizer

Nitpicking: Die Verwendung der oberen 128 Bytes einer ASCII-kompatiblen Codepage hat nichts mit Unicode zu tun.
Dennis

23

PHP, 0 Bytes



Sie können beliebige Importe und externe Bibliotheken verwenden, ohne die Importe zu zählen.

Um diesen Code auszuführen, müssen Sie eine Bibliothek mit folgendem Namen importieren data://text/plain,<?php...classroom.\n";:

<?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.
";'; ?>

Und Sie müssen allow_url_includein Ihrem aktiviert haben php.ini.

Keine weiteren Nummern oder Nebenstellen dank Dennis.


9
Mein erster Gedanke war, etwas über Lücken zu schreien, aber da diese Antwort eigentlich in sich geschlossen ist, halte ich dies für eine clevere Möglichkeit, PHP zu verwenden, um eine Lücke auszunutzen, die absichtlich für Python-Antworten erstellt wurde. Da Sie bereits betrügen, können Sie einfach verwenden require_once "data://text/plain,The eighteen-hundreds...";, was kein sh erfordert , keine Zahlen verwendet und immer noch 0 Bytes beträgt.
Dennis

10
Ich werde dies für Kreativität positiv bewerten, aber ich werde dies nicht akzeptieren.
hmatt1

14

Rubin, 185 180 176 Bytes

EDIT: String-Interpolation, danke @britishtea

Es ist mein erstes Golfspiel überhaupt und ich bin kein großer Rubist (aber ich liebe Ruby). Wie auch immer, das ist es (verkürzt, der Vorschlag von 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
Sie können dies weiter reduzieren, indem Sie einige der sich wiederholenden Wörter / Wortgruppen durch String-Interpolation ersetzen.
Britishtea

3
+1 für das Bemerken gibt es (fast) 25 Wörter in der Zeichenfolge
Digital Trauma

2
s.split.size.nextSpeichert 5 Zeichen (Sie müssen den zu teilenden Platz nicht angeben).
Türklinke

Ich kenne Ruby nicht, wäre aber (s.split.size+1).timesnicht 1 Byte kürzer?
Siehe auch

1
@Sieg darf keine Zahlen verwenden!
rjdown

13

Java 249 231 230 222

Meine erste Antwort! Warum nicht mit der Sprache anfangen, die ich so gut kenne?

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

Ungolfed

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
Herzlich willkommen! Sie können die publicfür Ihre Klasse loswerden und argsauf einen einzelnen Charakter verkürzen . Sie können dies auch tun, a++<':'anstatt es separat zu erhöhen. Da das OP keine Importe zählt, können Sie mit etwas mehr sparen import static java.lang.System.*;, dann müssen Sie System.später nicht mehr schreiben (wo es zählt). Dabei habe ich es auf ungefähr 230 gebracht. Vielleicht möchten Sie einen Blick auf die Seite mit den Java-Tipps werfen, wenn Sie es noch nicht getan haben.
Geobits

@Optimizer Danke! Ich habe das oben stehende Strikeout einfach nicht gesehen.
Leuchtende

@Luminous NP :)
Optimierer

@Geobits Danke! Anscheinend können Sie Code auch direkt in die Schleife selbst stecken. Habe nichts hinzugefügt oder entfernt, aber ich denke, es sieht auf diese Weise besser aus.
Leucht

4
Schleifenmissbrauch ist ziemlich verbreitet. Wenn Sie mehrere Anweisungen im Textkörper hatten, können Sie eine außen und den Rest innen platzieren, um ein einzelnes Zeichen zu speichern (da Sie sowieso ein Semikolon außen benötigen). Viele Golfplätze bilden auf diese Weise eine große Schleife. "Sieht besser aus als Golf" ist auch ein guter Grund, etwas zu tun, auch wenn es nicht spart: P
Geobits

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

Zuerst habe ich die vereinfachte Version (189 Bytes) ausprobiert, die besser war als die andere C-Lösung ...

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

was ich später etwas optimiert habe ...


1
Huh, das ist schick. Ich habe nicht realisiert, dass statische Variablen, denen String-Literale zugewiesen wurden, implizit einen Typ haben char *.
FireFly

@FireFly GCC kompiliert avermutlich einwandfrei, da es standardmäßig inteinen charWert annehmen kann. Es gefällt bmir nicht, wenn ich es nicht als char[]obwohl bezeichne. VX, welchen Compiler verwendest du?
Level River St

bist intauch, aber es hält den Zeiger auf das String-Literal. Es ist völlig in Ordnung in GCC (ich habe auf meinem Computer 4.8.2).
VX

1
for(a='a';++a<'z';)
Siehe auch

9

JavaScript, ES6, 174 172 154 Bytes

Mit dem replaceTrick von @ edc65 . Vielen Dank!

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.
`))

Funktioniert aufgrund der Verwendung von Vorlagenzeichenfolgen nur in Firefox der neuesten Version (34 und höher).


@Nijikokun Du weißt, dass dies 30 Wiederholungen anstelle von 25 verursacht, oder?
Optimierer

Ich vermute, dass ff 34 Beta ist oder so, da ich auf dem neuesten Stand bin (nur überprüft) und es 33 ist und es dort nicht funktioniert
Sammaye

8

BrainFuck ( 1.597 Zeichen )

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

Dies kann bei Interesse noch weiter golfen werden.

Sie können dies testen und bestätigen, dass es die richtige Ausgabe gibt, während Sie alle Regeln einhalten.


5
Was ist das? Ich habe dir gesagt, du sollst Sätze schreiben, keine zufälligen Schnörkel! Es gibt hier nicht einmal Worte!
Riking

5
Ummm .. Ich denke, das Ziel ist es, die wenigsten Zeichen zu verwenden. Sie haben sicher das "Gegentor" gewonnen :-)
Carl Witthoft

7

Perl - 145

Ich freue mich so viele Antworten zu sehen! Hier ist eine Perl-Lösung.

$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

Warum nicht Mathematica (177), weil sie Mathe so sehr hasst?

   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 Bytes

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

Ihr Lehrer möchte keine Zahlen, aber da sie Englischlehrer sind, haben sie keine Ahnung, was das Math.floor(Math.exp(Math.PI)+Math.E)bedeutet.

Besser lesbar:

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

Muss im neuesten Firefox ausgeführt werden


1
Fehlt eine neue Zeile am Ende, so werden die erste und die letzte
Zeile

Ich werde +1 für das Biegen der Regeln mit XKCDs Referenz von e ^ pi vergeben, aber mit + e im Gegensatz zu -pi ... Bravo!
WallyWest

-4 bytes:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore

Na (q='aaaaa'.length)*q
ja

Vergiss auch den @ edc65 Kommentar! Verwenden Sie dies "\x18".charCodeAt():! (Code den Pfeil nach oben und Sie sparen eine Tonne!)
Ismael Miguel

6

Javascript - 178 Bytes 176 Bytes

Mein erstes Golfspiel, bei dem ich dachte, ich würde es mit ein bisschen herumspielen versuchen, verlief nicht so gut wie erhofft, aber na ja!

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"))

Da ich bereits in Haft bin und offensichtlich Probleme habe, mich zu benehmen ... Javascript - 71 Bytes

Dieser wird mich wahrscheinlich in größere Schwierigkeiten bringen, aber wenn ich mich bereits in Haft befinde UND vorhabe, meine Haft zu betrügen, fehlt mir anscheinend ein gutes Urteil darüber, wie ich mich im Unterricht verhalten soll. Wenn ich einen über meinen Lehrer ziehen kann, kann ich vielleicht einen über alle anderen Golfer da draußen ziehen.

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

Schnell! Chrome / IE 11 / Firebug-Benutzer, öffnen Sie Ihre Konsolen JETZT und probieren Sie es aus.

(Bitte verletze mich nicht zu sehr, ich fand es lustig)


1
Die 72 macht Spaß. Die 176 ist oft falsch: Array (25) .join () gibt 24 Wiederholungen und eine neue Zeile am Ende des Satzes fehlt. Alles in allem 24 * 3 = 72 Zeilen statt 100 (fauler Junge!)
edc65

AUGH, ok behoben. Jetzt 178 und 71.
Sidney

1
Sie können 2 Bytes speichern, indem Sie das t und einen nachfolgenden Speicherplatz in "einhundert ... für" hinzufügen.
Luminous

Was macht der zweite Code?
Nur die Hälfte des

1
@justhalf, Es wird JQuery verwendet, eine gemeinsame JavaScript-Bibliothek, die anscheinend im SO-Netzwerk verwendet wird. Das $ ist eigentlich eine Funktion, die neben vielen anderen Dingen viel Arbeit bei der Auswahl von DOM-Elementen kostet. Durch die Verwendung von $ ('<selector>'), das in diesem Fall alle Elemente mit dem Tag 'code' enthält, erhalte ich ein Objekt, das alle Elemente enthält. Mit [+! B] erhalte ich den ganzzahligen Wert von false, der null ist, und wähle daher den 0. Index aus, der zufällig der erste Codeblock des OP ist, der in der Tat der Lieblingsspruch des Lehrers ist.
Sidney

5

C # - 229 216 Bytes

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

Alternative, gleiche Byteanzahl (allerdings mehr usingMissbrauch)

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

Sie können "für" hinzufügena
FryAmTheEggman

@FryAmTheEggman Die Zeichenfolge ist 25 Zeichen lang. Er verwendet sie, um die Nummer 25 diskret zu erhalten. Er kann diese Methode jedoch austauschen, um Zeichen voneinander zu subtrahieren ( ':'-'!'== 25). Dies ist kürzer als a.Lengthund ermöglicht die von Ihnen vorgeschlagene Einbeziehung. (Alternativ tun, wie andere Antworten scheinen, und nur eine Schleife zwischen !und :, lustig, wie wir alle die gleichen Zeichen gewählt haben)
VisualMelon

@VisualMelon Hoppla, du hast vollkommen recht.
FryAmTheEggman

1
Ich dachte ich könnte da Usings nicht mal gezählt werden, hat OP das geklärt?
William Barbosa

5

Befunge-93, 268 260 256 (Rastergröße: 72 x 6 = 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."$_,#!:

Da ich zum ersten Mal Golf spiele, dachte ich, ich würde eine Sprache ausprobieren, die für dieses Problem noch nicht gemacht wurde, da ich sonst nichts hinzufügen würde. Da es Befunge-93-kompatibel ist (passt in ein 80x25-Raster und verwendet nur Befunge-93-Anweisungen), sollte es auch in Befunge-98 funktionieren. Für alle Fälle habe ich auch vermieden, dass der Zeiger über andere Nichtanweisungszeichen als Leerzeichen läuft. Ich konnte mich nicht erinnern, ob die Spezifikation diese Charaktere tatsächlich als No-Ops definiert hatte, und ich werde in MEINEM Code keine nasalen Dämonen haben .

Sie können den Befunge-Code nicht wirklich ungolfen. Das Wichtigste dabei ist, dass Befunge Zeichen als ASCII-Werte auf den Stapel schiebt, sodass es relativ einfach ist, auf Zahlen zu verweisen, ohne sich wörtlich auf sie zu beziehen. Der "K"Wert oben links ist 75 und bezieht sich auf die Anzahl der Wiederholungen, multipliziert mit der Anzahl der "the" -Klauseln pro Wiederholung. Ich benutze Modul und einige andere Raffinessen bei (Kopien von) dieser Zahl, um zu bestimmen, welchen Weg ich bei jedem Durchgang durch den Druck nehmen soll. ::-ist ein nettes Idiom für Null, nützlich für nullterminierende Strings; Ich benutze es zweimal hier.

Gelegentlich muss der Zeiger eine Stelle durchlaufen, an der ich eine Zeichenfolge definiere, daher die spezifische Auswahl von Zeichen, die verwendet werden, um an bestimmten Punkten bestimmte Zahlen zu erhalten.

Das Schöne an vielen Befunge-Interpreten ist, dass Sie beobachten können, wie der Zeiger über das Raster läuft und welche Werte sich im Stapel befinden. So können Sie mehr oder weniger selbst nachvollziehen, wie das Programm funktioniert! Ich würde die Verwendung von http://befungius.aurlien.net/ empfehlen, wenn Sie keinen eigenen Befunge-Dolmetscher bevorzugen.

Dies kann wahrscheinlich ein bisschen (oder viel) mehr reduziert werden. Bitte geben Sie mir eine Rückmeldung! Wenn ich eine bessere Erklärung liefern muss, lass es mich jemand wissen. Ich bin neu in diesem Bereich.

Bearbeiten - rasierte ein paar Bytes durch off loszuwerden unnötigen Umleitung zur letzten Zeile , wenn das Programm beendet wird (nur die Umsetzung , @wo die ^früher).

Ein weiterer Schnitt - mehr Bytes an verschiedenen Stellen abgeschabt, meistens mit Tricks. (Fügte auch die Rastergröße hinzu, wie es der Trend bei Befunge-Antworten zu sein scheint.)


Hey Kasran, willkommen beim Codegolf Stack Exchange! Diese Antworten sehen toll aus. Ihre Erklärung ist gut und Sie sind mit einem Befunge-Interpreter verbunden, der wirklich hilfreich ist für seltsame Sprachen, für die nicht jeder einen Compiler hat (Leute tun normalerweise Dinge wie "hier ausführen").
hmatt1

Befunge ist eine sehr harte Sprache, und Sie müssen die Größe des Codes selbst beim Schreiben im Hinterkopf behalten. Ihr Code sieht gut aus und funktioniert. Aber würde es die Größe verringern, wenn Sie re a time irgendwo speichern ?
Ismael Miguel

Ich verwende keine Funge-98-spezifischen Anweisungen oder Verhaltensweisen, die mir bekannt sind, aber seit ich diese Antwort geschrieben habe, habe ich erfahren, dass bestimmte Verhaltensweisen des Befungius-Interpreters nicht Standard sind - nämlich das Verwenden #eines Zeilenendes zum Überspringen das Zeichen am anderen Ende (in CCBI zum Beispiel #überspringt es einfach den unendlichen Raum zwischen ihm und dem Zeichen am anderen Ende), der dieses Programm unterbricht. Ich habe mir nicht die Mühe gemacht, diese Einsendung in diesem Sinne zu korrigieren.
Kasran

Es gibt ein paar 1Ziffern, die nicht erlaubt sind
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 

Beachten Sie das nachfolgende Leerzeichen.

Verwendet fast den gleichen Trick wie @Geobits und seine Kommentatoren in der Python- Antwort, um den String zu konstruieren. Verwendet nun auch einen Teil dieser Antwort .

Dies verwendet die eingebaute Variable G, die abcdefghijklmnopqrstuvwxyzeine Variable enthält und eine Variable weniger als ihre Länge erhält, um die 25 Ausgaben zu erzeugen.


1
Dies scheint 136 Bytes anstatt 135 zu sein
Optimizer

1
@Optimizer Tut mir leid, ich sollte meine eigenen Notizen lesen: Ich habe das nachstehende Leerzeichen vergessen, als ich es selbst dort eingefügt habe: S
FryAmTheEggman

4

Rubin - 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
Clevere Verwendung der Zeichenliterale von 1.8! Möglicherweise können Sie String#*die Zeilen statt 25 Mal wiederholen Integer#times.
britishtea

@britishtea - arbeitete eine Belohnung :)
Mikey

1
Sie könnten ein paar Bytes mehr sparen, indem Sie die Zeilen nicht zuerst zuweisen. Der Abstand zwischen Puts und einem String-Literal ist optional ( puts"hi"legal).
britishtea

Das Zuweisen von e innerhalb der Interpolation ist eine nette Geste.
Wayne Conrad

3

Python, 165 Bytes

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."

Es hat sehr gut geklappt, dass die Länge von h 25 ist, das war nicht beabsichtigt. =)


3

Python 2 - 143

Eine dumme Antwort:

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

Beachten Sie, dass die volle Anzahl 162 ist. Ich habe alle weggelassen from this import i.

Verwendet ähnliche Ersetzungen für meine Pyth-Strategie, aber ich konnte nicht widerstehen, dies zu veröffentlichen, nachdem ich festgestellt hatte, wie lustig es ist, daraus zu importieren :)


+1 Zur Verwendung von from this import i! Woher wusstest du davon?
Beta Decay

1
@BetaDecay Eigentlich langweilte ich mich und beschloss, den Zen von Python zu lesen, also ging ich zu meinem Dolmetscher und schrieb import this. Dann dachte ich: "Was könnte sonst noch im thisModul sein?" Also habe ich angerufen dir(this). Siehe da, zusammen mit einem Wörterbuch, einer verstümmelten Zeichenfolge und einer "!"Variablen gab es eine numerische Konstante ... gleich 25.
FryAmTheEggman

3

PHP (175 157156 Bytes; 152 mit Unix EOF):

Nicht die am meisten Golf spielende Lösung, macht aber mit Sicherheit den Job und ist kleiner als manche Versuche.

Hier ist der Code:

$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.
";

Alte Version:

$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.
";

Dies funktioniert, weil PHP die Zeichen durchläuft und wir nur prüfen, ob dies nicht der Fall ist, und dann zaufhören.

(Eine Kuriosität ist, dass, wenn PHP erreicht ist z, es dann geht aa.)


3
Die allgemeine Konvention hier ist, Zeilenumbrüche als nur ein Byte zu zählen, es sei denn, Ihre Sprache ist so hartnäckig, dass sie nur CRLF akzeptiert, was bei PHP nicht der Fall ist.
Nyuszika7h

3

Python 2 - 155

Hinweis: Da Steuerzeichen in SE nicht angezeigt werden, habe ich sie durch ersetzt\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 Version:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=

In Bezug auf den Import denke ich, dass Sie etwas sparen können, from string import *oder wie auch immer es in Python
FireFly

1
Sie können "Teenager" in b bewegen.
FryAmTheEggman

2
Sie können die []Klammern in der ersten Zeile entfernen , wodurch implizit ein Tupel erstellt und dann entpackt wird.
Türklinke

Sie können auch dieord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman

1
@Dennis Die neueste Bearbeitung des OP ermöglicht führende Zeilenumbrüche.
Beta Decay

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]

Erforderliche Importe:

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

Wenn Sie es unter Node.js ausführen möchten, installieren Sie das LiveScript( nicht livescript ) und die prelude-lsPakete von npm, ersetzen Sie sie alertdurch console.logund führen Sie es aus lsc prog.ls, wobei prog.lsdas Programm enthalten ist.


13
Siehe Regeln: "Sie können die Zeichen nicht verwenden 0123456789"
Paul R

2
Schöner Fang, behoben.
Nyuszika7h

2

T-SQL: 206

Verwendet einen Cross-Join für fünf Zeilen, um 25 Zeilen zur Auswahl der Phrase zu generieren. Die Zeilenumbrüche sind wichtig für die Ausgabe.

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 Bytes

Ziemlich genau die richtige Antwort

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 Zeichen

Dies ist keine leichte Aufgabe für den guten alten C. Das Ausklammern des Musters "% steen-hunderte ..." erspart mir ganze zwei Zeichen.

Leerzeichen zur Verdeutlichung sind nicht mitgezählt.

#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

Rubin, 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."}

Erläuterung

  • Verwenden Sie String#upto, um die Zeilen 25 Mal zu drucken. Der Bereich "K".."c"umfasst 25 Zeichen.
  • Verwenden Sie die grundlegende Zeichenfolgeninterpolation, um die Zeilen zu kürzen.

2
#{a="The "}kostet Sie tatsächlich mehr Charaktere! #{a}ist genauso lang wieThe
Mikey

2

Schläger 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."))))

Ungolfed:

(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 Bytes

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

Ungolfed

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

Ich habe die Bitverschiebung verwendet, um ohne Nummer zu iterieren.

a<<='\xC'+'\xD' setzt a auf 0b1 [25 Nullen]

a>>=!!a Verschiebt sich jedes Mal um ein Bit nach rechts, wenn wir die Schleife wiederholen

Edit: a entspricht argc, daher ist sein Wert bereits 1, wenn das Programm ohne Argumente ausgeführt wird. Geändert a>>='\xB'-'\xA'auf a>>=!!'\xA'4 Bytes kürzer. Auch der Text wurde nur 24 mal angezeigt. Behoben. Zusätzliche Klammern im entfernt while.

Bearbeiten 2: geändert !!'\xA'zu !!a. Scheint zu funktionieren und spart 4 Bytes


1
Mit können Sie putsmehr Bytes speichern.
Spikatrix

2

Rant, 191 Bytes

Nicht die kürzeste Lösung, aber trotzdem cool. Ich habe eine Unterroutine zum Schreiben der ersten drei Zeilen geschrieben und sie so entworfen, dass ein Aufruf mit einem leeren Argument eine Zeichenfolge mit 25 Zeichen zurückgibt. Ich gebe dann seine Länge an den Repeater weiter.

[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}

Ungolfed:

[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
}

Probieren Sie es online aus

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.