Programma che crea versioni più grandi di se stesso (quine-variant)


109

Devi scrivere un programma che produrrà il codice sorgente che è

  1. Più grande del programma originale (carattere saggio)
  2. Stampa un altro programma più grande di se stesso quando viene eseguito (ovvero il nuovo programma è anche una risposta valida a questa sfida)

Questo è code-golf, quindi vince la risposta più breve.


4
@Kevin, La definizione è ricorsiva. L'output dovrebbe essere un programma il cui output è più grande di se stesso e una risposta a questa domanda. Quindi l'output dell'output dovrebbe essere più grande dell'output e l'output dell'output dovrebbe essere ancora più grande, ecc.
ugoren,

8
Penso che dovresti chiarire le tue regole. Da un lato, qualsiasi ulteriore codice generato da un tale programma è "ovviamente inutile"; d'altra parte, tutto il codice aggiuntivo nell'output è "utile" in quanto promuove l'obiettivo di rispondere a questa sfida.
Jason C,

5
Ci scusiamo per aver distrutto la tua sfida. :^)
Giustino,

2
Penso che questa sfida sarebbe molto meglio come una gara di popolarità di un codice golf. Consentirebbe molta più creatività!
corsiKa

30
Naturalmente, un tale programma dovrebbe essere conosciuto come un chinino.
Jonathan Van Matre,

Risposte:


89

GS2 (8636bd8e) , 0 byte



Questo stampa una sola nuova riga, che stampa due nuove righe, che stampa tre nuove righe, eccetera.

Provalo online!


3
Tecnicamente non è in competizione poiché gs2 è più recente della sfida?
DJMcMayhem

24
Questo impegno precede la sfida di un mese e mezzo. L'ho appena testato e funziona come previsto.
Dennis,

1
Come mai questa non è una scappatoia ???
Mama Fun Roll

14
@MamaFunRoll Perché dovrebbe essere? Questo non è diverso da un programma Retina vuoto che stampa 1 , un programma Jelly vuoto che stampa 0 o un programma Stuck vuoto che stampa Hello, World! .
Dennis,

2
@Cyoce Accade semplicemente che una newline produca un'altra newline in GS2.
Esolanging Fruit

299

H9 + : 1 carattere

9

Giusto. Un personaggio. Trasmette il testo a 99 bottiglie di birra , che è un programma valido. Tutti i dati estranei non contano, ma ci sono molti messaggi 9dentro.

L'output del programma emesso è il testo di 99 bottiglie di birra 59 volte.

Questa funzione indica il numero di volte in cui i testi vengono emessi se si eseguono i ntempi del programma (se il mio calcolo è corretto):

f(n) = 59n-1

32
Un programma a 0 caratteri in una determinata lingua, dato che è valido, probabilmente produrrà 0 caratteri. E poiché 0 * x = 0 per qualsiasi valore finito x, posso affermare che il mio programma in uscita è in realtà 9999999999999999 volte più grande del codice sorgente.
nitro2k01,

39
@JohannesH. Per tutti i problemi (risolvibili) esiste un linguaggio di programmazione che risolve il problema in 0 caratteri.
Cruncher,

15
Mi spingo ancora a chiamarlo "Teorema di Cruncher", a meno che non sia già stato scoperto.
Erty Seidohl,

22
Una caratteristica interessante è che conterrà anche 2*59^n-2istanze di "Hello, world!", A causa della "h" in "the".
AJMansfield,

8
Sembra che tu sia stato battuto.
PyRulez,

118

GolfScript, 9 caratteri

{.'.~'}.~

Questo codice genera:

{.'.~'}{.'.~'}.~

che produce:

{.'.~'}{.'.~'}{.'.~'}.~

che produce:

