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.


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



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.



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]>>'#':

1

Python 3 -> HQ9 +, 11 bytes

'Q'.__mul__

Que se tenía que hacer

Pruébalo en línea!


¿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

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!


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.


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

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__

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?


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


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


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>


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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.