Genera programmi che stampano n volte la loro lunghezza


16

Dato un numero intero non negativo n, la soluzione deve generare un programma nella lingua prescelta il cui output ha un nnumero di byte pari a quello del programma di output .

Regole

  • È necessario specificare la lingua e la codifica dei programmi emessi dalla soluzione e non è possibile scegliere lingue o codifiche diverse per input diversi per la propria soluzione. La lingua del tuo programma di output può essere o meno la stessa della tua soluzione.
  • La tua richiesta deve solo gestire numeri interi nella tua lingua, ma ti preghiamo di non abusare di questa regola.

Questo è quindi vince l'invio più breve in byte.

Esempio

Supponiamo che nsia 4. La mia soluzione quindi genera f_8, un programma che, nel mio linguaggio (immaginario), genera j3 1s+/2]!mz. L'output del programma ha lunghezza 3 e l'output ha lunghezza 3 * 4 = 12, quindi la soluzione è corretta per l'ingresso 4.

Supponiamo invece che nsia 1 e il mio programma produca ffffpfpffp(10 byte). Il programma ffffpfpffpnella mia lingua scelta dovrebbe produrre un output di 10 * 1 = 10 byte.


Al momento, questo è abbastanza poco specificato. Potresti fornire alcuni esempi?
DJMcMayhem

3
Io penso che io so quello che dovremmo fare, ma ogni volta che ho letto le specifiche, divento meno certo. l'output di un testo che ha n volte il numero di byte quanti il ​​programma in uscita sembra implicare che dobbiamo produrre un testo e un programma. Il set di caratteri e la lingua devono essere coerenti per tutti i numeri interi. A quale "set di caratteri" si riferisce questo?
Dennis,

Non importa, in realtà ho frainteso, e così hanno fatto tutte tranne una delle risposte.
Dennis,

1
@Dennis Non aiuta che il titolo sembri contraddire il corpo. Forse l' output di un programma che emette n volte la sua lunghezza sarebbe un titolo migliore, se capisco correttamente la sfida (non sono sicuro di farlo)
Sisifo

1
Possiamo prendere ncome una stringa?
Shaggy,

Risposte:


7

JavaScript (ES6), 38 byte

n=>`(x="${n}")=>(x+1/7+1e9).repeat(x)`

dimostrazione



3

Brainfuck , 348 byte

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

Provalo online! Oppure guarda la versione Ungolfed (ovvero con cosa ho dovuto lavorare)


disconoscimento

Ho trascorso più tempo a realizzare ciò di quanto pensassi umanamente possibile. Vorrei ringraziare la mia ragazza per avermi permesso di abbandonarla per lavorare su questo; così come mio salvatore .

Come funziona?

Nessun indizio.

Come funziona

Tutti gli output hanno uno snippet di codice finale che sono tutti uguali:

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

Dividiamolo in tre parti chiamate a,b,c

a : [->+>+>+<<<]>>>>               THE DUPLICATOR
b : -[<<+>>-------]<<+-----        THE ADJUSTER
c : [<[.-]>->[->+<<<+>>]>[-<+>]<<] THE PRINTER

L'input iè semplicemente impresso sul fronte in modo unario:

iabc

(es. se l'ingresso era 10, allora i = '++++++++++')

Il duplicatore : divide l'input in due numeri identicim, n , equivalenti all'input

L'Aggiustatore : regolan tale che sia uguale alla lunghezza del programma

La stampante : stampa m*ncaratteri ASCII


Si noti che l'ingresso nell'esempio è a newline, che come valore ASCII di 10, quindi l'ingresso è 10. Se vuoi testare altri piccoli numeri, sostituiscili ,con quelli +che desideri.



2

Haskell , 55 byte

f n=(++)<*>show$"main=putStr$[1.."++show n++"*2]>>'#':"

Provalo online! Esempio di utilizzo: f 1produce il seguente programma da 54 byte:

main=putStr$[1..1*2]>>'#':"main=putStr$[1..1*2]>>'#':"

Provalo online! che produce il seguente output a 54 byte:

#main=putStr$[1..1*2]>>'#':#main=putStr$[1..1*2]>>'#':

1

Python 3 -> HQ9 +, 11 byte

'Q'.__mul__

Doveva essere fatto

Provalo online!


Dove posso provare HQ?
Tito,

1
Bene, Q stampa solo il suo codice sorgente. Puoi provarlo qui: hq9plus.alwaysdata.net . Questa non avrebbe mai dovuto essere una voce seria
michi7x7,

Questo non funziona Se io immetto 1, allora tu emetti Q, che a sua volta emette Q.Qha lunghezza 1, ma il tuo codice ha lunghezza 11.
NoOneIsHere

@NoOneIsHere 'il cui output ha n volte il numero di byte rispetto al programma emesso.' (non il programma presentato)
michi7x7,

1
@NoOneIsHere no: almnet.de/esolang/hq9plus.php (la specifica della lingua indica solo "Stampa l'intero testo del file del codice sorgente")
michi7x7,

1

Java 8, 175 174 byte

interface M{static void main(String[]a){System.out.printf("interface M{static void main(String[]a){int i=(88+%s)*%s;for(;i-->0;System.out.print(0));}}",a[0].length(),a[0]);}}

Esempi:

n=1uscite :

interface M{static void main(String[]a){int i=(88+1)*1;for(;i-->0;System.out.print(0));}}

(lunghezza = 89) che genera 89 zero :

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=10uscite :

interface M{static void main(String[]a){int i=(88+2)*10;for(;i-->0;System.out.print(0));}}

(lunghezza = 90) che genera 900 zero :

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=100uscite :

interface M{static void main(String[]a){int i=(88+3)*100;for(;i-->0;System.out.print(0));}}

(lunghezza = 91) che genera 9100 zero :

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Spiegazione:

interface M{                                // Class:
  static void main(String[]a){              //  Mandatory main method
    System.out.printf("interface M{static void main(String[]a){
                                            //   Print a new program with:
      int i=(88+%s)*%s;                     //    Integer containing (88*A)+B
      for(;i-->0;System.out.print(0));}}",  //    And print that many zeroes
        a[0].length(),                      //     Where A is the length of the number
                                            //     (0-9 = 1; 10-99 = 2; 100-999 = 3; etc.)
        a[0]);}}                            //     and B is the number itself

