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 Abcy su salida correspondiente es 4. Si escribo en su AbcAbclugar y lo ejecuto, la salida aún debe ser 4. Sin embargo, si lo escribo AbcAbcAbcy 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
1y3.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 bes 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
Ken 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.Pes 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.Oluego 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.
Peleva 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 , queOgenera 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:
Pempuja 1 ,)incrementa,<apunta la IP hacia el oeste,)incrementa nuevamente, yPahora 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 . CuandoPrealiza su magia nuevamente, esta vez calcula 3 1 = 3 .Osalidas 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) == 1en 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) == 3y 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ó
SELECTaPRINTlo 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-1Salida:1Segunda iteración:
SELECT 2-1*2+1Salida:1Tercera iteración:
SELECT 2-1*2+1*2+1Salida:3fuente
PRINTen lugar deSELECTahorrarí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) -> 1Doble:
1 + (1 % 2 == 0) -> 1Triple:
2 + (2 % 2 == 0) -> 3fuente
% 2en la triple explicación?2%_correcto?2 + (2 % 2 == 0) -> 2pero2 + !(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==90evalúa comoTrue. Los booleanos son subclases de enteros en Python, por lo quek>>Truees 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==90evalú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 sestdinredirige al archivo fuente. Básicamente, este código solo cuenta cuántas líneas existen debajo de la primera línea y genera salidas1si hay 1 o 3 líneas (es decir, el código es simple o doble), o3si hay 5 líneas (es decir, el código se triplica).fuente
sde 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
2s. Cada vez que agregamos una copia del programa,2se 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 = 1Doble evalúa a
2-1 = 1Triplicado evalúa a
3-0 = 3fuente
°U-v(más nueva línea) para ahorrar en el segundoU.ves perfecto para este desafío :-)Pure Bash (sin
wcu otras utilidades externas), 27fuente
EXITcon0Perl 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
gcomando 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
acomo 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
$PSCOMMANDPATHy realiza unaget-contenido en el archivo.Ifel recuento de caracteres de ese archivo es menor que99(verificado a travéswc -cde coreutils), luego generamos1yexit(es decir, detenemos la ejecución). Eso explica el código original y el código duplicado. De lo contrario, salimos3y salimos . El código real que está en las secciones duplicadas o triplicadas no tiene sentido, ya que lo haremosexitantes de llegar a él o está detrás de un comentario#.Guardado 6 bytes gracias a Mr. Xcoder
Guardado
34 bytes gracias a Pavelfuente
-lt99a99-gtpara 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'3wsecuencia presente en la esquina superior derecha, que reemplaza la1con una3en el 14 línea, justo antes de que la IP original lo ejecute, lo que hace que el programa triplicado salga en3lugar de1(los valores también podrían ser2y6,3y9,4y12,5y15debido a la disponibilidad dea-fconstantes numéricas;1y3fueron 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
$aprimera 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