{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~

e così via.

Credo che questa sia la risposta più breve finora in un "vero" linguaggio di programmazione completo di Turing.

Spiegazione:

Fondamentalmente, il codice originale sopra è un "quine-layer": genera un quine normale seguito da se stesso.

In GolfScript, qualsiasi blocco di codice letterale (ad esempio {foo}), se lasciato indisturbato nello stack, è un quine. Di conseguenza, da solo, {.'.~'}emette semplicemente se stesso, proprio come farebbe qualsiasi altro blocco di codice.

Alla .~fine del codice prende l'ultimo blocco di codice nello stack, lo duplica ed esegue la copia. Quando eseguito, il codice .'.~'all'interno del blocco di codice duplica l'elemento più in alto nello stack (ovvero la copia di se stesso) e aggiunge la stringa .~.

Alla fine del programma, l'interprete GolfScript stringe ed emette tutto sullo stack, che, in questo caso, consiste in un {.'.~'}blocco in più rispetto all'input, più la stringa .~.

Bonus:

L'aggiunta di un ]prima del primo .(per raccogliere tutti i blocchi di codice nello stack in un array prima che vengano duplicati) lo fa crescere in modo esponenziale:

{].'.~'}.~

uscite:

{].'.~'}{].'.~'}.~

che produce:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

che produce:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

e così via.


196
{].'.~'}.~︵ ┻━┻
nitro2k01,


2
@ nitro2k01 i miei primi pensieri esattamente: D
Songo

1
È "reale" tra virgolette perché HQ9 + non è reale o perché GolfScript non è reale o entrambi?
Roger Pate,

1
@thepiercingarrow il codice sorgente assomiglia a questo
Rod

108

Caratteri Java 7: 0



Salva come file Blank.java. Se lo salvi come qualsiasi altro file, sostituisci qualsiasi istanza Blankcon il nome file appropriato.

Quindi, eseguire nella riga di comando tramite prima compilazione, quindi in esecuzione. Se la compilazione non riesce, interrompere.

Lo elenco come Java 7 perché potrebbe essere prodotto diversamente per le diverse versioni di Java.

Primi output (inviati a stderr):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
"Devi scrivere un programma che produrrà un codice sorgente che è" L'output non è probabilmente un codice sorgente. Inoltre, a seconda della definizione di output (se l'output deve provenire in modo specifico stdout) non viene effettivamente emesso nulla.
nitro2k01,

43
@ nitro2k01 Cito lo stesso: "Devi scrivere un programma che genererà il codice sorgente ". Tutto è codice sorgente. Ma solo alcune cose sono codice sorgente valido . Inoltre, non è stato specificato ciò che è considerato output, quindi mi è concessa la libertà lì.
Giustino,

15
@PyRulez Esatto. Ho sfruttato le tue regole. Non è necessario accettare questa risposta. Quando ho pubblicato questo, sapevo che sarebbe seguita una controversia, completa di molti voti su e giù. Ho deciso che ne sarebbe valsa la pena, comunque.
Giustino,

29
Sei sicuro che il programma stesso abbia stampato l'output? Non era solo il compilatore? Il programma non viene mai compilato e di per sé non viene interpretato né eseguito, quindi non è stato in grado di produrre alcun output.
VX,

12
@ blabla999 Non sono d'accordo - le persone non provano queste sfide perché qualcun altro fa qualcosa di folle. Ci sfidiamo solo a farlo in un altro modo. Come dice Mark Rosewater, "Le restrizioni generano creatività"
corsiKa

79

HQ9 +, HQ9 ++ e simili, 2 caratteri

QQ

Questo è l'output:

QQQQ

36
Ho visto questo e ho pensato "Oh no, niente può batterlo." Ho iniziato a provare a trovare qualcosa, poi mi ha colpito. Quindi ho pubblicato una risposta.
Giustino,

1
@Quincunx Bravo, ha valutato la tua risposta.
Victor Stafusa,

4
@Quincunx No, penso che sia 2^2^n, dove il programma iniziale è la generazione 0. La lunghezza ricorre m -> m^2.
Vortico,

