Raffaele Cecco es un programador que produjo algunos de los mejores videojuegos para la computadora ZX Spectrum a fines de los años ochenta. Entre otros, desarrolló el aclamado Cybernoid y Exolon .
Raffaele cumple 50 años el 10 de mayo de 2017 . Este desafío es un pequeño homenaje a él, por las horas felices que muchos de nosotros pasamos jugando esos juegos fabulosos, y por la motivación que trajeron.
El reto
El propósito es producir una carpa rectangular inspirada en la que se ve en la pantalla del menú principal de Cybernoid , pero en el arte ASCII.
Específicamente, la cadena "Happy birthday Raffaele Cecco "
(tenga en cuenta el espacio final) se mostrará girando a lo largo de los bordes de un rectángulo de 12 × 5, con un tiempo de pausa constante entre las instantáneas.
Por ejemplo, suponiendo que el texto se muestre en el sentido de las agujas del reloj y se gire en sentido contrario (consulte las opciones a continuación), aquí hay tres instantáneas consecutivas de la marquesina rectangular:
Happy birthd
a
o y
c
ceC eleaffaR
luego
appy birthda
H y
o R
cceC eleaffa
luego
ppy birthday
a
H R
a
occeC eleaff
y así.
Reglas
No se tomará ninguna entrada. La salida será a través de STDOUT o equivalente, o en una ventana gráfica.
La salida en realidad debería representar el texto girando; es decir, cada nueva instantánea debe sobrescribir la anterior para dar la impresión de movimiento. Esto puede hacerse por cualquier medio, por ejemplo, escribiendo el número apropiado de nuevas líneas para borrar la pantalla de manera efectiva. Es aceptable si esto es válido solo para un tamaño de pantalla dado; solo especifícalo en la respuesta.
Se aceptan las siguientes opciones:
- El texto se puede mostrar en el sentido de las agujas del reloj o en sentido contrario, y se puede girar en el sentido de las agujas del reloj o en sentido contrario (las instantáneas de ejemplo anteriores suponen que se muestran en el sentido de las agujas del reloj y en sentido contrario).
- La rotación debe continuar cíclicamente en un bucle infinito (hasta que se detenga el programa), y puede comenzar en cualquier fase.
- El tiempo de pausa entre las instantáneas debe ser aproximadamente constante, pero se puede elegir libremente entre 0.1 y 1 s. Es aceptable una pausa inicial antes de mostrar la primera instantánea.
- Las letras pueden ser mayúsculas, minúsculas o mixtas (como en el ejemplo anterior).
- Se permite el espacio en blanco inicial o final.
Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
Si es posible, proporcione un archivo gif que muestre el resultado o un enlace para probar el programa.
El código más corto en bytes gana.
Respuestas:
Gelatina ,
7465 bytesVersión de Windows que se ejecuta en una consola cp-65001 de 6 líneas de altura.
Hay una pausa de medio segundo (más evaluación) entre iteraciones:
¿Cómo?
fuente
HTML + ES6, 200 bytes
fuente
ZX Spectrum BASIC, 187 bytes
Molesto porque Philip me ganó por un par de minutos :-) Los números como
\{15}
son códigos de control no imprimibles: compile con zmakebas si quiere jugar. Tenga en cuenta que el rectángulo completo no se imprime de inmediato, pero se coloca después de los primeros fotogramas.Pruébelo aquí (versión en línea emulada por JS, presione Intro para comenzar) ... http://jsspeccy.zxdemo.org/cecco/
También puede guardar cuatro bytes limpiando la pantalla entre fotogramas en lugar de hacer una IMPRESIÓN EN, pero es demasiado parpadeante para que valga la pena ...
fuente
V,
757170 bytes4 bytes guardados gracias a @DJMcMayhem
Aquí hay un enlace TIO, pero tenga en cuenta que esto no funcionará en TIO porque el programa realiza un bucle infinito. Pruébalo en línea!
Como este código contiene elementos no imprimibles, aquí hay un hexdump.
El tiempo de sueño es de 500 milisegundos.
fuente
H|
->{
.<C-v>êx
->dê
, y5L
->}
±± a
,o° y
yc±±<space>
5L
=>}
.ZX Spectrum BASIC, 274 bytes
Bueno, alguien tuvo que hacerlo. Los pendientes pueden descalificar esto por ser demasiado lento y no tener una pausa entre animaciones, pero estoy reclamando un caso especial aquí :-)
No muy golfizado tampoco. 274 bytes es el número de bytes guardados por Spectrum en la cinta al guardar este programa.
fuente
SGN PI
de1
(ahorra 5 bytes), pero se le olvidóNOT PI
por0
yVAL
para las otras constantes ...NOT PI
Solo me perdí. Deliberadamente no hizo loVAL
que fue lo suficientemente lento como era, yVAL
es terriblemente lento.SVG (HTML5), 267 bytes
Bueno, es rectangular, y es una marquesina, y es texto ASCII ...
fuente
PHP, 184 bytes
imprime 39 líneas nuevas para borrar la pantalla; correr con
-nr
.La pausa real es de 1 segundo; pero aceleré el gif.
sin golf
fuente
Python 2,
230184 bytesPruébalo en repl.it
fuente
Python 3 , 160 bytes
Pruébalo en línea! (Sin animación)
fuente
Python 2,
218200190181176 bytes-18 bytes eliminando el
str
formato-10 bytes, gracias a las sugerencias de @Uriel y @ElPedro
-9 bytes eliminando la indexación negativa
-5 bytes almacenando invertido
f
comov
ywhile
condiciónrepl.it
fuente
while 1:
yprint
reemplazar el siguiente;
con una nueva línea (real). Tambiénf='H..
. Tambiénf[:1]
es en realidadf[0]
.time.sleep(1)
tomarlo por debajo de 200?Ruby + GNU Core Utils, 136 bytes
fuente
Python 2,
182179173160 bytesPruébalo en repl.it
No funciona en TIO, así que mi primer intento de usar repl.it
Editar El uso de un ciclo de "pérdida de tiempo" para contar hasta 1000000 produce un retraso constante de entre 0.1 y 1s en mi máquina y en repl.it y guarda la importación
time
. Supongo que si lo ejecutó en una vieja computadora 286 con 64 MB de RAM, puede durar más de 1 segundo, pero estoy bastante seguro de que eso no va a suceder. Si es así, simplemente reduzca el 1000000 y ahórreme un par de bytes :-)Edite 2 -6 para recordar que las comprensiones de listas en Python 2 pierden el último valor de
s
modo que puedo usarlo más tarde y también recordar que bastante bien cualquier cosa que no sea 0 y "" es verdad. Errores o características? No me importa Me ahorró 6 bytes :-)Editar 3 Otros 13 invirtiendo la rotación y utilizando una lista de comprensión para las filas del medio dentro de la unión y cambiando
3000000
a40**4
. Gracias a @FelixDombek por el último. Sin embargo, tuve que perder mi truco de comprensión de la lista.fuente
999999
lugar de1000000
para un byte: VCódigo máquina ZX81 Z80,
158130 bytesOK, tiene muchos bytes hasta que se ensambla, pero luego cae a 130 bytes. ¿No está seguro si eso rompe alguna regla? Es mi primer post y solo como invitado.
El programa usa 'fuerza bruta' para mostrar el mensaje en lugar del uso inteligente de funciones, como se puede ver por la forma en que tiene fragmentos de código separados para la línea superior, la vertical derecha, la línea inferior y la vertical izquierda. La animación se logra girando el contenido del mensaje y luego simplemente mostrándolo después de un breve retraso, que debería ser exactamente exactamente 0.2 segundos, ya que espera 10 cuadros de una velocidad de 50 (para Zeddys de especificaciones del Reino Unido de todos modos).
Tengo que dar crédito a kmurta por el concepto de rotar el mensaje para obtener la animación, ¡eso ahorró 28 bytes!
Lo siento, no puedo publicar un enlace en ejecución ya que es un programa compilado en formato .P para EightyOne (u otros emuladores) o un Zeddy real si tiene un ZXPand o similar para cargarlo.
El .P se puede descargar en http://www.sinclairzxworld.com/viewtopic.php?f=11&t=2376&p=24988#p24988
fuente