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.
(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
byte
Anzahl. Die niedrigste Punktzahl gewinnt!
Antworten:
CJam,
109107106104103 BytesDas 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 :
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)
Nach dem Drücken der Zeichenfolge (S) wird Folgendes ausgeführt:
Moar Golfen
Nach dem Drücken der nicht druckbaren Zeichenfolge (U) wird Folgendes ausgeführt:
Dies drückt die Zeichenfolge der druckbaren Version. Der Rest des Codes funktioniert wie zuvor.
quelle
~
mit,
überprüfen.]:+~
hat funktioniert. Warum fügst du das nicht einfach zu deinem Code hinzu?JavaScript (ES6) 164
Test In FireFox / Firebug - Konsole.
quelle
Python:
188 173 160153Ich 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
quelle
\
in\n
wegen der Flucht ...b
in verschiebenprint
:%
hat eine höhere Priorität als*
.CJam,
151 140 135 132 130128 Bytes (Tweetable)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 :)
quelle
:D
Emoticon da ?! Schicken Sie Ihren Freunden während der Haft eine SMS? Geh ins Büro des Direktors!T
Alias 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)PHP, 0 Bytes
Um diesen Code auszuführen, müssen Sie eine Bibliothek mit folgendem Namen importieren
data://text/plain,<?php...classroom.\n";
:Und Sie müssen
allow_url_include
in Ihrem aktiviert habenphp.ini
.Keine weiteren Nummern oder Nebenstellen dank Dennis.
quelle
require_once "data://text/plain,The eighteen-hundreds...";
, was kein sh erfordert , keine Zahlen verwendet und immer noch 0 Bytes beträgt.Rubin,
185180176 BytesEDIT: 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).
quelle
s.split.size.next
Speichert 5 Zeichen (Sie müssen den zu teilenden Platz nicht angeben).(s.split.size+1).times
nicht 1 Byte kürzer?Java
249231230222Meine erste Antwort! Warum nicht mit der Sprache anfangen, die ich so gut kenne?
Ungolfed
quelle
public
für Ihre Klasse loswerden undargs
auf 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 sparenimport static java.lang.System.*;
, dann müssen SieSystem.
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.C 171
Zuerst habe ich die vereinfachte Version (189 Bytes) ausprobiert, die besser war als die andere C-Lösung ...
was ich später etwas optimiert habe ...
quelle
char *
.a
vermutlich einwandfrei, da es standardmäßigint
einenchar
Wert annehmen kann. Es gefälltb
mir nicht, wenn ich es nicht alschar[]
obwohl bezeichne. VX, welchen Compiler verwendest du?b
istint
auch, 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).for(a='a';++a<'z';)
JavaScript, ES6,
174 172154 BytesMit dem
replace
Trick von @ edc65 . Vielen Dank!Funktioniert aufgrund der Verwendung von Vorlagenzeichenfolgen nur in Firefox der neuesten Version (34 und höher).
quelle
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.
quelle
Perl - 145
Ich freue mich so viele Antworten zu sehen! Hier ist eine Perl-Lösung.
quelle
Warum nicht Mathematica (177), weil sie Mathe so sehr hasst?
quelle
Javascript ES6,
198193 BytesIhr 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:
Muss im neuesten Firefox ausgeführt werden
quelle
with(Math)alert("long string here".repeat(exp(PI)+E|[]))
(q='aaaaa'.length)*q
"\x18".charCodeAt()
:! (Code den Pfeil nach oben und Sie sparen eine Tonne!)Javascript -
178 Bytes176 BytesMein erstes Golfspiel, bei dem ich dachte, ich würde es mit ein bisschen herumspielen versuchen, verlief nicht so gut wie erhofft, aber na ja!
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.
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)
quelle
C # -
229216 BytesKostenlose
using
FTW!Alternative, gleiche Byteanzahl (allerdings mehr
using
Missbrauch)quelle
a
':'-'!'
== 25). Dies ist kürzer alsa.Length
und 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)Befunge-93,
268260256 (Rastergröße: 72 x 6 = 432)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.)
quelle
re a time
irgendwo speichern ?#
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.1
Ziffern, die nicht erlaubt sindPyth 135
136 140Beachten 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
, dieabcdefghijklmnopqrstuvwxyz
eine Variable enthält und eine Variable weniger als ihre Länge erhält, um die 25 Ausgaben zu erzeugen.quelle
Rubin -
152141http://repl.it/2Om/6
quelle
String#*
die Zeilen statt 25 Mal wiederholenInteger#times
.puts"hi"
legal).Python, 165 Bytes
Es hat sehr gut geklappt, dass die Länge von h 25 ist, das war nicht beabsichtigt. =)
quelle
Python 2 - 143
Eine dumme Antwort:
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 :)
quelle
from this import i
! Woher wusstest du davon?import this
. Dann dachte ich: "Was könnte sonst noch imthis
Modul sein?" Also habe ich angerufendir(this)
. Siehe da, zusammen mit einem Wörterbuch, einer verstümmelten Zeichenfolge und einer"!"
Variablen gab es eine numerische Konstante ... gleich 25.PHP (
175157156 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:
Alte Version:
Dies funktioniert, weil PHP die Zeichen durchläuft und wir nur prüfen, ob dies nicht der Fall ist, und dann
z
aufhören.(Eine Kuriosität ist, dass, wenn PHP erreicht ist
z
, es dann gehtaa
.)quelle
Python 2 - 155
Hinweis: Da Steuerzeichen in SE nicht angezeigt werden, habe ich sie durch ersetzt
\x19
.Base 64 Version:
quelle
from string import *
oder wie auch immer es in Python[]
Klammern in der ersten Zeile entfernen , wodurch implizit ein Tupel erstellt und dann entpackt wird.ord('d')//len('aaaa') to before the string so you don't have to bracket it.
LiveScript - 181
Erforderliche Importe:
Wenn Sie es unter Node.js ausführen möchten, installieren Sie das
LiveScript
( nichtlivescript
) und dieprelude-ls
Pakete von npm, ersetzen Sie siealert
durchconsole.log
und führen Sie es auslsc prog.ls
, wobeiprog.ls
das Programm enthalten ist.quelle
0123456789
"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.
quelle
Bash, 151 Bytes
Ziemlich genau die richtige Antwort
quelle
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.
quelle
Rubin, 145
Erläuterung
String#upto
, um die Zeilen 25 Mal zu drucken. Der Bereich"K".."c"
umfasst 25 Zeichen.quelle
#{a="The "}
kostet Sie tatsächlich mehr Charaktere!#{a}
ist genauso lang wieThe
Schläger 173
Ungolfed:
quelle
C
215203199 BytesUngolfed
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 wiederholenEdit:
a
entspricht argc, daher ist sein Wert bereits 1, wenn das Programm ohne Argumente ausgeführt wird. Geänderta>>='\xB'-'\xA'
aufa>>=!!'\xA'
4 Bytes kürzer. Auch der Text wurde nur 24 mal angezeigt. Behoben. Zusätzliche Klammern im entferntwhile
.Bearbeiten 2: geändert
!!'\xA'
zu!!a
. Scheint zu funktionieren und spart 4 Bytesquelle
puts
mehr Bytes speichern.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.
Ungolfed:
Probieren Sie es online aus
quelle