3
@Vortico Ottimo punto. Anche se ho detto male, intendevo: alla lunghezza del codice n, l'output diventa n^n. Tuttavia, questo è falso; quando la lunghezza del codice è n, la lunghezza dell'output èn^2
Justin

2
È divertente però perché anche le prime due iterazioni sono possibili contendenti per questa domanda.
PyRulez,

29

Ruby 27

Una versione leggermente modificata di questo ( via ):

puts <<3*3,3
puts <<3*3,3
3

Il numero di volte in cui putsviene stampata la linea aumenta in modo esponenziale.

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
Risposta ispirata dai Kaiser Chiefs
Ben Jackson,

25

Calcolo lambda - 29

Un semplice termine lambda

(λu.(u u)(u u))(λu.(u u)(u u))

Riducendo questo termine di una beta si ottengono riduzioni

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

E così via e così via. È una semplice variante del classico (λu.u u)(λu.u u)che è un quine nel calcolo lambda, la doppia autoapplicazione qui significa che otteniamo il doppio dell'output.


7
Direi che nel calcolo lambda, "eseguire" un termine lambda significa calcolare la sua forma normale, non eseguire una singola riduzione beta. Inoltre, un termine può contenere più redex, quindi "ridurre un singolo redex" è un'operazione ambigua.
Petr Pudlák,

2
Hai ragione, ma poiché questo termine non ha una forma normale, ha senso parlarne in termini di riduzione dei piccoli passi. Dato che il calcolo lambda non ha alcuna valutazione intrinseca dell'insieme, posso semplicemente definirlo "in esecuzione" per ridurre un singolo redex di livello superiore redex con la semantica call-by-name no?
jozefg,

3
Bene, i termini senza forma normale corrispondono a programmi non terminanti. E il problema con il redex di livello superiore è che un termine può avere due redex, nessuno dei quali è un sotto-termine di un altro. Potresti scegliere un criterio quale ridurre, ma direi che poi ti allontani molto dalla semantica del calcolo lambda standard. (Comunque apprezzo la tua nuova idea.)
Petr Pudlák,

2
(λx.xxx) (λx.xxx): 20
Fabio F.

2
(λx. xx) (λx. xxx) si riduce a quello in un solo passaggio
Ben Millwood,

23

SH script, 9

cat $0 $0

Cresce a ritmo esponenziale.

Eseguire come sh whatever.sho impostarlo come eseguibile.

La versione di Windows è qui .


2
Al momento in cui scrivo questo commento, la pagina di Quine Wiki dice che leggere dal filesystem è barare.
Lord Ratte,

3
@LordRatte D'altra parte, la sfida non era scrivere un quine.
Jason C

20

dc 11

Abbastanza semplice:

6579792
dfP

La prima riga viene ripetuta una volta ogni generazione:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

