¿Cuántas veces tendrás que jugar al golf?

12

Para este desafío, debe crear un programa que tome un número entero xy genere su fuente xmuchas veces.

Reglas

  • Esto es codegolf, el objetivo es jugar golf en su programa para tener la menor cantidad de bytes

  • Si envía una función, la función debe tomar xcomo parámetro y devolver o imprimir la totalidad de su código xmuchas veces a STDOUT. El cuerpo de la función tampoco debe estar vacío.

  • Si envía una lambda, no es necesario que la asigne a una variable

  • Se aplican restricciones de escapatoria estándar .

  • Los programas vacíos están prohibidos.

  • Su programa solo tiene que funcionar cuando xes un entero entero mayor o igual a 0

  • Su programa tampoco puede leer directamente ninguna parte de su código fuente

Dignissimus - Spammy
fuente
Buena primera pregunta
Bald Bantha
¿Puede xser 0o podemos restringirlo a enteros positivos?
mbomb007
¿Está permitido leer la fuente de nuestra función?
Shaggy
@ mbomb007, hice una edición para aclarar las reglas, xtal vez cualquier entero entero mayor o igual a 0
Dignissimus - Spammy
@ Shaggy, pensé que era una escapatoria estándar, parece que no lo era. He hecho una edición de la pregunta para indicar claramente que un programa no puede leer ninguna parte de su código fuente
Dignissimus - Spammy

Respuestas:

8

Python 2 , 50 bytes

Tenga en cuenta la coma final y la nueva línea.

s='s=%r;print s%%s*input(),\n';print s%s*input(),

Pruébalo en línea!

totalmente humano
fuente
@ mbomb007 Suponga que hay una nueva línea al final del código. Problema resuelto.
MD XF
El OP dijo que x puede ser cero, en cuyo caso no se debe imprimir nada, por lo que esta respuesta es incorrecta.
mbomb007
@NickA No, imprime una nueva línea, lo cual está mal.
mbomb007
0 no parece imprimirme una nueva línea, como se prueba al usarlo sys.stdout.write("2")después.
Ørjan Johansen
5

Japt , 14 bytes

"iQ ²pU"iQ ²pU

Pruébalo en línea!

Explicación

"iQ ²pU"iQ ²pU
"iQ ²pU"       # Take this string
        iQ     # Prepend a quote
           ²   # Double the string (= source code)
            pU # Duplicate input times
Luke
fuente
4

RProgN 2 , 8 bytes

