Genere programas que impriman n veces su longitud

16

Dado un número entero no negativo n, su solución debe generar un programa en el idioma elegido cuya salida tiene ntantos bytes como el programa generado.

Reglas

  • Debe especificar el idioma y la codificación de los programas que genera su solución, y no puede elegir diferentes idiomas o codificaciones para diferentes entradas a su solución. El idioma de su programa de salida puede o no ser el mismo que el idioma de su solución.
  • Su envío solo necesita manejar enteros en el rango de su idioma, pero no abuse de esta regla.

Este es el por lo que gana el envío más corto en bytes.

Ejemplo

Supongamos que nes 4. Mi solución luego genera f_8un programa que, en mi lenguaje (imaginario) genera j3 1s+/2]!mz. La salida del programa tiene una longitud 3 y su salida tiene una longitud 3 * 4 = 12, por lo que la solución es correcta para la entrada 4.

Supongamos, en cambio, que nes 1 y mi programa genera ffffpfpffp(10 bytes). El programa ffffpfpffpen mi idioma elegido tendría que producir una salida de 10 * 1 = 10 bytes.

Hiperneutrino
fuente
Por el momento, esto es bastante poco especificado. ¿Podría darnos algunos ejemplos?
DJMcMayhem
3
Yo creo que sé lo que se supone que debemos hacer, pero cada vez que leo la especificación, llego a ser menos seguro. generar un texto que tenga n veces la cantidad de bytes que el programa generado parece implicar que tenemos que generar un texto y un programa. El conjunto de caracteres y el idioma deben ser consistentes para todos los enteros. ¿A qué "conjunto de caracteres" se refiere esto?
Dennis
No importa, en realidad no entendí bien, y todas las respuestas menos una.
Dennis
1
@ Dennis No ayuda que el título parezca contradecir el cuerpo. Quizás generar un programa que genere n veces su longitud sería un mejor título, si entiendo el desafío correctamente (no estoy seguro de hacerlo)
Sisyphus
1
¿Podemos tomar ncomo una cuerda?
Shaggy

Respuestas:

7

JavaScript (ES6), 38 bytes

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

Manifestación

Arnauld
fuente
3

brainfuck , 348 bytes

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

Pruébalo en línea! O vea la versión Ungolfed (es decir, con lo que tuve que trabajar)


Descargo de responsabilidad

Pasé más tiempo haciendo esto de lo que pensé que era humanamente posible. Me gustaría agradecer a mi novia por permitirme abandonarla para trabajar en esto; así como mi salvador .

¿Cómo funciona?

Ninguna pista.

Como funciona

Todas las salidas tienen un fragmento de código final que son todas iguales:

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

Vamos a dividirlo en tres partes llamadas a,b,c

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

La entrada isimplemente se agrega al frente en unario:

iabc

(por ejemplo, si la entrada fue 10, entonces i = '++++++++++')

El duplicador : divide la entrada en dos números idénticos m, n, equivalentes a la entrada

El Ajustador : se ajusta de manera ntal que sea igual a la duración del programa

La impresora : imprime m*ncaracteres ASCII


Tenga en cuenta que la entrada en el ejemplo es un newline, que como un valor ASCII de 10, por lo tanto, la entrada es 10. Si desea probar otros números pequeños, reemplace el número ,por el número +que desee.

Graviton
fuente
2

Cheddar , 10 9 bytes

(*)&" "*9

Un incómodo polígono de protones> _ <

Downgoat
fuente
+1 para Proton polyglot con Cheddar para mostrar la inspiración: D
HyperNeutrino
2

Haskell , 55 bytes

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

Pruébalo en línea! Ejemplo de uso: f 1produce el siguiente programa de 54 bytes:

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

Pruébalo en línea! que produce la siguiente salida de 54 bytes:

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

Python 3 -> HQ9 +, 11 bytes

'Q'.__mul__

Que se tenía que hacer

Pruébalo en línea!