L'ultima riga è composta dalle seguenti istruzioni: dduplica l'ultimo valore messo nello stack (6579792) (in modo da ottenere un'altra copia ogni volta che lo eseguiamo), fstampa l'intero stack (che è un gruppo dello stesso numero) e Pstampa il numero (6579792) come flusso di byte, che visualizza come dfP.


16

redcode (soluzione ricorsiva)

Questo è il codice del guerriero più semplice scrivibile in redcode , il famoso Imp:

MOV 0, 1

Quando eseguito, il codice scrive una copia della sua singola istruzione all'indirizzo successivo in memoria; quindi lo esegue, ecc.


15

Python 3 - 55

print(open(__file__).read())
f=lambda:print('f()')
f()

Questo potrebbe essere abbreviato sostituendo __ file__ con un singolo nome di file e salvando il file in quel modo, ma ho ritenuto che questa risposta fosse più nello spirito della domanda. Dopo una iterazione emette:

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
Questo non è un quine. Vedere la definizione .
Petr Pudlák,

14
@ PetrPudlák Né ci sono programmi in questa domanda. Questo è un problema con una variante di quine, non una quining rigorosa.
AJMansfield,

6

Smalltalk, 125 61 57

La versione da golf sembra quasi illeggibile, quindi spiegherò prima (e userò identificatori reali).

Questa è una variante del metodo di auto-modifica del "modo più strano di produrre uno stack-overflow".

Il metodo stampa un messaggio di saluto e la sua fonte corrente (solo per la dimostrazione). Quindi, il codice viene modificato per generare una stringa più lunga e installato. Infine, il nuovo codice viene chiamato in modo ricorsivo.

Al fine di proteggere me stesso da una fuga immediata, consente all'utente di confermare in ogni ciclo.

compilare in Object:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

avviare lo spettacolo inviando "eatMe_alice" a qualsiasi Oggetto; zero farà:

nil eatMe_alice

Una buona variante è quella di non chiamare il nuovo codice in modo ricorsivo, ma invece iterativamente, svincolando lo stack di chiamate e rientrando nel nuovo metodo. Ciò ha il vantaggio di non provocare un'eccezione di ricorsione. Per fare ciò, sostituire la chiamata ricorsiva ("self eatMe_alice") con:

thisContext resend

Golf:

Ovviamente, la stampa e l'auto chiamata non sono state richieste, quindi il più breve (per il golf) è semplicemente quello di aggiungere un commento alla mia fonte e restituirlo. Come effetto collaterale, viene installato anche per la prossima chiamata ...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

SH script, 12 8 7

Archivia un file con

sed p *

nella propria directory vuota ed eseguire da questa directory utilizzando sh [file]o impostare eseguibile.


Vecchia alternativa con 8 caratteri , ma non necessita di una propria directory. Archivia un file con

sed p $0

ed eseguire utilizzando sh [file]o impostare eseguibile.

Vecchia alternativa con 12 caratteri :

sed -i- p $0

Questo verrà effettivamente emesso nel file di programma stesso, ma non è stato specificato dove l'output. Si replica a un ritmo esponenziale.


1
Potresti ancora avere la possibilità di usare ed, non volevo dare un'occhiata alla sua pagina man ...
Jens Erat,

4

JavaScript, 41 , 40 caratteri

function f(){console.log(f+"f(f())")}f()

La prima volta che lo esegui, si emette con un altro ;f()alla fine. Le successive esecuzioni dell'output determinano la stampa di ogni sorgente "input" due volte.

alertsarebbe più breve di console.logma non considero più dialoghi di avviso come "l'output" mentre sembra ragionevole chiamare più righe nella console come output.


Puoi salvare un byte con "f(f())"invece di"f();f()"
Hedi

Questo non sembra funzionare per me ...
Destructible Lemon

4

J , 1 byte

'

Provalo online!

La citazione aperta dà, ovviamente, l'errore di citazione aperta:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

Si noti che, per la natura dell'interprete J, gli errori vengono stampati su STDOUT , non su STDERR.

Quando quanto sopra viene eseguito come codice, stampa:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

Poi

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

e così via. Ogni volta che il codice viene eseguito, la seconda riga viene riempita a sinistra con quattro byte |   , soddisfacendo i requisiti di questa sfida.

J , variante quine corretta, 25 byte

echo,~'echo,:~(,quote)'''

Provalo online!

Outputs

echo,:~(,quote)'echo,:~(,quote)'

E poi si emette due volte, su linee separate:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

poi

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

e così via.

Il primo output è una semplice variante di J quine standard . L'aggiunta si ,:~concatena verticalmente, dove l'array 2D risultante viene stampato come due righe della stessa stringa.


3

Windows .BAT, 25

@COPY %~nx0+%~nx0 CON>NUL

Cresce a ritmo esponenziale.

Versione SH equivalente qui .


3

reticolare, 11 byte, non competitivo

"'34'coo1o;

Questo è il framework quine standard, tranne che un extra 1viene stampato dopo ogni iterazione. Provalo online!

Prime uscite:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Microscript II, 6 byte

La lingua non competitiva postdatizza la sfida.

"qp"qp

La prima iterazione aggiunge un extra qpalla fine e ogni iterazione successiva aggiunge una copia extra di questo programma originale all'inizio.



2

EcmaScript 6 (51 byte):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

Produce una versione più lunga di se stesso, che può produrre una versione più lunga di se stesso, che può produrre una versione più lunga di se stesso, ecc ...


2

PHP, 38

<?echo fgets(fopen(__FILE__,'r')).';';

Aggiungerà un punto e virgola ad ogni esecuzione.


I punti e virgola sono inutili?
Giustino,

3
@Quincunx Lo sono, hai ragione. Tuttavia, quale considereresti un codice utile?
ComFreek,

Forse potresti inserirti in ';'. Quindi otterrai output più lunghi.
Giustino,

1
perchè no <?=fgets(fopen(__FILE__,'r')).';';?
Ismael Miguel,

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013,

2

ECMAScript 6 (38 caratteri)

(f=_=>'(f='+f+')();(f='+f+')();')();

Quali uscite:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

modificare

Potresti fare (28 caratteri):

(f=_=>'(f='+f+')();'+f())();

Tuttavia, si ripeterà all'infinito e non restituirà mai nulla ... ma questo può essere risolto facendo qualcosa del genere (42 caratteri):

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

Che produrrà:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=+1 per le emoticon
TuxCrafting

2

Lisp comune, 16 personaggi

(print `(or ,-))

Certo, è solo interattivo, ma essere in grado di fare riferimento all'attuale modulo di livello superiore è probabilmente il modo migliore per minimizzare un programma non banale che soddisfa le specifiche.

Ciò che sarebbe davvero interessante è ciò che esplode più velocemente. Forse qualcosa del genere

(print `(progn ,@(loop repeat (length -) collect -)))


+1 per Lisp comune. Mi sembra che puoi saltare `e ,?
daniero,

@daniero Senza la citazione, stampa il programma originale, non cresce mai. A quel punto, puoi anche omettere oranche:(print -)
Stuart Olsen,

2

Julia, 66 caratteri

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

Uscita (134 caratteri):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Risultato dell'esecuzione del risultato (268 caratteri):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

risultato successivo (536 caratteri):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Prossimo risultato (1072 caratteri):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Spero che questo sia conforme alle regole.

Produce output più grandi e l'output stesso è un codice sorgente valido che produce di nuovo output più grandi.


L'output, quando eseguito, produrrà una voce valida?
PyRulez,

Nel primo esempio l'output è un codice valido. È una stringa letterale contenente 5 punti. Nel secondo esempio, l'inserimento del prompt julia stesso non farebbe nulla. Ho solo pensato che dare al sostituto effettivamente un carattere di nuova riga premendo invio produce un output più lungo dell'input.
ML

"....." produrrà una versione più grande di se stesso?
PyRulez,

Ah, ora capisco. Ho appena notato che doveva essere ricorsivo ... tempo per correggere la mia soluzione. Grazie per il suggerimento.
ML

1
Immagino che il codice sia ora conforme alle regole.
ML

2

05AB1E, 15 byte, non competitivo

0"DÐ34çý"DÐ34çý

Provalo online!

Stampa 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
che stampa 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
ecc.


Entrambe le istanze di DDpossono essere sostituite da Ð.
Emigna,

1
Perché non competere?
MD XF,

2

Evoloop, rettangolo 9 × 9 (81 celle)

L' automa cellulare Evoloop incluso in Golly supporta schemi che si replicano in un modo "simile a quello di un quine". In particolare, questi schemi contengono ciascuno un "programma"; un modello si riproduce eseguendo prima il programma (che crea il "corpo" della figlia), quindi copiando il programma nella figlia.

Quanto sopra si applica al più famoso automa cellulare "Langton's Loops" e ad Evoloop, ma Evoloop ha una differenza interessante, che è che è facile creare un modello che cresce in ogni generazione successiva.

(Molto più interessante, secondo me, è il fatto che Evoloop sia un semplice automa cellulare che contiene schemi che si riproducono e si evolvono in modo molto realistico! Penso che gli unici automi cellulari conosciuti che fanno questo siano Evoloop e i suoi discendenti Un difetto di Evoloop, tuttavia, è che esiste un genoma "migliore" in particolare; l'evoluzione alla fine converge sempre in questo genoma.)

Ora, ci sono due carenze in questa presentazione. Uno è che non è chiaro quale sia l '"output" di un automa cellulare. Ma penso che un automa auto-riproducente sia "abbastanza vicino" per essere un quine; non è certo meno interessante! L'altro difetto è che questi schemi non creano semplicemente una singola copia di se stessi; ogni copia del modello originale tenta di creare infinite copie di se stessa, e queste copie finiscono per interagire tra loro in modo distruttivo. Quindi, penso di aver soddisfatto i requisiti di questa sfida nello spirito, ma non nella lettera.

Senza ulteriori indugi, il modello è:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

Ecco di nuovo lo schema, in un formato che può essere copiato e incollato in Golly:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

Va bene, ma che aspetto ha? Sembra così:

Un modello in un automa cellulare che crea copie sempre più grandi di se stesso.

Nell'animazione sopra, puoi vedere il modello iniziale creare una figlia più grande, che crea una nipote più grande, quindi una pronipote più grande, e infine una bisnipote ancora più grande che inizia a costruire una terza-ancora più grande- nipotina. Se seguissi questo schema per molto tempo, continuerebbe ad andare avanti così per sempre (o forse alla fine verrebbero superati dagli organismi evoluti, che sono in grado di riprodursi molto più velocemente; non ne sono sicuro).


1

LOTTO, 26

Inserisci questo codice in qualsiasi file .bat e continuerà ad essere eseguito (in un ciclo infinito) e anche il file crescerà.

echo echo %0 ^>^> %0 >> %0

Questo non funziona abbastanza, %0è il comando usato per invocare lo script, che potrebbe non avere .BATun'estensione. È possibile utilizzare %~nx0per ottenere il nome file completo del file batch.
Jason C,

@JasonC AFAIK, non ha bisogno .batdi essere eseguito. Se il nome file è execute.bat, è possibile inserire executeo execute.bat. Entrambi funzioneranno.
ub3rst4r,

Il file stesso deve avere .batun'estensione per l'esecuzione, ma è possibile lasciare l'estensione quando lo si esegue (quando si digita un comando senza alcuna estensione, Windows tenta .com, .exequindi .batin questo ordine). Se il nome file è hello.bat, quindi >> %0scriverà un file denominato hello, che non è l'originale hello.bat(e non può essere eseguito).
Jason C

1

PYG (6)

P(Q,Q)

Stampa il proprio codice sorgente, separato da newline. La seconda generazione sarebbe

P(Q,Q)
P(Q,Q)

e così via.


1

OLIO , 83 byte

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

Prima stampa due righe con uno zero in esse, quindi confronta ciascuna riga con la riga 1, se sono uguali (come nel caso in cui il file è esaurito), stampiamo ciò che è nella cella 26. L'output risultante apparirà come lo stesso, tranne con un aggiunto 33, che non fa nulla. La prossima volta verrà aggiunta un'altra riga e così via.


1

Aiuto, WarDoq! , 1 byte.

H

Stampe Hello, World!.

Altri caratteri oltre a H sono codici sorgente validi (e sicuri) (che stampano altre varianti di Hello World).


Funziona anche in (varianti di) HQ9 +.
Calcolatrice

@CalculatorFeline in HQ9 + questo non continuerebbe a crescere.
Martin Ender,
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.