Crescere fino al 2017


16

In questa sfida costruirai un programma che cresce man mano che attraversa i secoli ... Fino al 2017.

Sfida

Ogni volta che questa descrizione della sfida dice "programma", puoi anche leggere "funzione".

L'invio, una volta eseguito, produrrà un programma lungo THE LENGTH OF YOUR SUBMISSION+ 1byte.

Quando quel programma viene eseguito, produrrà un programma che è lungo THE LENGTH OF YOUR SUBMISSION+ 2byte ... e così via.

Tuttavia , quando il programma ha raggiunto una lunghezza di 2017 byte, deve invece essere emesso 2017e chiuso.

Regole

  • L'output del programma finale deve essere 2017e solo 2017. Può essere una stringa o un numero intero, ma deve leggere 2017e non 2017.0o 0x7E1o altre sciocchezze.
  • Nessuna scappatoia standard .
  • Solo il tuo programma iniziale può richiedere input, che verranno aggiunti al tuo conto.
    Quindi se il tuo programma iniziale è lungo 324 caratteri e richiede un input di 13 byte, il tuo punteggio totale sarà 324 + 13 = 337 e il programma generato da esso deve esserelungo 338 byte.
    • L'uso dei flag della riga di comando (ad es. perl -X) Va bene, tuttavia, purché il programma iniziale e tutti i programmi generati utilizzino gli stessi flag. Inoltre, contano anche per il conteggio totale. I trattini, le barre, ecc. Davanti a un flag della riga di comando non contano ai fini del totale, quindi ad esempio perl -Xconta come un byte aggiuntivo.
  • Se si restituisce una funzione, dovrebbe essere una funzione effettiva e non una stringa che, quando valutata, produce una funzione.
  • Non sono consentiti quines impropri (se il tuo programma è un quine).

Esempio

Pseudocodice, 99 byte

IF (PROGRAM LENGTH == 2017)
  PRINT 2017
ELSE
  PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)

Il tuo invio potrebbe funzionare in modo diverso, purché conforme alle regole sopra.


È ;;;consentito solo aggiungere NOP come ?
FlipTack

@ FlipTack Sì. ·
user2428118

"I trattini, le barre, ecc. Davanti a un flag della riga di comando non contano per il totale, quindi ad es. Perl -X conta come un byte aggiuntivo." - È intenzionalmente contrario alla norma qui descritta su Meta? Normalmente, a volte devono essere contati trattini, barre, ecc., A seconda di come appare l'invocazione senza quell'opzione
hvd

@hvd Non pensare di averlo letto, quindi no, non è intenzionale. Detto questo, non penso che ci siano molti danni nell'ignorarli, quindi non lo cambierò per questa sfida.
user2428118

Risposte:


6

*> <> , 29 28 30 byte

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

Provalo qui! (* prova con 2017 byte )
* imposta il ritardo su 0ms o potresti dover aspettare molto tempo

Ciò aggiunge un'ulteriore esecuzione per ogni subsquent. Se ha 2017 byte ed è in esecuzione, genererà 2017 e interromperà l'esecuzione senza altri output.

Aggiornamento: 1 byte salvato verificando se la lunghezza è inferiore a 2017 anziché uguale

Aggiornamento 2: output fisso per +2 byte

Spiegazione

" 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

sì, non del tutto giusto when your program has reached a length of 2017 bytes, non 2016
Destructible Lemon

@DestructibleWatermelon fixed
redstarcoder

4

Python 2.7, 90 byte

Eccone uno relativamente semplice:

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

Prova qui la prima iterazione! Prova qui la penultima iterazione! Prova qui l'iterazione finale!

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.

@redstarcoder L'iterazione finale ha esattamente 2017 caratteri. Puoi vedere il conteggio dei byte nell'angolo in alto a destra, credo ...
Calconym

Ah, mio ​​errore, non sono sicuro di come sia successo, scusa!
redstarcoder

Puoi usare p='';...e 1929else, ma nota che la stampa stampa anche una nuova riga alla fine, quindi dovresti aggiungere una nuova riga finale al tuo programma, altrimenti cresce di due byte dopo la prima esecuzione.
mbomb007,


1

> <> , 34 byte

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

Provalo online! Si noti che, al fine di verificare ciò per valori più piccoli, il valore (meno 1) deve essere in grado di essere generato in 7 byte.

Spiegazione

":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 `"`

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

Ciò presuppone che il progetto sia stato realizzato in Eclipse, utilizzando la convenzione dei .javafile nell'SRC della directory di lavoro. Esistono altri modi per rilevare dove si trova la fonte, ma non penso che ciò sia contrario alle regole.

Fondamentalmente apre il codice sorgente .java e aggiunge As fino al 2017 (dopo un commento). Quando la dimensione del file dell'origine raggiunge un totale di 2017 byte, verrà invece stampata il 2017.


1

C, 197 byte

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

1

Python 2, 217 167 78 byte

Si noti che dovrebbe esserci una nuova riga finale. Ho usato concetti simili a quelli utilizzati da Calconym, quindi grazie per l'ispirazione!

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

Provalo online

Prova a 2016 ; Prova al 2017


Versione precedente:

Questo programma utilizza il inspect modulo per ottenere il numero di riga corrente. Quindi, stampa se stesso ma con una riga aggiuntiva dopo l'importazione, che modifica il numero di riga per il programma successivo. Dovrebbe esserci anche una nuova riga finale qui.

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

Provalo online


1

CJam , 39 33 30 byte

33q:X~

con l'input

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

Provalo online!

Questo è funzionalmente equivalente alla mia versione precedente, tranne per il fatto che evita la necessità di scrivere e sfuggire alle virgolette. La versione precedente:

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

Quali uscite

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

quali uscite

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

e così via. Finalmente il programma

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

Uscite 2017 .

Come funziona

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

Ma cosa fa effettivamente il codice nell'input?

 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)

Se il primo numero del programma non è uguale al 2017, verrà generato un programma in cui quel numero viene incrementato ancora una volta rispetto a questa volta. Se equivale a 2017 (ovvero è stato incrementato 1984 volte), quindi semplicemente spingi 2017 e termina. Il primo numero inizia come 33 (la lunghezza del codice); ogni incremento aumenta la lunghezza del codice di 1 E quel numero di 1, quindi quando 33 è stato incrementato abbastanza da diventare 2017, anche il codice sarà lungo 2017 byte.


0

JavaScript, 98 83 byte

È stata una vera sfida ... Immagino che sia quello che ottengo per richiedere la restituzione delle funzioni effettive e non solo l'origine della funzione.

Funzione originale

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

Sto usando functioninvece di =>qui perché quest'ultimo non supporta le funzioni con nome, assegnando solo funzioni anonime a una variabile.

Prima iterazione

L'esecuzione di quanto sopra nella console del browser restituisce una funzione che, quando trasmessa a una stringa, assomiglia a:

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

Arrivare al 2017

Poiché ogni funzione restituisce una nuova funzione, è possibile chiamare la funzione originale / il suo risultato 1934 volte per ottenere il 2017 .

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

Testato con Firefox.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.