Reto
Escriba el fragmento de código más corto posible de modo que, cuando N copias de él se concatenan juntas, el número de caracteres de salida es N 2 . N será un entero positivo.
Por ejemplo, si el fragmento era soln();
, entonces ejecutar soln();
imprimirá exactamente 1 carácter, y ejecutar soln();soln();
imprimirá exactamente 4 caracteres, y ejecutar soln();soln();soln();
imprimirá exactamente 9 caracteres, etc.
Cualquier carácter puede estar en la salida siempre que el número total de caracteres sea correcto. Para evitar la confusión entre sistemas operativos, las \r\n
nuevas líneas se cuentan como un carácter.
Los programas no pueden leer su propia fuente o leer el tamaño de su archivo o usar otras lagunas. Trate esto como un estricto desafío quine
La salida puede ir a stdout o un archivo o una alternativa similar. No hay entrada
Los comentarios en el código están bien, ya que está saliendo a mitad de la ejecución.
Cualquier personaje puede estar en el programa. La presentación más corta en bytes gana.
fuente
Respuestas:
TECO, 4 bytes
V
imprime el contenido de la línea actual en el búfer de texto.1\
inserta la representación de cadena del número 1 en la posición actual.Así que en el N º iteración del programa, la primera
V
es la salida N - 1 copias del personaje1
, a continuación, añadir otra1
al texto, entonces la salida N1
s.fuente
Brainfuck,
1716 bytesPuedes probarlo aquí . Solo usa el hecho de que .
n2+2n+1=(n+1)2
fuente
Brainfuck, 11
Vi la primera respuesta de Brainfuck y pensé que era demasiado tiempo :)
La salida puede ser más fácil de ver si reemplaza el plus con muchas más ventajas.
En la enésima iteración, cada bucle genera N - 1 copias del carácter con el valor ASCII 1, y luego una más con
+.
.fuente
Pitón 2, 22
Imprime la cadena vacía, luego dos
x
, luegox
'cuatro y así sucesivamente. Con la nueva línea después de cada cadena, esto sale a losn*n
caracteres.Una copia:
"\n"
(1 carácter)Dos copias:
"\nxx\n"
(4 caracteres)Tres copias:
"\nxx\nxxxx\n"
(9 caracteres)Para evitar que la variable inicial
a
se reinicie en cada ejecución, finalizo el código con un;a
, que es benigno por sí solo, pero combinado con el siguiente ciclo para crear el chivo expiatorioaa
que se asignará en su lugar. Este truco no es mío; Lo vi en una respuesta anterior. Agradecería si alguien me pudiera señalar para que yo pudiera dar crédito.fuente
,
afterprint a
debería funcionar.print a
imprime una nueva línea después de cada impresión.CJam, 6 bytes
Utiliza el hecho de que .
n2 + n + (n+1) = (n+1)2
fuente
:L..1+
Es la misma idea en GolfScript...n+
en GolfScript, pero esa molesta línea nueva ... :(:L
porque no se usa./// , 21 bytes
Estoy seguro de que hay una forma realmente corta y retorcida de resolver esto en /// pero todavía no pude encontrar nada, más allá de la forma "directa":
Esto se basa en el enfoque de imprimir números impares consecutivos. El fragmento consiste en un
1
al principio que se imprime, y dos reemplazos que agregan dos1
s más a esa primera parte de cada copia consecutiva del fragmento. Veamos esto porN = 3
. Lo siguiente debe leerse en grupos de 3 o más líneas: 1. el código actual, 2. los tokens procesados, 3. (y siguientes) un comentario sobre lo que hace el token anterior.Curiosamente, funciona igual de bien si movemos
1
al final:fuente
> <> , 14 bytes
Utiliza la idea de "suma de enteros impares consecutivos a partir de 1". Comienza con 1 y lo multiplica por 100 cada vez, aumentando la longitud de la salida progresivamente en incrementos de 2.
Por ejemplo, agregar 5 copias da
Probé canalizando la salida a un archivo, y no vi una nueva línea final.
Descompostura
fuente
CJam,
109 bytesEsto imprime N 2 espacios donde
N
es el número de copias del código.Código de expansión :
Pruébalo en línea aquí
fuente
Python 2, 20 bytes
fuente
Java - 91 bytes
Esta solución es equivalente a esta otra en Python. Seguramente no ganará, pero fue divertido :)
fuente
Perl, 14 bytes
Esto debe ejecutarse con el
-l
interruptor de comando de Perl , lo que haceprint
que se agreguen nuevas líneas.Imprime la variable predeterminada
$_
, luego antepone dos guiones bajos mediante sustitución.Ejemplo:
fuente
say
?-E
lugar.Brainfuck, 10 caracteres
Ambas soluciones anteriores de Brainfuck fueron muuuucho más largas (16 y 11 caracteres), así que aquí hay una más corta:
En el
n
bloque -th imprime2*n-1
caracteres (con puntos de código de2*n-1
a1
)fuente
Preludio ,
1812 bytesEsto imprime N 2 pestañas. Supone un intérprete compatible con el estándar que imprime caracteres en lugar de números, por lo que si se utiliza el intérprete de Python que tendrá que establecer
NUMERIC_OUTPUT
aFalse
.La idea es simplemente usar la parte superior de la pila (que inicialmente es 0) como
2(N-1)
, e imprimir2N-1
pestañas, luego incrementar la parte superior de la pila en 2. Por lo tanto, cada repetición imprime el siguiente número impar de pestañas.fuente
Java: 59/44 (según los requisitos)
Aparentemente se nos permite asumir que el código se ejecuta en una clase.
Si puede entrar dentro de un método principal:
fuente
C, 87 bytes
Esto usa dos macros mágicas.
__COUNTER__
es una macro que se expande a0
la primera vez que se usa,1
la segunda, etc. Es una extensión del compilador, pero está disponible en gcc, clang y Visual Studio al menos.__FILE__
es el nombre del archivo fuente. Incluir un archivo en C / C ++ es literalmente lo mismo que pegarlo directamente en su código fuente, por lo que fue un poco difícil de usar.Todavía sería posible utilizar esta técnica sin
__COUNTER__
. En ese caso, la protección estándar contra el uso del código dos veces podría usarse para la#if
declaración, y__LINE__
podría usarse para contar la cantidad de caracteres necesarios.fuente
Dyalog APL,
2019 bytesUna solución basada en matriz.
Probar aquí . Devuelve una cadena de repeticiones de . Explicación por explosión para :
N2
a
N = 2
fuente
STATA 20
Hay una nueva línea final para asegurarse de que la instrucción display (di) funciona. Primero muestre el número actual en $ a líneas nuevas (y uno adicional desde el valor predeterminado de visualización). Luego suma 2 a $ a.
Utiliza el enfoque de números pares (es decir, el enfoque de números impares menos 1) con una nueva línea adicional cada vez.
fuente
T-SQL 117
Tenga en cuenta el espacio final para asegurarse de que la condición if se verifica correctamente cada vez.
Utiliza el enfoque de números impares. No estoy seguro si hay una nueva línea en las declaraciones de selección.
No estoy seguro si hay una forma más corta de crear una tabla si no existe.
fuente
PostScript, 35 caracteres
Cada pase "filtra" una cosa en la pila, por lo que
count
sube 1 cada vez. Entonces simplemente usa el truco de la suma de números impares.La salida de bytes se
\000
debe a que ese es el valor inicial de las cadenas.fuente
Haskell, 72
Explicación
El operador de aplicación
$
actúa como si colocara paréntesis alrededor del resto de la línea (hay excepciones a esto, pero funciona en este caso).aputStr
es una función que toma una cadena con el formato "abc ...", donde "abc" es la raíz cuadrada de la longitud de la cadena, incluido abc. Analizará la cadena como un entero y devolverá una cadena que comience con abc + 1 y que tenga esa longitud al cuadrado. Debido al$
operador, esto se llamará recursivamente en "1" N veces.fuente
Pyth, 8 bytes
Esto se basa en el hecho de que N 2 es igual a la suma de
N
números impares. Ahora Pyth automática imprime una línea nueva, así que tengo que acaba de imprimirZ * 2
caracteres en cada código en la queZ
va de0
aN - 1
.Expansión de código :
Pruébalo en línea aquí
fuente
Golflua, 23 bytes
produce una combinación de
&
y\n
caracteres.Código Lua equivalente
Cada vez que se ejecuta el fragmento de código, produce 2 caracteres más de salida que la última vez, comenzando con 1 carácter. La
print
función agrega una nueva línea, por lo que inicializo X a 0 en lugar de 1.fuente
ActionScript: 27/26 bytes
o
Cómo funciona:
Simplemente comenta la primera línea. Nota:
trace
agrega una nueva línea. O tal vez todos los IDE que utilizo lo hacen automáticamente.fuente
GML, 27
fuente