Su tarea, si desea aceptarlo, es escribir un programa que genere un número entero positivo (mayor que 0). Si el código fuente está duplicado, la salida debe permanecer igual. La parte difícil es que si el código fuente se escribe tres veces (¿triplicado?) La salida se multiplicará por 3.
Reglas
Debes construir un programa completo . Es decir, su salida debe imprimirse en STDOUT.
La fuente inicial debe tener al menos 1 byte de longitud.
Ambos enteros deben estar en la base 10 (está prohibido emitirlos en cualquier otra base o con notación científica).
Su programa no debe tomar entrada (o tener una entrada vacía no utilizada).
La salida de los enteros con espacios finales / iniciales está permitida.
Los ceros a la izquierda solo se permiten si el número de dígitos es consistente, por ejemplo: 001 - 001 - 003 o 004 - 004 - 012
No puede asumir una nueva línea entre copias de su fuente.
Este es el código de golf , por lo que gana el código más corto (original) en cada idioma .
Se aplican las lagunas predeterminadas .
Ejemplo
Digamos que su código fuente es Abc
y su salida correspondiente es 4
. Si escribo en su AbcAbc
lugar y lo ejecuto, la salida aún debe ser 4
. Sin embargo, si lo escribo AbcAbcAbc
y lo ejecuto, la salida debe ser 12
.
Robado descaradamente Derivado del desafío del Sr. Xcoder
fuente
int i=1;print i;
), entonces el código duplicado de (int i=1;print i;int i=1;print i;
) debe generar el mismo número que el código original, y cuando el código se triplica a (int i=1;print i;int i=1;print i;int i=1;print i;
) debe mostrar el número multiplicado por 3Respuestas:
Wumpus , 6 bytes
Pruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Impresiones
1
y3
.Explicación
Encontré una tonelada de soluciones de 6 bytes por búsqueda de fuerza bruta, pero ninguna de 5 bytes. Eso no significa necesariamente que no haya ninguno en 5 bytes, pero probablemente usarían caracteres extraños o algo así.
Terminé eligiendo esta solución porque no imprime ceros a la izquierda (la mayoría lo hace) y tiene un flujo de control interesante. Comencemos con el programa único:
Entonces el código ejecutado es:
Suficientemente fácil. Ahora el programa duplicado. Como la primera línea se agrega a la segunda línea, la cuadrícula se extiende hasta el ancho 5 (y la altura 3), lo que cambia significativamente el flujo de control:
La IP recorre ese ciclo exactamente una vez, por lo que el código ejecutado es:
Finalmente, el programa triplicado es bastante similar al duplicado, pero obtenemos un par de comandos más importantes en esa tercera línea:
Entonces el código ejecutado es:
fuente
Casco , 5 bytes
Pruébalo en línea!
Repetido dos veces!
Repetido tres veces!
Explicación
Es bastante difícil construir un programa repetible en Husk. Debido a que el sistema de tipos prohíbe una función que se puede aplicar a sí misma, tengo que permitir de alguna manera que la primera parte evalúe una función, y el resto evalúe un valor, y los tipos de incorporados existentes están diseñados para evitar esto. tipo de ambigüedad Los tokens del programa son
K
, que construye una función constante.K a b
es equivalente aa
.Σ
, Que toma un número entero n y devuelve el n ésimo número triangular.+
, que suma dos números.1
, que es el literal 1.El programa original se interpreta así:
La
(K+)
es una función sin sentido que se come por el primeroK
.El programa repetido dos veces se interpreta así:
La función entre paréntesis vuelve a ser utilizada por el primero
K
.El programa repetido tres veces se interpreta así:
fuente
K
en un programa, la inferencia de tipos se vuelve muy lenta, porque cada una de ellas podría potencialmente "comer" cualquier cantidad de fichas y el intérprete probará todas las combinaciones ...Jalea ,
75 bytesPruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Cómo funciona
fuente
Haskell , 24 bytes
Impresiones
1
: ¡ Pruébelo en línea!También imprime
1
: ¡ Pruébelo en línea!Impresiones
3
: ¡ Pruébelo en línea!fuente
Cubix , 5 bytes
Pruébelo en línea: una vez , dos veces , tres veces .
Explicación
Cubix es un lenguaje basado en pila cuyas instrucciones están envueltas alrededor del exterior de un cubo. Es importante tener en cuenta que la pila se llena inicialmente con ceros infinitos, lo que nos permite "extraer valores de la nada" con los operadores en lugar de empujarlos explícitamente.
Debo admitir que esto fue encontrado por un brujo forzador; Nunca lo habría encontrado por mi cuenta. De hecho, @MartinEnder fue quien me pidió que intentara forzar la fuerza bruta, ya que había estado buscando esta solución sin suerte. Esta es la única solución que encontró el brute-forcer, y creo que es la única solución más corta en Cubix.
Programa único
¡Míralo correr!
El programa original se ajusta a un cubo unitario. Aquí está la red desplegada:
El IP (puntero de instrucción) comienza en la cara más a la izquierda (el
<
) hacia el este. El<
apunta inmediatamente al oeste, y se envuelve alrededor de laP
.P
es la exponenciación, y como no hay nada en la pila, el intérprete saca dos 0 sy calcula 0 0 , que es 1 según JavaScript.O
luego imprime este valor y@
finaliza el programa.Programa doble
¡Míralo correr!
El programa de 10 bytes es demasiado largo para caber en un cubo unitario, por lo que se expande a un cubo de tamaño 2:
Como antes, la IP comienza en la parte superior izquierda de la cara más a la izquierda. Esta vez, la primera instrucción es
P
, que empuja un 1 como antes. El siguiente es)
, que incrementa el elemento superior, convirtiéndolo en un 2 . Luego<
da vuelta la IP, y golpea)
nuevamente, transformando el 2 en un 3 .Aquí es donde se pone interesante.
P
eleva el segundo elemento desde la parte superior a la potencia del primer elemento, lo que da 0 3 = 0 . Luego, la IP se ajusta a la cara más a la derecha y pasa por dos no-ops.
antes de golpear a otraP
. Aquí vemos otra peculiaridad de Cubix: los operadores binarios (comoP
) no eliminan sus operandos de la pila. Entonces, dado que la pila es ahora[3, 0]
, calculamos 3 0 = 1 , queO
genera y@
finaliza el programa.Programa triple
¡Míralo correr!
Al igual que con el programa doble, el triple puede caber en un cubo de tamaño 2:
Este programa comienza de la misma manera que el anterior:
P
empuja 1 ,)
incrementa,<
apunta la IP hacia el oeste,)
incrementa nuevamente, yP
ahora empuja 0 . Luego, la IP se envuelve<
en la cara más a la derecha, lo que no hace nada ya que la IP ya está apuntando hacia el oeste.Aquí está la única diferencia del programa doble:
)
incrementa el 0 en la parte superior de la pila a un 1 . CuandoP
realiza su magia nuevamente, esta vez calcula 3 1 = 3 .O
salidas y@
termina, y demostramos de manera concluyente que la tercera vez es realmente el encanto.fuente
Brain-Flak , 10 bytes
Pruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Explicación:
Cuando ejecutamos esto una vez, se colocará
(0 + 0 + 1) == 1
en la pila alternativa. Corrió por segunda vez, pone lo mismo en la pila principal. Sin embargo, si se ejecuta por tercera vez, se evalúa(1 + 1 + 1) == 3
y lo empuja a la pila alternativa e imprime implícitamente.fuente
SQL,
252423 bytes( -1 Byte Se eliminó un carácter mal escrito que siempre se comentaba y no hacía nada )
( -1 Byte se cambió
SELECT
aPRINT
lo recomendado por Razvan Socol )Cómo funciona:
en SQL, puede comentar las etiquetas de comentarios, así:
vs
Código en 1 línea con comentarios excluidos:
Primera iteración:
SELECT 2-1
Salida:1
Segunda iteración:
SELECT 2-1*2+1
Salida:1
Tercera iteración:
SELECT 2-1*2+1*2+1
Salida:3
fuente
PRINT
en lugar deSELECT
ahorraría un byte extra.SOGL V0.12 ,
754 bytesPruébalo aquí!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Explicación:
fuente
ē1|
ē:2\+
: /05AB1E ,
65 bytesPruébalo en línea! o Pruébalo doblado! o Pruébalo triplicado!
Explicación
Individual:
0 + (0 % 2 == 0) -> 1
Doble:
1 + (1 % 2 == 0) -> 1
Triple:
2 + (2 % 2 == 0) -> 3
fuente
% 2
en la triple explicación?2%_
correcto?2 + (2 % 2 == 0) -> 2
pero2 + !(2 % 2 == 0) -> 3
(para su explicación).2%_
es lo mismo queÈ
sí. No estoy seguro de lo que quieres decir con la explicación.2+(2%2==0) = 2+(0==0) = 2+1 = 3
. Probablemente hubiera sido más claro si hubiera explicado los cálculos.> <> , 9 bytes
Pruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Encontré este tipo de suerte, usando la filosofía de que "si haces que el camino del pez sea lo suficientemente complicado, eventualmente algo funcionará". Las versiones original y duplicada imprimen un 5, y la versión triplicada imprime 1 y luego 5 para hacer 15 = 3 × 5. Aquí están las versiones multiplicadas, para su lectura:
fuente
Python 2 ,
46 4539 bytesInspirado por la respuesta de Halvard . Me alegra que mi desafío haya inspirado uno nuevo, que encuentro aún más interesante. Guardado 6 bytes gracias a Kevin Cruijssen .
Pruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Cómo funciona (anticuado)
Cuando se duplica, la longitud se convierte en 90 , pero el nuevo código se ignora gracias a
#
, por lo que sek==90
evalúa comoTrue
. Los booleanos son subclases de enteros en Python, por lo quek>>True
es equivalente ak>>1
, que es esencialmente k / 2 = 45 . Cuando se triplica, el nuevo código se ignora nuevamente, por lo tanto, la nueva longitud es 135 , que no se desplaza porque sek==90
evalúa aFalse
, entoncesk>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k
, y k se imprime tal cual.Python 2 , 36 bytes
Esta fue una sugerencia de Aidan F. Pierce a 38 bytes, y la jugué por 2 bytes. No estoy publicando esto como mi solución principal porque no se me ocurrió.
Pruébalo en línea! ¡Pruébalo doblado! ¡Pruébalo triplicado!
fuente
print open(__file__,"a").tell()/79*3|1#
¿quizás?R ,
373128 bytesGracias a Giuseppe por jugar golf en los últimos 3 bytes.
(con una nueva línea al final).
¡Pruébalo una vez!
¡Pruébalo dos veces!
¡Pruébalo tres veces!
Esto utiliza el
readLines()
truco de la respuesta de Giuseppe al desafío de 8 bolas , donde sestdin
redirige al archivo fuente. Básicamente, este código solo cuenta cuántas líneas existen debajo de la primera línea y genera salidas1
si hay 1 o 3 líneas (es decir, el código es simple o doble), o3
si hay 5 líneas (es decir, el código se triplica).fuente
s
de esto para que esto funcione correctamente, PERO debería poder jugar golf a 28 bytes volviendo a trabajar algunos de los cálculos.%/%2
, debería funcionarPerdido , 38 bytes
Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
Explicación
Lost es un lenguaje muy interesante para este desafío. La técnica habitual de Lost es construir una "trampa". Una trampa es una sección del programa diseñada para atrapar todos los ips en un solo lugar para que sus pilas se puedan despejar y se pueda controlar para ir en una dirección específica. Esto hace que los programas de escritura en Lost sean mucho más manejables. Sin embargo, dado que el programa está duplicado, también debemos evitar la duplicación de trampas. Esto requiere que diseñemos una nueva trampa que funcione correctamente, pero cuando se duplica solo una de las trampas funciona. Mi idea básica aquí es la siguiente
Mientras la pila no esté vacía
?
, eliminará un elemento y hará que vuelva al principio si ese elemento no es cero. La clave aquí es que cuando esto se acumula la^^
línea sLo que significa que no importa cómo ingrese, siempre saldrá en el mismo lugar.
Desde aquí podemos intentar implementar la misma idea de mi respuesta de Klein .
La columna vertebral de nuestro programa es el lado izquierdo que empuja varios
2
s. Cada vez que agregamos una copia del programa,2
se agrega otra a la columna vertebral del programa, lo que significa que se agregan 2 adicionales a la pila. Una vez que sale del fondo, rebota\\>
y ejecuta el códigoEsto elimina los primeros 2 elementos de la pila, agrega uno a lo que queda y sale. Una vez que nuestra columna vertebral tenga 3 2s, agregaremos 1 y obtendremos 3; si tenemos menos de 3 elementos, descartaremos toda la pila y devolveremos 1.
Ahora el único problema que queda es que
!
en nuestro programa puede causar un bucle infinito. Si la ip comienza a!
subir, saltará y aterrizará de nuevo donde estaba. Esto significa que tenemos que agregar otra línea debajo para evitar el bucle.Esto tiene el ligero problema de poner algunas barras entre nuestros
^
s en la trampa. Sin embargo, bastante milagrosamente, todo funciona. Nuestros ips rebotan adecuadamente para que no haga la diferencia.fuente
Stax , 5 bytes
Ejecutar y depurar en línea! · Doblado · Triplicado
Explicación
fuente
C (gcc) ,
959185 bytesPruébalo en línea!
fuente
Japt ,
865 bytes-1 byte gracias a @ETHproductions
Explicación:
Esto evalúa a
1-0 = 1
Doble evalúa a
2-1 = 1
Triplicado evalúa a
3-0 = 3
fuente
°U-v
(más nueva línea) para ahorrar en el segundoU
.v
es perfecto para este desafío :-)Pure Bash (sin
wc
u otras utilidades externas), 27fuente
EXIT
con0
Perl 5 ,
1815131211 bytes-3 bytes gracias a nwellnhof
Una vez Pruébelo en línea!
Dos veces Pruébelo en línea!
Tres veces Pruébelo en línea!
fuente
n;$_=$a++|1;say
(15 bytes)> <> ,
10 98 bytesPruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Estoy seguro de que hay una solución de 8 bytes en algún lugar.Lo no imprimible al final tiene el valor ASCII 1, y solo se obtiene con el
g
comando et en la tercera iteración. Para los dos primeros imprime05
, y luego imprime15
.fuente
C (gcc) , 107 bytes
Mi primera presentación en C (gcc). Demasiado tiempo ...
Enlaces TIO: simple , doble , triple .
fuente
Laberinto ,
12119 bytesTIO (1x) , TIO (2x) , TIO (3x)
fuente
JavaScript,
81 77 7470 bytesGuardado 4 bytes gracias a Shaggy
Bastante patética solución JS. Consume los valores de la
[3,1,1]
matriz desde la derecha (pop()
). Registra un tiempo de espera para mostrar el valor actual en el futuro. Si ya se registró un tiempo de espera, cancélelo. Se basa en la naturaleza sucia devar
, que levanta declaraciones variables.Dos veces:
Mostrar fragmento de código
Tres veces:
Mostrar fragmento de código
fuente
a
como el tercer argumento desetTimeout
:setTimeout(alert,9,a)
C (gcc) ,
5352 bytesTenga en cuenta el espacio después
#endif
.Pruébalo en línea!
fuente
Carbón de leña , 12 bytes
Pruébalo en línea! El enlace es a código detallado.
¡Pruébalo doblado!
¡Pruébalo triplicado!
Explicación
fuente
MapAssignRight(Plus, 1, i)
le ahorra un byte, que lo lleva a la misma longitud que un puerto de mi respuesta a @Mr. El desafío de XCoder:PI∨›³L⊞Oυω³
PI⊕⊗÷L⊞Oυω³
es otra versión de mi respuesta, pero aún tiene 11 bytes ...MapAssign(Incremented, i)
JavaScript,
4340 bytes2x:
Mostrar fragmento de código
3x:
Mostrar fragmento de código
fuente
PowerShell ,
54484544 bytesPruébalo en línea!
¡Pruébalo doblado!
¡Pruébalo triplicado!
Obtiene su propio camino con la invocación
$PSCOMMANDPATH
y realiza unag
et-c
ontenido en el archivo.If
el recuento de caracteres de ese archivo es menor que99
(verificado a travéswc -c
de coreutils), luego generamos1
yexit
(es decir, detenemos la ejecución). Eso explica el código original y el código duplicado. De lo contrario, salimos3
y salimos . El código real que está en las secciones duplicadas o triplicadas no tiene sentido, ya que lo haremosexit
antes de llegar a él o está detrás de un comentario#
.Guardado 6 bytes gracias a Mr. Xcoder
Guardado
34 bytes gracias a Pavelfuente
-lt99
a99-gt
para que el casting funcione correctamente, pero eso es un byte más corto. ¡Gracias!C # (178 bytes)
solución loca de C #, pero estoy feliz de que sea posible en una línea en C #. :)
Para mí, la parte más difícil fue tener un C # válido que inicializara o incrementara la misma variable, así que terminé abusando del ConfigurationManager porque necesitaba un NameValueCollection global estático y ConfigurationManager era el único que podía pensar que podía actualizar en la memoria. EnvironmentVariables fue otra opción que busqué pero no tiene un indexador, por lo que no estoy seguro de cómo hacerlo en una línea que se pueda copiar y pegar para producir el resultado requerido según las especificaciones.
fuente
Encantamientos rúnicos , 35 bytes
Pruébalo en línea!
Trabajar en este me permitió encontrar un error en mi analizador relacionado con los nuevos caracteres modificadores de retraso, aunque el resultado final no se ve afectado por él, ya que terminé sin necesitarlos.
Funciones debido al hecho de que la línea final no tiene una nueva línea final (o, para el caso, espacios finales), lo que permite que las IP duplicadas se generen en un lugar diferente. El de arriba a la izquierda termina haciendo un gran bucle alrededor de la cuadrícula, mientras que el segundo IP realiza una operación de reflexión para reemplazar el
\
en la sexta línea con a. Esta IP se repetirá para siempre y no hará nada.
La tercera IP también hace este mismo reemplazo al mismo tiempo, pero debido a que está situada en la línea 13 , su copia de ese reflector lo envía hacia arriba y ejecuta la
1f'3w
secuencia presente en la esquina superior derecha, que reemplaza la1
con una3
en el 14 línea, justo antes de que la IP original lo ejecute, lo que hace que el programa triplicado salga en3
lugar de1
(los valores también podrían ser2
y6
,3
y9
,4
y12
,5
y15
debido a la disponibilidad dea-f
constantes numéricas;1
y3
fueron elegidos arbitrariamente). Luego se deja en un bucle sin fin realizando más comandos de reflexión que no hacen nada.¡Pruébalo por triplicado!
fuente
Perl 5,
2825 bytes-3 bytes gracias a @neil!
Mueve el cursor hacia atrás (no hace nada al inicio de la línea) e imprime el valor de la
$a
primera y la tercera vez (es decir, la tercera vez que se imprime un 1, el cursor se mueve y se imprime un 3 en la posición del 1).fuente
print"\e[D$a"if(++$a!=2);
¿quizás?QBasic, 19 bytes
La fuente debe incluir una nueva línea final.
Explicación
Queremos salida
1
,1
,3
. Observe que estos números son uno menos que las potencias de 2. Entonces:fuente