Scrivi un contatore binario in quine


10

Scrivi due frammenti di codice, che chiameremo s_zero e s_one.

Il programma (l, n) è composto da l copie di s_zero e s_one corrispondenti alle cifre di n in binario, imbottite con s_zero a sinistra.

Ad esempio, se s_zero = fooe s_one = barallora
Program (4, 0) = foofoofoofoo
Program (4, 1) = foofoofoobar
Program (4, 2) = foofoobarfoo
etc.

Il programma (l, n) deve stampare la sorgente del programma (l, (n + 1) mod (2 ^ l)) su standard out. Nell'esempio sopra, foobarfoofoodeve essere stampato foobarfoobarquando eseguito.

Il tuo punteggio è la somma delle lunghezze dei frammenti s_zero e s_one


Quasi duplicato su codegolf.stackexchange.com/questions/35974/… - calcolo eseguito eseguendo il quining del programma con 2 diversi blocchi di codice.
feersum

Il programma può leggere il proprio codice sorgente?
Maniglia della porta

2
@feersum Non sono d'accordo. Questo è molto più semplice, in particolare, non è necessario essere in grado di determinare le interruzioni di riga. Inoltre, penso che il compito faccia la differenza, altrimenti ogni sfida quine generalizzata sarebbe un inganno della sfida quine di base.
Martin Ender,

Il vantaggio del compito più semplice è che incoraggia la concorrenza a creare risposte incredibilmente brevi viste finora - spero che giustifichi questa sfida come diversa!
QuadmasterXLII,

1
Probabilmente vale la pena notare che s_zero e s_one devono essere diversi. Altrimenti ho molte soluzioni con punteggi 2 * n.
randomra,

Risposte:


6

CJam, 29 + 29 = 58 byte

Il codice 0:

0{"_~"]]z(3\+2b(2b2>a\+z~[}_~

Il 1 codice:

1{"_~"]]z(3\+2b(2b2>a\+z~[}_~

Spiegazione

0                       " Push the current bit. ";
{"_~"                   " The basic quine structure. ";
    ]                   " Make an array of the current bit, the function and _~.
                          That is the code fragment itself. ";
    ]                   " Make an array of all code fragments in the stack. ";
    z(                  " Extract the array of the bits. ";
    3\+2b(2b2>          " Convert from base 2, decrease by one and convert back,
                          keeping the length. ";
    a\+z                " Put the bits back to the original position. ";
    ~                   " Dump the array of code fragments back into the stack. ";
    [                   " Mark the beginning position of the array of the next code fragment. ";
}_~

2
ogni volta ...
Ottimizzatore il

3

CJam, 47 + 47 = 94 byte

Il codice 0:

{`"_~"+]:+T2*0+:T)\AsSerS/_,(@2Y$#+2bU@->]zs}_~

Il 1 codice:

{`"_~"+]:+T2*1+:T)\AsSerS/_,(@2Y$#+2bU@->]zs}_~

Scusa l'esplosivo.

Sono sicuro di poter ancora radere qualche byte lì. Aggiungerò una spiegazione una volta che deciderò che non posso essere disturbato a giocare a golf.

Provalo qui.


1

CJam, 45 + 45 = 90 byte

Il codice 0 :

{`]W=L0+:L,Ua*L2b)2b+L,W*>\f{X$!s/\s*"_~"}}_~

Il 1 codice:

{`]W=L1+:L,Ua*L2b)2b+L,W*>\f{X$!s/\s*"_~"}}_~

Spiegazione presto.

Provalo online qui


1

GolfScript, 37 + 37 = 74 byte

0{`".~"+:q;]-2%1\{1$^.@&q@}%\;-1%~}.~
1{`".~"+:q;]-2%1\{1$^.@&q@}%\;-1%~}.~

Non abbastanza breve come la soluzione CJam di user23013 , ma ho pensato di pubblicarlo comunque, anche solo per aumentare (marginalmente) la diversità delle lingue utilizzate.

La mia soluzione non si basa direttamente su nessuna delle soluzioni esistenti (e, in effetti, non le ho esaminate in dettaglio, poiché ancora non leggo molto bene CJam), ma presentano tutte varianti della stessa struttura di base di Quine ( {".~"}.~in GolfScript, {"_~"}_~in CJam). Non è molto sorprendente, poiché sembra essere uno dei modi più efficienti per scrivere un quine con un payload arbitrario in queste lingue.

Ci sono diverse parti di questo codice che non mi piacciono molto, e sospetto che possa essere possibile giocare a golf ulteriormente, ma ho trascorso troppo tempo su questo così com'è.

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.