Quino ammorbidito dalle radiazioni


38

È semplice: crea un quine appropriato dove se rimuovi qualsiasi personaggio, è ancora un quine.

La differenza tra questo e un quine indurito per radiazione è che se il tuo programma è AB, in un quine indurito per radiazione Averrebbe emesso AB, ma qui Aemetterebbe A.

Code golf, si applicano tutte le regole standard, scappatoie standard, nessun imbroglio.


Un programma vuoto è valido?
Loovjo,

4
@Loovjo No.
Martin Ender,

3
@feersum La sfida indica "Crea un quine dove ...", quindi ABdovrebbe essere generato AB.
Mego

1
@Mego So che lo dice, ma le specifiche non sono sempre così precise, e non è indicato negli esempi.
feersum

4
@feersum "Crea un quine" significa fare un quine. "La differenza tra questo e un quine indurito dalle radiazioni ..." significa che l' unica differenza è che il programma con un byte rimosso rimuove un quine, non un programma che stampa l'origine del programma originale. Non c'è ambiguità qui.
Mego

Risposte:


22

> <> (Pesce), 145 107 byte

Questa risposta utilizza le istruzioni di salto di <<> per risolvere il problema.

!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58 

Questo quine in realtà contiene due diversi generatori di quine. Inizia con una logica di salto e per impostazione predefinita utilizza il quine sinistro. Se un personaggio viene rimosso dalla logica di salto o dalla quina sinistra, il programma passa alla quina destra.

Puoi provarlo qui

Spiegazione

Il codice può essere sezionato in alcune parti:

A: !<0078*+00~..>0[!. 
B:              >0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.
C:                                                    .0f<
D:                                                        >0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.
E:                                                                                                 .0+*a58 

Spiegazione delle diverse parti:

  • A: Salta a destra di C. Se un carattere viene eliminato da A, questo salta a sinistra di D o a destra di E, attivando il secondo quine. Se un carattere viene eliminato da B o C, il codice viene spostato di 1 carattere a sinistra, facendo saltare questo a sinistra di D.
  • C: Questo codice salta a sinistra di B.
  • B: Quine # 1
  • D: Quine # 2
  • E: Salta a sinistra di D

Spiegazione del quine (con il numero 1 come esempio):

Una volta che il puntatore dell'istruzione raggiunge una delle quine, sei certo che quella quint è completamente intatta.

>0[!.                                       //Fix the instruction pointer's direction and empty the stack (The '!.' is a leftover from codepart A)
     "r43a*+                                //Start reading all of the code and add the '"' character to the stack
            8a+&                            //Because the quine started reading at the 19th character instead of the first, the stack has to move 18 characters. 
                                            //This part saves the number 18 to the register.
                {ee+00&1-:&(?.              //Move the stack one to the left, decrease the stack by 1. If the stack is not empty yet, jump back to the start of this section.
                              ~~              //Clean the temporary variables from the stack. It should now contain the whole quine.
                                ol?!;4b*0.  //Print the first character from the stack. As long as the stack isn't empty, jump back to the start of this section.

Spiegazione per favore.
CalculatorFeline

Ribadendo sopra.
Calcolatrice

1
È abbastanza chiaro?
Thijs ter Haar,

36

Lenguage , 4,54 × 10 761 byte

Ha questo numero di caratteri null:

453997365974271498471447945720930600149036031871190716908688344432973027776681259141680552038829875159204621651993092104775733418288411812715164994750890484868305218411129600012389568016974351721147925344946382782884546247102886167837964612372737300786173159265347137401863281368021545169383664534228503236761742285358985343373496184959796553930661837467682191561275123057706776367104142995491262443697167483190110516522677811931124842961701222425076750211774387637740969301686178545299089832300154448308384461700726890067468872402133010536518468336342175124002115991866466700174974019423711837589532744970385003356612639263433822126850314801275940879069069974437167102618471264140597777702065896715558989678487253830854848740247786166790545462769498303055791292

Vedendo come il criterio in questa sfida sia in conflitto con la definizione di "quine corretta", sul serio, penso che vincerà una variante Unary.

Codice Brainfuck espanso:

>>+++>++++++++>+++>+++>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>++++++++>++++>++++++++>++++>+++++++>++>+++>+>+++>++>+++>+++>+>+>+>+>+>+>+>+>++++>++++>+++++++>+>++++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>+++++>++++++++>++++>+++++++>+++++++>+>+>+++>+>+>+>++++++++>+++>+++++++>+>+++>+>+++>+>+++>+>++++++++>++++>++++++++>++++>++++++++>++++>++++>+>+++>+++>++>+++++++>+++++++>+>+>+>++++++++>+++>+>++++++++>++++>+>+++>++>+++++++>++>+++++++>++++>++++>++++++++>+++>++++++++>+++>+++>+>++++>++++>++>+++++++>+++>+++>++++++++>++++>+>+++>++>+++++++>++++>++++>+++++++>+++>+++>+++>+++>++++++++>++++>++++>+>+++>+>+++>++>+++++++>+++++++
[
    [->+>+<<]
    >>>>[<<[->+<]>>[-<<+>>]>]
    <<[-[->+<]+>]+++
    [[->>+<<]<]<
]
+>+>+>+
[>]+++>++
[
    [<].
    >[-]>[-]>[-]>[-]
    <+[<<++++++++>>->+>-[<]<]
    ++++++++>++++++++>+++++++>>
]
.

Se un carattere viene rimosso dal programma Lenguage, l'ultimo carattere diventa a <, il che fa sì che il programma stampi esattamente un carattere in meno.


1
Come sei riuscito a trovare quel punto fisso? (O in alternativa, come funziona il codice Brainfuck?)
Martin Ender,

1
@ MartinBüttner Il primo big loop copia e codifica i dati sotto forma di "> +++ ..." (e li inverte). L'altro grande ciclo stampa i dati come intero in unario. Non è così complicato ma è lungo solo perché è Brainfuck.
jimmy23013,

Oh giusto, quindi è proprio come una semplice quinta Brainfuck, ma con una diversa funzione di decodifica?
Martin Ender,

@ MartinBüttner Un po '. Ma metà del programma è la "funzione di decodifica".
jimmy23013,

Sembra che potresti usare una tecnica simile per costruire risposte di punteggio arbitrario per codegolf.stackexchange.com/q/57257/8478 (anche se come esattamente ciò dipenderebbe dalla risposta al mio ultimo commento).
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.