michi7x7
fuente
¿Dónde puedo probar HQ?
Tito
1
Bueno, Qsolo imprime su propio código fuente. Puede probar eso aquí: hq9plus.alwaysdata.net . Se suponía que esto nunca sería una entrada seria
michi7x7
Esto no funciona Si ingreso 1, entonces usted sale Q, que a su vez sale Q. Qtiene longitud 1, pero su código tiene longitud 11.
NoOneIsHere
@NoOneIsHere 'cuya salida tiene n veces más bytes que el programa generado'. (no el programa presentado)
michi7x7
1
@NoOneIsAquí no: almnet.de/esolang/hq9plus.php (La especificación del idioma solo indica "Imprime el texto completo del archivo de código fuente")
michi7x7
1

Java 8, 175 174 bytes

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

Ejemplos:

n=1salidas :

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

(longitud = 89) que genera 89 ceros :

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=10salidas :

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

(longitud = 90) que genera 900 ceros :

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=100salidas :

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

(longitud = 91) que genera 9100 ceros :

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Explicación:

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
Kevin Cruijssen
fuente
0

RProgN 2 , 7 5 bytes

«•.* 

Con un espacio final

Explicado

«•.* 
«    # 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.

Pruébalo en línea!

Un taco
fuente
0

CJam, 8 13 bytes

q_,S\" 8+*S*"

Pruébalo en línea

El programa generado genera espacios, por lo que es difícil saberlo.

geokavel
fuente
Creo que esta es la única respuesta que interpreta la parte sobre la salida de un programa que genera un texto correctamente, pero la relación está desactivada si la entrada tiene más de un dígito.
Dennis
Oh sí, duh. ,,
geokavel
0

Ly , 29 bytes

"\"9>("&onu")[<&s&ol>1-]<;"&o

Pruébalo en línea! (no funciona actualmente debido a un error de preprocesamiento) ¡ Todo bien!

LyricLy
fuente
0

Python → TECO, 20 bytes

La respuesta está en Python mientras que el código generado está en TECO. Python es una función que devuelve nVV12345\VV repetidas veces. Vea aquí para una explicación del TECO.

'VV12345\VV'.__mul__
Feersum
fuente
0

PHP, 47 + 1 bytes

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

imprime un guión bajo seguido de espacios.
Ejecutar como tubería con -F; ejecutar programa generado con -fo-F .

Esto fallaría para la entrada con más de 64 dígitos,
que es mucho mayor que PHP_INT_MAX(en este momento).

Sin embargo, falla para una entrada mayor que PHP_INT_MAX-18 ... ¿todavía califica?

Titus
fuente
@HyperNeutrino: esto fallará para entradas mayores de PHP_INT_MAX-18. ¿Eso lo descalifica?
Tito
No, diré que está bien :)
HyperNeutrino
0

PHP → Python 2, 40 + 1 bytes

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

imprime un programa Python que imprime repetidamente As. Ejecutar como tubería con -F.

Titus
fuente
0

Lote → Carbón, 22 bytes

No estoy seguro de qué codificación debería usar, ya que estos son bytes. Aquí están los bytes interpretados como Windows-1252:

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

Los mismos bytes que PC-850:

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

Los mismos bytes en la página de códigos de Charcoal:

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

El programa Charcoal resultante tiene una Plus(Length(Cast(n)), 9)longitud de bytes:

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
Neil
fuente
0

JavaScript (ES8), 43 41 39 bytes

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

Pruébalo

La salida de la función generada es una cadena de espacios que se reemplazan con *s en este fragmento.

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>

Lanudo
fuente
0

R , 46 bytes

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

Pruébalo en línea!

Función anónima que devuelve la cadena.

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

Que imprime a( aseguido de un espacio) 23 nveces. Necesitaba el ''porque de lo contrario catno imprimiría el último carácter de espacio.

Giuseppe
fuente
0

C, 94 bytes

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

esto sería 94 bytes, incluye la última \ n que el estándar C dice que debería escribirse. regresar como caracteres 'r' como (longitud del programa) * (argumento del programa) si el argumento del programa no existe o es <= 0 o es> 0xFFFFF no imprime nada ejemplo

C:\>nameProg.exe 1
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
RosLuP
fuente
0

MATLAB (63 bytes)

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

Por ejemplo:

>> a(5)

ans =

repmat('a',1,80)

y:

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

ans =

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PieCot
fuente