0

RProgN 2 , 7 5 byte

«•.* 

Con uno spazio finale

spiegato

«•.* 
«    # Yield a function from the remaining string.
 •.  # Append a space and stringify, which builds the original program (Because stringifying a function removes noops, which spaces are)
   * # Repeat the implicit input times.

Provalo online!


0

CJam, 8 13 byte

q_,S\" 8+*S*"

Provalo online

Il programma generato genera spazi quindi è difficile da dire.


Penso che questa sia l'unica risposta che interpreta la parte relativa all'output di un programma che genera correttamente un testo, ma il rapporto è disattivato se l'input ha più di una cifra.
Dennis,

Oh sì, duh. ,,
geokavel,


0

Python → TECO, 20 byte

La risposta è in Python mentre il codice generato è in TECO. Python è una funzione che restituisce VV12345\VVripetute n volte. Vedi qui per una spiegazione del TECO.

'VV12345\VV'.__mul__

0

PHP, 47 + 1 byte

<?="<?=str_pad(_,",strlen($argn)+18,"*$argn);";

stampa un carattere di sottolineatura seguito da spazi.
Esegui come pipe con -F; eseguire il programma in uscita con -fo-F .

Ciò non riuscirebbe per l'input con più di 64 cifre,
che è molto più alto diPHP_INT_MAX (in questo momento).

Tuttavia, non riesce per input superiori a PHP_INT_MAX-18 ... si qualifica ancora?


@HyperNeutrino: questo fallirà per input maggiori di PHP_INT_MAX-18. Questo squalifica?
Tito,

No, dirò che va bene :)
HyperNeutrino il

0

PHP → Python 2, 40 + 1 byte

print "A"*<?=13+strlen($argn),"*",$argn;

stampa un programma Python che stampa ripetute As. Esegui come pipe con -F.


0

Lotto → Carbone, 22 byte

Non sono sicuro di quale codifica dovrei usare, dato che si tratta di byte. Ecco i byte interpretati come Windows-1252:

@set/p=Á%1ñªÉñ«Ìñ¹<nul

Gli stessi byte del PC-850:

@set/p=┴%1±¬╔±½╠±╣<nul

Gli stessi byte nella tabella codici di Charcoal:

@set/p=A%1θ×Iθ⁺Lθ⁹<nul

Il programma di carbone risultante è Plus(Length(Cast(n)), 9)lungo byte:

A       Assign
 %1      (String representation of n)
   θ      To variable q
        Implicitly print a number of `-`s equal to:
×        Product of:
 Iθ       Cast of q to integer
 ⁺        Sum of:
  Lθ       Length of q
  ⁹        Integer constant 9


0

JavaScript (ES8), 43 41 39 byte

n=>`f=_=>"".padEnd(${n}*(88+f).length)`

Provalo

L'output della funzione generata è una stringa di spazi che vengono sostituiti con *s in questo frammento.

g=
n=>`f=_=>"".padEnd(${n}*(88+f).length)`

o.innerText=(h=n=>`Function: ${x=g(n)}\nLength:   ${x.length}\nOutput:   "${x=eval(x)().replace(/./g,"*")}"\nLength:   `+x.length)(i.value=10);oninput=_=>o.innerText=h(+i.value)
<input id=i type=number><pre id=o>


0

R , 46 byte

function(n)sprintf("cat(rep('a',%d*23),'')",n)

Provalo online!

Funzione anonima che restituisce la stringa

cat(rep('a',n*23),'')

Quale stampa a( aseguito da uno spazio) 23 volte nvolte. Avevo bisogno del ''perché altrimenti catnon avrei stampato l'ultimo carattere spaziale.


0

C, 94 byte

main(int c,char**a){if(c>1){c=atoi(a[1]);if(c>0&&c<0xFFFFFF){c*=94;while(c--)printf("r");}}}

questo sarebbe 94 byte includendo l'ultimo \ n che stadard C dice che dovrebbe essere scritto. restituisce i caratteri 'r' come (lunghezza del programma) * (argomento del programma) se l'argomento del programma non esiste o è <= 0 o è> 0xFFFFF non stampa alcun esempio

C:\>nameProg.exe 1
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

0

MATLAB (63 byte)

a=@(n)['repmat(''a'',1,',num2str(n*(15+numel(num2str(n)))),')']

Per esempio:

>> a(5)

ans =

repmat('a',1,80)

e:

>> repmat('a',1,80)

ans =

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
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.