{`{.*¶}{

¡El RProgN2 Loop quine funciona particularmente bien para esto!

{     } # A function literal
       {# Without a matching }, this loops back to the second instruction, which essentially runs the function. This is a bug, but it works to make the "Looping Quine".
 `{.    # Append the literal {, stringifying the function.
    *   # Multiply the stringified function by the input.
     ¶  # Terminate the program.

Pruébalo en línea!

Un taco
fuente
4

Mathematica, 40 33 bytes

¡Gracias a lanlock4 por guardar 7 bytes!

StringRepeat[ToString[#0], #1] & 

Función pura que toma un argumento entero no negativo. ToString[#0]es la forma estándar de Mathematica de acceder a la definición de la función pura actual; StringRepeat[..., #1]concatena (entrada) copias de esa cadena juntas. Por ejemplo,

StringRepeat[ToString[#0], #1] & [2]

rendimientos:

StringRepeat[ToString[#0], #1] & StringRepeat[ToString[#0], #1] & 
Greg Martin
fuente
¿Podría publicar un ejemplo de uso? Correr, por ejemplo , StringJoin @@ Table[ToString[#0], #1] & [2]me da un error.
Julian Wolf
De Verdad? Esa llamada exacta funciona para mí. Estoy usando Mathematica 11 ....
Greg Martin
Hmm, todavía estoy usando 10 (v10.0.1.0), eso podría ser. Como referencia, aquí está el error que recibo:Table::itform: Argument 2 at position 2 does not have the correct form for an iterator.
Julian Wolf
Ajá: descubrí que Table[x,5]volverá {x,x,x,x,x}en Mathematica 10.2 y versiones posteriores, pero en Mathematica 10.1 da ese error (se espera Table[x,{5}]).
Greg Martin
Creo que puedes reemplazarlo StringJoin @@ Tablecon StringRepeat.
No es un árbol
3

dc , 31 bytes

[[1-rd91Pn93P[dx]Pdx]s.rd0<.]dx

Pruébalo en línea!

Explicación:

[[1-rd91Pn93P[dx]Pdx]s.rd0<.]dx
[     91Pn93P[dx]P          ]dx  # Same old regular quine
 [1-rd            dx]s.rd0<.     # Loop until the counter is zero
eush77
fuente
3

Python 2, 70 bytes

Esta solución funciona si x=0. Hay una nueva línea final.

s='s=%r;exec"print%%r;"%%(s%%s)*input()';exec"print%r;"%(s%s)*input()

Pruébalo en línea


Python 2, 60 bytes (inválido)

Esto supone eso x>=1, pero el OP aclaró que xpuede ser cero. Hay una nueva línea final.

s='s=%r;print(s%%s*input())[:-1]\n';print(s%s*input())[:-1]

Pruébalo en línea

mbomb007
fuente
2

Baja carga , 12 bytes

(a(:^)*~^):^

Pruébalo en línea!

Envío de funciones, porque Underload no tiene otra forma de tomar entrada. (El enlace TIO muestra el número 4 dado como entrada y agrega código para imprimir la salida resultante).

Esto es solo un constructor universal de quine (a(:^)*):^, más ~^("hacer una cantidad de copias igual al argumento").


fuente
1

Jalea , 10 bytes

“;⁾vṾẋɠ”vṾ

Pruébalo en línea!

Cómo funciona

“;⁾vṾẋɠ”vṾ  Main link. No arguments.

“;⁾vṾẋɠ”    Set the argument and the return value to the string ';⁾vṾẋɠ'.
         Ṿ  Uneval; yield '“;⁾vṾẋɠ”'.
        v   Eval ';⁾vṾẋɠ' with argument '“;⁾vṾẋɠ”'.
  ⁾vṾ           Yield 'vṾ'.
 ;              Concatenate '“;⁾vṾẋɠ”' and 'vṾ', yielding the source code.
      ɠ         Read an integer from STDIN.
     ẋ          Repeat the source code that many times.
Dennis
fuente
44
Esto se ve delicioso, pero mi mamá siempre me dijo que no me pusiera cosas extrañas en la boca.
Mateen Ulhaq
1

Marca GNU , 49 bytes

$(foreach ,$(shell seq $1),$(strip $(value $0))) 

Make unirá las copias por un solo espacio, así que tengo que incluir el carácter de espacio adicional al final y eliminarlo con un espacio stripintermedio para cumplir fielmente el requisito.

eush77
fuente
Parece que lee el código fuente, que está tanto por defecto como explícitamente prohibido.
Ørjan Johansen
@ ØrjanJohansen No, no lee la fuente, lee un valor variable. Es exactamente el mismo principio que en otras respuestas, por ejemplo, JS o Python.
eush77
@ ØrjanJohansen Oh, ya veo. $0en Make funciones no es lo mismo que en shells. Es el nombre de la variable a la que se llama la función. Ver gnu.org/savannah-checkouts/gnu/make/manual/html_node/…
eush77
Suspira una zona tan gris. Por cierto, los de Python no hacen esto.
Ørjan Johansen
@ ØrjanJohansen Diría que esta respuesta está mucho más cerca de Python que de JS. Todo lo que callestá haciendo es sustituir $0y $1con parámetros reales: es una simple interpolación de cadenas, al igual que Python %.
eush77
1

Pyth, 17 bytes

j*]jN*2]"j*]jN*2]

Pruébalo en línea!

Extensión trivial a la jN*2]"jN*2]quine bastante conocida , pero probablemente se pueda jugar golf

aplaudir
fuente
1

Betaload , 203 bytes

Nuevas líneas agregadas para mayor claridad:

(a(:^)*(!()):#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>(0)(!()){:^}(1)(){:^}(2)(:*){:^}(
3)(::**){:^}(4)(:*:*){:^}(5)(::*:**){:^}(6)(:*::**){:^}(7)(::*::***){:^}(8)(:*:*:*){:^}(9)(
::**::**){:^}R^^S):^

Me di la restricción de que debe leer desde STDIN en lugar de desde la parte superior de la pila como lo haría normalmente una respuesta de baja carga. También utilicé la entrada decimal correcta, que constituye la mayor parte del código.

Explicación:

Envuelvo el programa en un quine-wrapper: (a(:^)*y ):^. Esto significa que todo el código dentro del contenedor de quine tendrá el código fuente del programa en la parte inferior de la pila.

Para convertir dígitos en un número normal de la Iglesia, utilizo la técnica de reemplazar cada dígito con el código para multiplicar por 10 y agregar ese dígito:

0 -> (::*:**:*)*
1 -> (::*:**:*)*(:)~*(*)*
2 -> (::*:**:*)*(::)~*(**)*
3 -> (::*:**:*)*(:::)~*(***)*

Aquí hay mucha repetición, así que empaquételo en un subprograma que tomará un número de la Iglesia de la parte superior de la pila y úselo para construir la "cadena de dígitos":

:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*

Puse esto en un nuevo entorno para que se pueda acceder rápidamente:

#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>

Ahora puedo crear el código de reemplazo para R. Rusa los elementos superiores de la pila para formar una tabla de búsqueda para reemplazar una cadena de STDIN con código Betaload. Funciona así:

()
(0)(code for 0)
(1)(code for 1)
(2)(code for 2)
...
R

Sin embargo, podemos usar el subprograma que acabamos de hacer para generar los segmentos de código:

(0)(!()){:^}
(1)(){:^}
(2)(:*){:^}
(3)(::**){:^}
...

Cuando Rse ejecuta, transformará la entrada en una serie de subprogramas que construyen un número de Iglesia. Cuando se ejecuta este subprograma, crea ese número de Iglesia en el siguiente elemento de la pila (0, que se colocó anteriormente). Esto significa que, después R^, el valor superior en la pila será el número de la Iglesia. Luego, ^una vez más, aplicamos el número de la Iglesia al elemento final en la pila (el código fuente del programa) para obtener la respuesta.

Dato curioso: he tenido el MD para esta presentación durante varios meses. Lo guardé después de haber malinterpretado una pregunta (que parece que ya no puedo encontrar). Tuve que desenterrarlo de mi Papelera de reciclaje para publicarlo aquí.

Fruta Esolanging
fuente
1

Python 2 , 41 bytes

_="input('_=%r;exec _'%_*input())";exec _

Pruébalo en línea!

¿Tiene una salida un poco hacky usar inputen lugar de print, ya que printtiene un bicho raro que implica la impresión de una nueva línea cuando no se supone que ... . Sale con un error EOF.

Explicación:

_="input('_=%r;exec _'%_*input())"; # Set _ to a string
exec _                              # Execute that string
input(                        )     # "print"
      '_=%r;exec _'%_               # The source code with _ formatted in
                     *input()       # Actual input many times
Jo King
fuente
0

Pyth, 13 bytes

*jN*2]"*jN*2]

Banco de pruebas

El estándar Pyth quine más dos *para la repetición.

isaacg
fuente
0

Perl, 48 bytes

print"$_\47"x(2*pop)for'print"$_\47"x(2*pop)for'

\47es el escape octal para una comilla simple ( '). Se interpreta entre comillas dobles ( "), pero no entre comillas simples.

Mugriento
fuente
0

Javascript ES6, 27 37 bytes

_=>alert(`${f.name}=${f}`.repeat(_))

Editar

+10 bytes si f=también se debe mostrar


f=

_=>alert(`${f.name}=${f}`.repeat(_))

f(2);

Weedoze
fuente
@Downvoter ¿por qué?
Weedoze
@ Kaiido No lo sé ... ¿Debo conservar el f=?
Weedoze
Su código se lee a sí mismo al invocar implícitamente toStringla función.
aebabis
@acbabis Llamando f.toString()o fes lo mismo pero no mostrará el nombre de la función
Weedoze
Creo que lo que @acbabis quiso decir es que viola el último punto del desafío "Es posible que su programa tampoco lea directamente ninguna parte de su código fuente", de fesa manera se refiere a su propia fuente.
skyline3000
0

CJam , 20 12 bytes

8 bytes guardados gracias a Martin Ender

{"_~"+ri*}_~

Pruébalo en línea!

Explicacion

{       e# Begin a block literal:
 "_~"+  e#  Add whatever's on the stack to the beginning of the array ['_', '~'].
 ri*    e#  Repeat the resulting array a number of times equal to the input.
}       e# Close the block. Push it on the stack.
_~      e# Copy it and run it.
Gato de negocios
fuente
0

PHP, 194 bytes

<?php $a="PD9waHAgJGE9IiMiOyRpPSRhcmd2WzFdO3doaWxlKCRpLS0pZWNobyBzdHJfcmVwbGFjZShjaHIoMzUpLCRhLGJhc2U2NF9kZWNvZGUoJGEpKTs=";$i=$argv[1];while($i--)echo str_replace(chr(35),$a,base64_decode($a));

Pruébalo en línea!

No es nada golfístico, como suelen ser las b64 quines.

Skidsdev
fuente
0

Go , 257254 bytes

Esto me duele

package main;import(."fmt";."strings";."strconv";."os");func main(){s:="package main;import(.\"fmt\";.\"strings\";.\"strconv\";.\"os\");func main(){s:=%q;n,_:=Atoi(Args[1]);Print(Repeat(Sprintf(s,s),n))}";n,_:=Atoi(Args[1]);Print(Repeat(Sprintf(s,s),n))}

Pruébalo en línea!

totalmente humano
fuente
0

Microscript II, 22 bytes:

"v{lqp}sN*h"v{lqp}sN*h

Microscript II, 20 bytes (pero técnicamente inválido ya que accede al código fuente de un bloque de código):

{s""+`"~sN*"s`+}~sN*
SuperJedi224
fuente
0

C, 144 116 bytes

i;main(a){for(i=getchar()-48;i--;)printf(a="i;main(a){for(i=getchar()-48;i--;)printf(a=%c%s%c,34,a,34);}",34,a,34);}
MD XF
fuente
0

Python 3, 69 bytes

s='s=%r\nx=int(input())\nprint(s%%s*x)\n'
x=int(input())
print(s%s*x)
MrGeek
fuente
0

05AB1E , 17 bytes

0"D34çý×?"D34çý×?

La modificación de la forma predeterminada 0"D34çý"D34çý añadiendo ×?.

Pruébalo en línea.

Explicación:

0                   # Push 0 to the stack
                    #  STACK: [0]
 "D34çý×?"          # Push the string 'D34çý×?' to the stack
                    #  STACK: [0, 'D34çý×?']
          D         # Duplicate this string
                    #  STACK: [0, 'D34çý×?', 'D34çý×?']
           34ç      # Push '"' to the stack
                    #  STACK: [0, 'D34çý×?', 'D34çý×?', '"']
              ý     # Join the stack by this '"' delimiter
                    #  STACK: ['0"D34çý×?"D34çý×?']
               ×    # Repeat the string the (implicit) input amount of times
                    #  input = 2 → STACK: ['0"D34çý×?"D34çý×?0"D34çý×?"D34çý×?']
                ?   # Output to STDOUT without trailing newline
Kevin Cruijssen
fuente