In dieser Herausforderung werden Sie ein Programm entwickeln, das im Laufe der Zeit wächst ... Bis es 2017 ist.
Herausforderung
Wann immer diese Herausforderungsbeschreibung "Programm" sagt, können Sie auch "Funktion" lesen.
Wenn Ihre Übermittlung ausgeführt wird, wird ein Programm ausgegeben, das THE LENGTH OF YOUR SUBMISSION
+ 1
Bytes lang ist.
Wenn dieses Programm ausgeführt wird, wird ein Programm ausgegeben, das THE LENGTH OF YOUR SUBMISSION
+ 2
Byte lang ist ... und so weiter.
Allerdings , wenn Ihr Programm hat eine Länge von 2017 Bytes erreicht, muss er stattdessen Ausgang 2017
und Ausgang.
Regeln
- Die Ausgabe des endgültigen Programms muss
2017
und nur2017
. Es kann ein String oder eine ganze Zahl sein, aber es muss lesen2017
und nicht2017.0
oder0x7E1
oder ein anderer solcher Unsinn. - Keine Standardlücken .
- Nur Ihr erstes Programm darf Eingaben erfordern, die Ihrem bytecount hinzugefügt werden.
Wenn Ihr ursprüngliches Programm also 324 Zeichen lang ist und eine Eingabe von 13 Bytes erfordert, beträgt Ihre Gesamtpunktzahl 324 + 13 = 337, und das von ihm ausgegebene Programm muss 338 Bytes lang sein.- Die Verwendung von Befehlszeilen-Flags (z. B.
perl -X
) ist jedoch in Ordnung - solange Ihr erstes Programm sowie alle generierten Programme dieselben Flags verwenden. Auch sie zählen zum gesamten bytecount. Striche, Schrägstriche usw. vor einem Befehlszeilen-Flag zählen nicht zur Gesamtsumme, z. B.perl -X
als ein zusätzliches Byte.
- Die Verwendung von Befehlszeilen-Flags (z. B.
- Wenn Sie eine Funktion zurückgeben, sollte es sich um eine tatsächliche Funktion und nicht um eine Zeichenfolge handeln, die bei der Auswertung eine Funktion erzeugt.
- Unsachgemäße Quines (wenn es sich bei Ihrem Programm um ein Quine handelt) sind nicht zulässig.
Beispiel
Pseudocode, 99 Bytes
IF (PROGRAM LENGTH == 2017) PRINT 2017 ELSE PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)
Ihre Übermittlung funktioniert möglicherweise anders, sofern sie den oben genannten Regeln entspricht.
;;;
erlaubt?Antworten:
*> <> ,
292830 BytesProbieren Sie es hier aus! (* versuchen Sie es mit 2017 Bytes )
* setzen Sie die Verzögerung auf 0ms oder Sie müssen möglicherweise lange warten
Dies fügt
jedem nachfolgenden Lauf einen weiteren hinzu. Wenn es 2017 Bytes hat und ausgeführt wird, wird 2017 ausgegeben und die Ausführung ohne weitere Ausgabe gestoppt.
Update: 1 Byte gespeichert, indem überprüft wird, ob die Länge nicht gleich, sondern kleiner als 2017 ist
Update 2: Ausgabe für +2 Bytes korrigiert
Erläuterung
quelle
when your program has reached a length of 2017 bytes
, nicht 2016Python 2.7, 90 Bytes
Hier ist eine relativ einfache:
Probieren Sie hier die erste Iteration aus! Probieren Sie hier die vorletzte Iteration aus! Probieren Sie die letzte Iteration hier aus!
Ungolfed:
quelle
p='';...
und verwenden1929else
. Beachten Sie jedoch, dass beim Drucken am Ende auch eine neue Zeile gedruckt wird. Fügen Sie daher Ihrem Programm eine nachfolgende neue Zeile hinzu, da diese nach dem ersten Durchlauf um zwei Bytes wächst.Microscript II, 38 Bytes
quelle
> <> 34 Bytes
Probieren Sie es online! Beachten Sie, dass Ihr Wert (minus 1) in 7 Byte generiert werden muss, um dies auf kleinere Werte zu testen.
Erläuterung
quelle
Java, 251 Byte (Eclipse-IDE)
Dies setzt voraus, dass das Projekt in Eclipse unter Verwendung der
.java
Dateikonvention im SRC des Arbeitsverzeichnisses erstellt wurde. Es gibt andere Möglichkeiten, um zu erkennen, wo sich die Quelle befindet, aber ich glaube nicht, dass dies gegen die Regeln verstößt.Öffnet grundsätzlich den .java-Quellcode und hängt As bis 2017 an (nach einem Kommentar). Wenn die Dateigröße der Quelle insgesamt 2017 Byte erreicht, wird stattdessen 2017 gedruckt.
quelle
C 197 Bytes
quelle
Python 2,
21716778 BytesBeachten Sie, dass eine nachgestellte Zeile vorhanden sein sollte. Ich habe ähnliche Konzepte verwendet wie Calconym. Vielen Dank für die Inspiration!
Probieren Sie es online aus
Versuchen Sie es bei 2016 ; Versuchen Sie es bei 2017
Vorherige Version:
Dieses Programm verwendet das
inspect
Modul, um die aktuelle Zeilennummer abzurufen. Dann druckt es sich aber mit einer zusätzlichen Zeile nach dem Import, die die Zeilennummer für das nächste Programm ändert. Hier sollte es auch einen nachgestellten Zeilenumbruch geben.Probieren Sie es online aus
quelle
CJam ,
393330 Bytesmit der Eingabe
Probieren Sie es online!
Dies ist funktional äquivalent zu meiner vorherigen Version, mit der Ausnahme, dass es nicht erforderlich ist, die Anführungszeichen zu schreiben und zu umgehen. Die vorherige Version:
Welche Ausgänge
welche Ausgänge
und so weiter. Endlich das Programm
Ausgänge
2017
.Wie es funktioniert
Aber was macht eigentlich der Code in der Eingabe?
Wenn die erste Programmnummer nicht gleich 2017 ist, wird ein Programm ausgegeben, in dem diese Nummer noch einmal erhöht wird, als diesmal. Wenn es 2017 entspricht (dh es wurde 1984-mal erhöht), drücken Sie einfach 2017 und beenden. Die erste Zahl beginnt mit 33 (die Länge des Codes); Jedes Inkrement erhöht die Codelänge um 1 UND diese Zahl um 1. Wenn also 33 genug inkrementiert wurden, um 2017 zu werden, ist der Code auch 2017 Byte lang.
quelle
JavaScript,
9883 BytesDas war eine ziemliche Herausforderung ... Ich schätze, das ist es, was ich dafür bekomme, dass tatsächliche Funktionen zurückgegeben werden müssen und nicht nur die Quelle der Funktion.
Ursprüngliche Funktion
Ich verwende
function
anstelle von=>
hier, weil letzteres keine benannten Funktionen unterstützt, sondern nur anonyme Funktionen einer Variablen zuweist.Erste Iteration
Wenn Sie das Obige in Ihrer Browserkonsole ausführen, wird eine Funktion zurückgegeben, die beim Umwandeln in eine Zeichenfolge wie folgt aussieht:
Anreise nach 2017
Da jede Funktion eine neue Funktion zurückgibt, können Sie die ursprüngliche Funktion / ihr Ergebnis 1934 Mal aufrufen, um 2017 zu erhalten .
Getestet mit Firefox.
quelle