Wachsen Sie, bis es 2017 ist

16

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+ 1Bytes lang ist.

Wenn dieses Programm ausgeführt wird, wird ein Programm ausgegeben, das THE LENGTH OF YOUR SUBMISSION+ 2Byte lang ist ... und so weiter.

Allerdings , wenn Ihr Programm hat eine Länge von 2017 Bytes erreicht, muss er stattdessen Ausgang 2017und Ausgang.

Regeln

  • Die Ausgabe des endgültigen Programms muss 2017und nur 2017. Es kann ein String oder eine ganze Zahl sein, aber es muss lesen 2017und nicht 2017.0oder 0x7E1oder 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 -Xals ein zusätzliches Byte.
  • 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.

user2428118
quelle
Ist nur das Anhängen von NOPs wie ;;;erlaubt?
FlipTack
@FlipTack Ja. ·
user2428118
"Striche, Schrägstriche usw. vor einem Kommandozeilen-Flag zählen nicht zur Gesamtsumme, also zählt zB perl -X als ein zusätzliches Byte." - Verstößt dies absichtlich gegen die hier auf Meta beschriebene Norm? Normalerweise sollten Striche, Schrägstriche usw. manchmal gezählt werden, je nachdem, wie der Aufruf ohne diese Option aussieht: meta.codegolf.stackexchange.com/questions/273/…
hvd
@hvd Glaube nicht, dass ich das gelesen habe, also nein, es ist nicht beabsichtigt. Das heißt, ich denke, es ist nicht schlimm, sie zu ignorieren, also werde ich es für diese Herausforderung nicht ändern.
user2428118

Antworten:

6

*> <> , 29 28 30 Bytes

" r::2+l'-':*7-(?ul1-n;Ol?!;ou

Probieren 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

" r: 2+                         build quine
    :                           copy extra " "
       l                        push length to stack
        '-':*7-                 push "2018" to stack
               (?u     O        if not length < 2018:
                  l1-n;           output length-1 and exit
                       Ol?!;ou  output entire stack and exit
redstarcoder
quelle
Ja, nicht ganz richtig when your program has reached a length of 2017 bytes, nicht 2016
Destructible Lemon
@ DestructibleWatermelon behoben
Redstarcoder
4

Python 2.7, 90 Bytes

Hier ist eine relativ einfache:

p='q';s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1929 else'2017'";exec s

Probieren Sie hier die erste Iteration aus! Probieren Sie hier die vorletzte Iteration aus! Probieren Sie die letzte Iteration hier aus!

Ungolfed:

p='q'      # The length of string p is the number of iterations so far.

s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1928 else'2017'"

exec s     # s contains the source code, but also contains a line saying "p += 'q'",
           # which makes the byte count longer. When the length of p is 1928 (i.e. when the
           # entire program is 2017 bytes long), 2017 is printed instead.
Calconym
quelle
@redstarcoder Die letzte Iteration hat genau 2017 Zeichen. Sie können die Anzahl der Bytes in der oberen rechten Ecke sehen, denke ich ...
Calconym
Ah, mein Fehler, ich bin mir nicht sicher, wie das passiert ist, sorry!
Redstarcoder
Sie können p='';...und verwenden 1929else. 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.
mbomb007
2

Microscript II, 38 Bytes

{v{h}sl+s""+vK#s2017=(2017ph)lp"~"ph}~
SuperJedi224
quelle
1

> <> 34 Bytes

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#

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

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#
".................................   push this string
 :                                   duplicate
  l                                  push length of stack
   ' '95**                           push 2016
          )                          1, if length > 2016, 0 otherwise
           b*                        multiply by 11
             f3++                    add 18
                 0.                  jump to that character on this line
                                     if the length is sufficiently long, this skips the
                                     next 10 characters, to the 11th (`b` from earlier):
                             :ln;    (if length is > 2016)
                             :         duplicate
                              l        push length
                               n       output as number
                                ;      terminate
                   1-}'#'r>o<        (if length <= 2016)
                   1-                  subtract 1 from the last char, `#`, to get `"`,
                     }                 which is then moved to the bottom
                      '#'              pushes `#` (will be appended)
                         r             reverses the stack
                          >o<          output stack, until error (accepted by default)
                                 #   This is never reached, but is used to generate `"`
Conor O'Brien
quelle
1

Java, 251 Byte (Eclipse-IDE)

import java.io.*;class G{public static void main(String[]args) throws Exception{File x=new File("./src/G.java");if(x.length()==2017){System.out.print("2017");}else{PrintWriter y=new PrintWriter(new FileOutputStream(x,1>0));y.print("A");y.close();}}}//

Dies setzt voraus, dass das Projekt in Eclipse unter Verwendung der .javaDateikonvention 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.

Magische Kraken-Urne
quelle
1

C 197 Bytes

#define A ""
char*s="#define A %c %s%c%cchar*s=%c%s%c;%cmain(){printf(sizeof A==1820?%c2017%c:s,34,A,34,10,34,s,34,10,34,34);}";
main(){printf(sizeof A==1820?"2017":s,34,A,34,10,34,s,34,10,34,34);}
Giacomo Garabello
quelle
1

Python 2, 217 167 78 Bytes

Beachten Sie, dass eine nachgestellte Zeile vorhanden sein sollte. Ich habe ähnliche Konzepte verwendet wie Calconym. Vielen Dank für die Inspiration!

p='q';s='p+=p[0];print"p=%r;s=%r;exec s"%(p,s)if len(p)<1941else 2017';exec s

Probieren Sie es online aus

Versuchen Sie es bei 2016 ; Versuchen Sie es bei 2017


Vorherige Version:

Dieses Programm verwendet das inspectModul, 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.

from inspect import*
n=stack()[0][2];s='from inspect import*%sn=stack()[0][2];s=%r;print(s%%(chr(10)*n,s))if n<1852else 2017';print(s%(chr(10)*n,s))if n<1852else 2017

Probieren Sie es online aus

mbomb007
quelle
1

CJam , 39 33 30 Bytes

33q:X~

mit der Eingabe

2017:N=N{33')X+`":X~"+}?

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:

33"2017:N=N{33')X+`\":X~\"+}?":X~

Welche Ausgänge

33")2017:N=N{33')X+`\":X~\"+}?":X~

welche Ausgänge

33"))2017:N=N{33')X+`\":X~\"+}?":X~

und so weiter. Endlich das Programm

33"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))2017:N=N{33')X+`\":X~\"+}?":X~

Ausgänge 2017.

Wie es funktioniert

33      Push 33
  q     Read the input: 2017:N=N{33')X+`":X~"+}?
   :X   Store it in variable X
     ~  Eval it

Aber was macht eigentlich der Code in der Eingabe?

 2017:N                      Push 2017 and store it in N
       =                     Check if the other number (33 on first run) equals 2017
        N                     If it does, push 2017
         {                    Else, execute this block:
          33                   Push 33
            ')                 Push the ) character
              X                Push X
               +               Concatenate with ')
                `              String representation (wraps it in quotes, escapes quotes inside)
                 ":X~"       Push the string ":X~"
                      +      Concatenate
                       }?    (end of block)

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.

Geschäfts-Katze
quelle
0

JavaScript, 98 83 Bytes

Das 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

function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

Ich verwende functionanstelle 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:

function x(){return "33".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

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 .

console.log((
function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}
)()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
)

Getestet mit Firefox.

user2428118
quelle