Mucha gente sabe qué es una máquina de verdad en la programación. Pero es hora de poner las cosas a un nivel superior. ¡Presentamos la máquina de la verdad extendida! Una máquina de verdad extendida toma dos cosas como entrada, un entero n
y una cadena no vacía s
. Produce s
n
tiempos con espacios en blanco finales opcionales. Sin embargo, si n
es igual a 0
, debe salir s
hasta que el programa se detenga manualmente, es decir, nunca debe terminar.
Además, si n
es un número negativo, entonces la cadena debe invertirse. Por ejemplo con s=hello
y n=-1
, la salida sería olleh
.
Métodos estándar de entrada, cualquier tipo de salida, siempre que pueda manejar infinito. Si tiene una respuesta que no maneja infinito, siéntase libre de publicarla si es interesante o en un idioma que no puede manejar la salida infinita.
Casos de prueba
n, s, output
5, "hello world", "hello worldhello worldhello worldhello worldhello world"
0, "PPCG", "PPCGPPCGPPCGPPCG..."
-2, "truThY", "YhTurtYhTurt"
2000, "o", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"
Este es el código de golf , ¡el código más corto gana!
Aquí está la publicación original de Sandbox. Se le han hecho modificaciones. Gracias a @ComradeSparklePony por crear la idea de este desafío.
fuente
-n
lugar deabs n
.PHP> = 7.1, 67 bytes
Versión con en
list(,$x,$y)
lugar de ¡[,$x,$y]
Pruébelo en línea!fuente
MATL , 37 bytes
Pruébalo en línea!
Explicación:
fuente
Python 3, 71 bytes
Pruébalo en línea!
La variable
k
garantiza que el bucle siempre se ejecuta al menos una vez. Esto significa que sin=0
,n
será negativo en la próxima iteración del ciclo, por lo que el ciclo continuará ejecutándose para siempre.fuente
Matlab, 87 bytes
¡Mi primer intento de code-golf! Cualquier sugerencia para jugar al golf es bienvenida.
fuente
05AB1E ,
171614 bytesPruébalo en línea!
Explicación:
Guardado 2 bytes gracias a @EriktheOutgolfer
fuente
'-å
con0‹
y0Q
con_
.Cubix , 41
Cuarenta y cuatro45bytesToma entrada como
<N> <String>
Pruébalo en línea!
Cubified:
Míralo correr
Todavía hay una cantidad de no-ops en el código de las que podría obtener algunos bytes más, pero quería obtener esto antes de romperlo.
El procedimiento básico es
I
obtener contador de entradaA
tomar el resto de la entrada como caracteres;p?
eliminar el espacio, subir el número y probarlopsuqB$)
Si el contador es negativo, invierta la pila. Esto implica manejar el número de entrada y el marcador EOI (-1). Incrementa el contador.;p;ouqu
Si el contador es cero, quite el contador y el marcador EOI e inicie el ciclo de salida perpetua.(
si disminuye positivamente el contador<<q?/o()u
El bucle de salida. Esto generará cada carácter de la pila hasta que se alcance el marcador EOI (-1).... _ ... ?wq!
en el marcador EOI final, rodee el cubo y reflexione de nuevo sobre el?
, cambie de carril, suelte el marcador EOI en la parte inferior y pruebe el contador.@
si es cero, deténgase?u(
si el cambio de sentido es positivo y disminuye, el golpe termina al principio del ciclo? ... <)
si es negativo, rodee el cubo hacia el otro lado, redirija al comienzo del ciclo mientras pasa sobre un incremento./)<
si el incremento negativo y continuar al bucle de salidafuente
JavaScript (ES6), 79 bytes
Retazo:
fuente
!n&&
en hacer un bucle infinito. Sin embargo, ¿esto finalmente llegará a un StackOverflow?it should never terminate.
JavaScript (ES6),
98949183 bytes-4, -5 bytes gracias a Arjun
-3 bytes gracias a Rick Hitchcock
Comenzó diferente a la respuesta de Java , pero rápidamente se volvió muy similar después del golf. La alerta es infinita, pero si quieres que se vea bien, cambia a
console.log
.l=alert;
y escribiralert
son de la misma longitud, pero si cambia aconsole.log
más corto para redefinirlo.fuente
while(!n)l(s)
en lugar deif(!n)for(;;)l(s)
.[...s].reverse()
en lugar des.split''.reverse()
l(s.repeat(Math.abs(n)))
en lugar defor
bucle por fin.QBIC , 36 bytes
Hay mucho aquí, y QBIC / QBasic simplemente no tiene la sintaxis para lidiar con tales condiciones con elegancia.
Explicación:
fuente
Java (OpenJDK 8) , 137 bytes
Pruébalo en línea!
fuente
str , 30 bytes
Pruébalo en línea!
Explicación
fuente
C (gcc) ,
115112109107104 bytesPruébalo en línea!
C (gcc) , 115 bytes (134 con
#include<string.h>
delante)Pruébalo en línea!
fuente
Retina , 49 bytes
Formato de entrada: toma la cadena, seguida de una nueva línea, seguida del número.
Pruébalo en línea!
Explicación:
El
/¶-/&
corre esta línea sólo si el número es negativo.V
es la etapa inversa, y se invierte^.+
, que coincide con la cadena (.
coincide con todos los caracteres excepto las nuevas líneas)El
/¶0/&
corre esta línea sólo si el número es 0.//+>
comienza un bucle infinito, que imprime la cadena de trabajo después de cada iteración.G0
toma la cadena y descarta el número; lo hace infinitamente, imprimiendo siempre.Esto marca el código que generará una cadena; el programa evalúa la cadena como código Retina después.
(.+)¶-*(\d+)
coincide con la cadena completa y coloca la cadena en el grupo de captura 1 y el número en el grupo de captura 2..-$2+>K
`$1
genera el código Retina que se ejecutará:.
desactiva la salida implícita (de lo contrario, la cadena se imprimiría n + 1 veces),-$2+
establece un ciclo de repetición que se repite {capturando el grupo 2} veces. El menos al principio convierte el número en un número negativo, ya que esto deshabilita la funcionalidad de convergencia en el bucle, lo que lo detendría después de la primera iteración.>
establece este ciclo para imprimir después de cada iteración. El resto del código es solo para imprimir la cadena.fuente
Perl 6 , 44 bytes
Pruébalo en línea!
Bloque de código anónimo que toma un número y una cadena y devuelve una lista (posiblemente infinita)
fuente