EDITAR
Parece que ha habido cierta confusión después de mi error tipográfico en la publicación original que usaba una o minúscula para definir el plano y luego una mayúscula. Lamentablemente, este error no se detectó en el Sandbox. Dado que muchos miembros han escrito respuestas con ambos y dado que el error tipográfico fue mi culpa, permitiré o mayúsculas o minúsculas en la definición del plano. He agregado una nueva regla para esto.
Fondo
Me gustan las animaciones de arte ascii, ya que tiendo a llamarlas, así que aquí hay otra. No creo que esto sea demasiado difícil de implementar, por lo que espero obtener algunas respuestas cortas e interesantes.
A todos los miembros de la comunidad.
Si mejora su respuesta, modifique su recuento de bytes como
recuento de bytes antiguos recuento de bytes nuevos
para que podamos ver tu progreso. ¡Gracias!
Reto
Aquí hay un avión ascii
--O--
Aquí hay una pista ascii
____| |____
El avión comienza en 5 líneas nuevas sobre la pista. Para evitar enfrentamientos entre los sistemas métrico e imperial y hacer de este un verdadero desafío internacional, no mencionaré metros ni pies. Ejemplo:
--O--
____| |____
El avión debe aterrizar exactamente en el medio de la pista como se muestra a continuación:
____|--O--|____
Entrada
La posición horizontal inicial del plano está definida por una entrada entera que se usa para hacer referencia a la punta del ala izquierda, es decir, está entre 0 y 10 inclusive.
Salida
Se debe mostrar cada etapa del vuelo del avión. Ejemplo a continuación (input = 10):
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
____|--O--|____
Para mantener las cosas simples, estamos ignorando las leyes de la perspectiva. La pista permanece del mismo tamaño a medida que te acercas.
Reglas
- Actualización El centro del plano puede ser mayúscula o minúscula, pero el que se elija debe ser coherente en todo el código. Si su idioma no es compatible con los caracteres anteriores, siéntase libre de usar caracteres alternativos solo ascii.
- El avión desciende 1 línea por cuadro.
- El avión solo puede moverse 1 espacio hacia la izquierda o hacia la derecha cada vez que desciende una línea. No tiene que moverse en cada línea de descenso. Mientras termine en la pista, depende de usted cuando se mueve hacia la derecha o hacia la izquierda. Eres el piloto!
- No se requiere manejo de errores. Puede suponer que la entrada siempre será un número entero válido de 0-10 inclusive.
- La salida debe constar solo de los caracteres que se muestran arriba (si su idioma no los admite, consulte la primera regla editada) y debe tener el mismo tamaño, es decir, debe comenzar con 6 líneas de alto por 15 caracteres de ancho. La altura puede disminuir a medida que avanza como en el ejemplo anterior.
- El programa o la función está bien, pero debe producir una salida como se muestra arriba.
- Los espacios iniciales / finales / nuevas líneas están bien para mí.
- Si lo desea, puede borrar la pantalla entre fotogramas de salida. Esto no es un requisito.
- Las lagunas estándar están prohibidas como de costumbre (aunque no creo que haya muchas que ayuden con este tipo de desafío).
- Este es el código de golf, por lo que la respuesta más corta es obviamente la ganadora y probablemente obtendrá la mayoría de los votos, pero no necesariamente se aceptará como la mejor respuesta si surge una solución realmente interesante en un lenguaje inesperado, incluso si es más larga. Siéntase libre de publicar cualquier cosa que cumpla con las reglas siempre que funcione.
Implementación de referencia sin golf en Python 2 disponible en ¡ Pruébelo en línea! para que pueda ver cómo se ven los diferentes valores de entrada.
Respuestas:
TI-BASIC, 61 bytes
fuente
TI-BASIC, 62 bytes
Tenga en cuenta que TI-BASIC no admite _ o | y por lo tanto lo reemplacé con una I mayúscula y Esto no debería afectar el recuento de bytes.
fuente
Python 2, 107 bytes
Pruébalo en línea
Simplemente codifica la última línea para el avión de aterrizaje. Es probable que se pueda jugar al golf reutilizando piezas de antes o integrándolo en el circuito.
fuente
Perl, 94 bytes
93 bytes de código +
-p
bandera.Pruébalo en línea!
fuente
}{
(y el$"
desorden con el resaltado de sintaxis).JavaScript (ES6), 108 bytes
Pruébalo
Mostrar fragmento de código
Uso
Simplemente llame
f
con el índice del avión.Salida
fuente
Scala,
224bytesEDITAR : ¡No tenía idea de que podría hacer
"string"*n
para repetirlo n veces! Scala sigue impresionándome. Perder el enif(t>0)
lugar deif(t==0)
fue un error de novato. Gracias por los consejos, Suma !Observaciones originales:
Pensé que una solución recursiva sería divertida de probar. Soy relativamente nuevo en Scala, así que estoy seguro de que esto está lejos de ser óptimo.
fuente
:Unit=
. Omitir el signo igual establecerá el tipo de retorno en Unidad.o
en la primera línea? Y comoi
siempre es> = 0, puede cambiari!=0&&i==t
ai>0&i==t
(tercera línea).Lote, 230 bytes.
x
es el número de espacios para eliminar desde el comienzo de la cadenas
, por lo que resta el parámetro de 10. La última línea es la más cercana que tiene Batchx-=sgn(x-5)
.fuente
sed, 181 bytes + 2 para
-nr
banderasSin golf
Uso:
$ echo 2 | sed -nrf flightsim.sed
fuente
Retina ,
8683 bytesPruébalo en línea!
Probablemente haya algún tipo de compresión que podría haber usado en la pista y el espacio vacío sobre ella, pero todo lo que probé resultó más costoso que el texto sin formato (en Retina ¶ es una nueva línea, por lo que puede ver el estado inicial en texto sin formato en el segunda linea).
fuente
Scala ,
177, 163, 159137bytesBasado en otra respuesta , con reducciones significativas.
fuente
Perl 6 ,
979081 bytesAl contrario de lo que parece, genera la versión * en minúsculas del plano (
--o--
), según lo permitido por la descripción de la tarea actualizada.Pruébalo en línea!
Cómo funciona
Operadores de cadenas bit a bit FTW!
Funciona porque los operadores de cadena bit a bit usan los valores de punto de código de los caracteres en una posición dada en dos cadenas, para calcular un nuevo carácter en esa posición en la cadena de salida.
En este caso:
Para un
O
plano en mayúscula , podríamos haber usado~^
(string XOR bitwise), con una máscara de plano de\r\ro\r\r
(+4 bytes para barras invertidas):La fórmula para el desplazamiento del avión
h + v*(17 - h/5)
, se simplificó de:fuente
Python 2 , 160 bytes
Pruébalo en línea!
Aquí está la implementación de referencia que se redujo a 160 desde 384. Creo que todavía queda mucho camino por recorrer. Recién publicado por diversión y para alentar una mejor respuesta de Python.
fuente
while-~x
?i
comoi+=(i<5)-(i>5)
Befunge-93,
136130 bytesPruébalo en línea!
Explicación
fuente
Ruby, 94 bytes
Imprime la posición del avión seguido de nuevas líneas y luego el aeropuerto. Luego mueve el plano en 1, -1 o 0, dependiendo de su posición con respecto a 5.
Después de recorrer las 5 veces anteriores, imprime el avión en el aeropuerto.
fuente
8º ,
177172 bytesLa palabra
f
espera un número entero entre 0 y 10.Uso
Explicación
fuente
Mathematica, 111 bytes
Función anónima. Toma un número como entrada y devuelve una cadena como salida. Probablemente podría jugar más golf.
fuente
QBIC ,
939184 bytesSe eliminaron algunos bytes al reemplazar la declaración de X $; optimizado el bucle FOR que imprime la distancia sobre el suelo. La explicación a continuación es para la versión anterior, pero básicamente funciona igual.
Para las pruebas (y la estética) tenía una versión ligeramente diferente, de 103 bytes:
Estos son funcionalmente idénticos. El segundo tiene la adición de que la pantalla se borra entre fotogramas y que se detiene durante 0,5 segundos entre fotogramas.
Salida de muestra
Tenga en cuenta que he agregado dos nuevas líneas entre cuadros. El código más golfizado anterior no agrega líneas vacías entre cuadros, el más claro borra la pantalla.
Explicación
Como siento que esto toca muchas cosas que realmente me gustan de QBIC, y da una buena idea de cómo funcionan algunas de sus funciones bajo el capó, me he excedido un poco en la explicación. Tenga en cuenta que QBIC es, en esencia, un intérprete QBasic para Codegolf. El código QBIC entra: sale el código QBasic (y posteriormente se ejecuta).
fuente
SmileBASIC,
109105 bytesfuente
PHP 7, 139 bytes
todavía muy largo
toma datos del argumento de la línea de comando; correr con
-r
.Descompostura
fuente