Es ist der 10. August 2019, aber Ihre Aufgabe betrifft immer noch das zweite Halbjahr. Verrückt oder?
Erstellen Sie ein Programm, das sich selbst druckt und an das eine zweistellige Nummer angehängt ist. Wenn Sie es zum ersten Mal ausführen, sollte 00 an die Ausgabe angehängt werden (der Quellcode, da es sich um eine quine Variante handelt). Wenn Sie diese Ausgabe ausführen, sollte das ursprüngliche Programm ohne zweistellige Nummer das ursprüngliche Programm ausgeben, jedoch mit angehängter 01. Führen Sie diese Ausgabe aus, um das OG-Programm mit angehängter 02 zu erhalten, und dann, um das Programm mit 03 zu erhalten ... Diese Kette sollte bis 99 fortgesetzt werden. Dieses Programm sollte ausgeben BREAKING NEWS: WORLD ENDS
.
Wenn Ihr Programm Y2Kparanoia: yes
dann ist:
- Es sollte ausgegeben werden
Y2Kparanoia: yes00
- Diese Ausgabe sollte gedruckt werden
Y2Kparanoia: yes01
- Diese Ausgabe sollte gedruckt werden
Y2K paranoia: yes02
- Wiederholen Sie diesen Vorgang bis Schritt 100: Dieses Programm gibt die angegebenen Weltuntergangsnachrichten aus
Dies ist Codegolf, daher gewinnt das kürzeste Programm, das sich beim Ausführen dieser Schritte selbst drucken kann.
2Kparanoia: yes97
und produzieren2Kparanoia: yes98
, sollten wir also nicht (4) lesenRepeat to step 100, but step 101 will output "BREAKING NEWS: WORLD ENDS"
? (dh2Kparanoia: yes99
produziert die Nachrichten)Antworten:
Perl 6 ,
122 114106 Bytes-8 Bytes dank Shelvacu
Probieren Sie es online!
Übernimmt das Standard-Quine-Format und fügt den Breaking News-String sowie einen neuen Funktionsaufruf mit der angehängten Nummer hinzu. Hiermit wird
END
die Funktion ausgeführt, wenn das Programm endet.quelle
END
und einerour
VariablenEND {<print $s-199??"END\{<$_>~~.EVAL};our\$s="~($s-1&&$s-99)+100!!"BREAKING NEWS: WORLD ENDS">~~.EVAL};our$s=1
Ruby,
158154146128122100 BytesInspiriert von dieser Antwort .
BEARBEITEN: Ich konnte es entfernen
(s.split(35.chr)[0]+35.chr).inspect
und durchs[0..-2]
(Bereich aller Werte außer dem letzten) und die zuvor verwendete%{ ... }
Zeichenfolgensyntax ersetzen . 22 Bytes gespeichert!Alte Version:
BEARBEITEN: Sie haben ein Paar Parens (und das entsprechende Paar im Datenabschnitt) gespeichert, indem Sie erkannt haben, dass
"BREAKING NEWS: WORLD ENDS"
es sich um eine vollständig gültige Formatzeichenfolge handelt, und Ruby ignoriert alle extraneos-Parameter.Beim Start dieses erkannte ich, dass da die Zahl hat am Ende des Programms zu gehen, und Rubin erlaubt keine Variablen verwenden , bevor sie deklariert sind, würde ich muss Code zum Laufen bringen , nachdem irgendwie die Ziffern. Ich könnte getan haben so etwas wie
def a(s) ... end;a 1
das geworden wäre...end;a 100
, aber Ruby mit weniger bekanntenEND
Syntax verwendet weniger Bytes. Der interne Block hatEND
jedoch einen anderen Gültigkeitsbereich undS
muss daher eine globale Variable oder Konstante sein.Erläuterung:
END{ ... };S=1
: Führen Sie einen Codeblock aus, bevor das Programm beendet wird. Konstante setzenS
auf1
(oder100
-199
in zukünftigen Iterationen)$><<( ... )
:$>
ist eine Verknüpfung in ruby für stdout und<<
schreibt auf einem IO auf das IO. Die Eltern sind erforderlich, sonst wird es($><<S)>198...
S>198?"BREAKING NEWS: WORLD ENDS":(q=...)%[q,S<2?0:S-99]
: Wenn ich das in etwas vernünftigeren Code aufteilen würde, wäre es:Der
%
Operator, der auf eine Zeichenfolge angewendet wird, ist effektivprintf
, wobei LHS die Formatzeichenfolge und RHS die Argumente sind.%{ ... (q=%%{%s}) ... S=1%02d}
: ruby hat eine interessante Syntax für Zeichenfolgen, mit der auch geschweifte Klammernpaare innerhalb der Zeichenfolge angezeigt werden können, ohne dass sie ausgeblendet werden, solange sie ausgeglichen sind. Dies ist sehr hilfreich, da ansonsten ein ähnliches Quine aus der Zeichenfolge entfernt werden müsste, um es als Zeichenfolgenliteral in sich aufzunehmen. Die beiden Ersetzungen in der Formatzeichenfolge gelten%s
für eine reguläre Zeichenfolge und%02d
für eine Zahl, die mit dem Zeichen auf eine Größe von 2 rechts aufgefüllt ist0
.Meine Gedanken zur weiteren Verkürzung:
Es wäre schön zu können , verwendenEDIT: Konstanten sind global und können ein Zeichen sein!s
statt$s
, aber die Definition ss=$s;
oder eine Funktion zu machendef a(s) ...
beide Gebrauch mehr Bytes als sie speichern, und ich kann mir keinen anderen Weg , es zu tun.S
es immer weniger wäre100
, damit es mit zweistelligen Zahlen anstelle von dreistelligen Zahlen verglichen werden könnte. Wenn ich jedochS=0
am Ende verwende, werden die nächsten beiden Ziffern als oktal interpretiert8
und9
sind ungültig und alles ist eine Koje.S=
ist einfach nicht gültig und ich kenne keine andere Möglichkeit, einen Wert sowohl vor als auch nach dem Anhängen von zwei Ziffern gültig zu machen. Bemerkenswerterweise ist0
(und jede andere ganze Zahl) in Rubin wahr .Wenn Sie darüber nachdenken, wie Sie das verkürzen können, lassen Sie es mich bitte wissen!
Probieren Sie es online!
quelle
s=100-1
? Danns
wird 99, 0, -1 ... 99 sein und-s
wird -99, 0 ... 99 sein.Los,
382 366 354 340 305 298272 BytesGewinnt nicht, aber ich hatte Spaß mit der Herausforderung.
Probieren Sie es auf dem Go Playground!
Basierend auf einem Quine. Wenn die Variable
n
kleiner als 199 ist, wird der Zeichenfolgenvariablenn
ein schwerwiegender Akzent (\x60
), das Go-Zeichen für mehrzeilige Zeichenfolgen, gefolgt von einem Komma, hinzugefügt,
. Es wird fortgesetzt, indem die ersten 147 Zeichen vons
gedruckt werden (um das Drucken zu verhindern,,
da dies nur am Ende auftritt), danns
als Ganzes gedruckt und schließlich gedruckt wird,100
wennn == 1
undn+1
andernfalls. Das Ergebnis ist, dass aufeinanderfolgende Läufe die Variablen
am Ende des Programms auf 100, 101 usw. ändern . Wenn die Variablen
199 oder mehr ist, werden aktuelle Nachrichten gedruckt.quelle
Haskell ,
240232218216 BytesProbieren Sie es online!
Angepasst von einem quine
quelle
JavaScript (ES6), 116 Byte
94 Bytes, wenn Stringfunktionen erlaubt sind
quelle
f=${f}
), das ist laut codegolf.meta.stackexchange.com/a/4878/13400C # (Visual C # Interactive Compiler) , 193 Byte
Probieren Sie es online!
quelle
Pyth ,
8180 BytesProbieren Sie es online!
Erläuterung:
Und der Code in der Zeichenfolge ist (Eilmeldungen gekürzt):
quelle