Introducción
¿Recuerdas los rugientes años 80? Quiero decir, ¿sabes, como hace 30 años? No hay teléfonos celulares, ni internet, ni cajeros automáticos, ropa fluorescente (lo que era eso ?!) y el desplazamiento de marqee ! ¡No no no! No los en línea, sino los reales, con luces LED.
Como estoy de humor nostálgico, me gustaría que crees una marquesina de desplazamiento.
Desafío
Cree un programa donde pueda ingresar una cadena de una línea. Su programa necesita crear una marquesina de desplazamiento de 80 caracteres de ancho, repitiendo el texto si es necesario.
Reglas
- El usuario debe poder ingresar una cadena a su programa como entrada. La cadena puede ser un parámetro de línea de comando o una cadena ingresada mientras se ejecuta el programa.
- Su programa debe imprimir continuamente una cadena de exactamente 80 caracteres (visibles).
- La cadena debe actualizarse cada 0.1 segundo (más o menos; no la sincronizaré), desplazando los caracteres cada iteración una posición hacia la izquierda.
- La cadena "gira". Al final de la cadena proporcionada por el usuario, debe aparecer otra instancia de la cadena.
- El programa debe imprimir su salida en una línea, sin saltos de línea (use un '\ r' en lugar de un '\ n')
- Su programa debe ejecutarse hasta el infinito , hasta que un usuario interrumpa.
- Este es un codegolf, por lo que gana el código más corto en bytes.
- Hay un bono de 10% (redondeado hacia arriba al siguiente entero) para imprimir en color rojo sobre un fondo negro.
- Se aplican lagunas estándar.
Implementación de referencia en Python 2.7
Este programa no es golf, pero proporciona una implementación de referencia (y, por lo tanto, un límite superior para el tamaño).
import time,sys
s=raw_input()*99
while 1:
for i in range(80):
print s[i:i+80]+'\r',
sys.stdout.flush()
time.sleep(0.1)
1 2 3 4 5 6 7 8 9 10 11 ... 300
cortes después de aproximadamente 56.Respuestas:
CJam, 31 bytes
Espera exactamente 100 ms.
Esto solo funcionará con el intérprete oficial de Java , ya que el intérprete en línea solo muestra la salida después de salir del programa.
El texto rojo sobre fondo negro es posible en 40 (o 39) bytes, para una puntuación de 36:
Cómo funciona
fuente
;
la explicación en la explicación está desalineadaPowerShell,
118 113 112 108 102 101 9996 - 10% = 86Código
Con la advertencia de que ahora comienza el primer bucle con el segundo personaje; Las reglas no dicen que tiene que comenzar desde el frente de la cadena, y el primero está incluido en general, así que eso está bien para mí. Lo llevaré a 100 caracteres de alguna manera: edite: gracias @ConnorLSW por las ediciones para que sea inferior a 100.
Instrucciones
Salida
Notas
Una versión más legible con los nombres de variables y parámetros completados un poco:
-F R
es suficientemente único como para establecer un Red ForegroundColor, por ejemplo.-B 0
establece en color Enum valor 0, que se interpreta como Negro.Alternativa, carpa más "correcta":
El código de referencia no maneja bien las cadenas de más de 80 caracteres, omitiendo cualquier cosa en el mensaje más allá de ~ 160 caracteres, y se reinicia por error cada 99 * caracteres len (cadena). por ejemplo, si el ancho del letrero era de 5 caracteres, hace esto:
Esta versión indexa el módulo de la longitud del texto en lugar del ancho del signo, por lo que se ejecuta a través de toda la cadena. 106 - 10% = 95 caracteres.
Alternativa: firme qué ciclos como el .gif en la pregunta, 118-10% = 106
Porque se ve mejor.
fuente
Bla
a0
-Write-Host
interpretará los números de colores.while(1)
afor()
salvar algunos bytes :)for()
, puede guardar un byte más cambiando$s=(Read-Host)*180;for(){
afor($s=(Read-Host)*180){
Matlab, 76 bytes
Lo que creo que es bueno aquí es que puedes tener vectores como índices de matriz. Esto devuelve un vector de las entradas de matriz correspondientes, lo que hace que sea muy fácil agregar la cadena dada independientemente de la longitud.
Resultado:
fuente
clc
. Se le olvidó añadir's'
eninput
a=input('','s')
'
cadenas delimitadas como entrada. Muchos idiomas necesitan un delimitador de cadena o interpretarían un argumento de línea de comando en forma de oración (palabras separadas por espacios) como argumentos múltiples de todos modos.QBasic,
116113 bytes - 10% =105102Aquí hay una versión formateada con algunos comentarios:
Un par de notas:
PRINT
elFOR
ciclo posterior .CLS
debe restablecer el cursor a la esquina superior izquierda cada vez. Pero en QB64, al menos, si no pongo el extraPRINT
, la marquesina termina en la segunda línea en lugar de la primera. Si alguien tiene QBasic configurado en DosBox o somesuch, me interesaría saber si sucede lo mismo allí o si es un error QB64.TIMER
(número de segundos desde la medianoche) para el retraso. Si el código se ejecuta a medianoche, la marquesina se atascará porqueTIMER
se restablecerá0
y siempre será menor que at
partir de entonces.fuente
PRINT
sino conCLS
--despuésCLS
, no importa lo que se imprimió antes, la siguientePRINT
declaración debería salir en 1,1; pero en su lugar, me encontré con una situación en la que salía a 2,1.Perl,
9998 bytes (-10% = 89)Toma su entrada del parámetro de línea de comando.
fuente
pb , ⌈ (216 + 3) * 0.9⌉ = 198
+3 bytes para la bandera del intérprete
d=1
Una puntuación bastante horrible, pero teniendo en cuenta lo difícil que es hacer algo en este idioma, podría ser peor. La relación de esta respuesta de (bytes utilizados para obtener texto rojo) a (bonificación por tener texto rojo) es realmente buena, toda la salida se vuelve roja con solo el
c
el comienzo!El tiempo entre cada marca varía dependiendo de la longitud de la cadena de entrada, pero es de alrededor de 0.1 segundos.
Por cierto, la salida de este programa parece basura total porque el intérprete es muy malo. Cada milisegundo borra la terminal y vuelve a dibujar todo, por lo que se vuelve realmente parpadeante.
Con comentarios:
fuente
Perl - 120 bytes (-10% = 108)
fuente
Matlab, ⌈188 * .9⌉ = 170
Esto funciona en la versión Matlab R2014b o superior. El resultado se muestra en una ventana de figura.
En el siguiente ejemplo , el texto se escribe en negrita para una mejor visualización (no se hace en el código anterior porque cuesta unos pocos bytes). Tenga en cuenta también que la velocidad de la animación GIF no corresponde a la pausa requerida de 0.1 s, pero el tiempo es correcto en la figura real que se muestra al ejecutar el programa.
fuente
SpecBAS, 130 bytes (-10% = 117)
Multiplica la cadena original para que tenga 80 o más caracteres, luego la corta exactamente a 80.
TEXT
es un comando en SpecBAS que funciona de la misma manera quePRINT
(en este ejemplo) pero guarda un carácter.El
SCALE
comando agrega algunos caracteres adicionales al código, pero lo hace ver más marquesina.El programa continúa hasta que presione Esc.
fuente
Perl, 63 (70 caracteres - 10% de bonificación)
No es una solución muy diferente a las demás, pero perdí el tiempo haciéndolo, ¡así que pensé en publicarlo también!
Se basa en un terminal compatible con Unix para los códigos ANSI y la llamada a coreutils '
sleep
. Los dos\x..
caracteres en lo anterior son en realidad un salto de línea literal y un carácter de escape según este volcado hexadecimal:fuente
Ruby,
797675 bytesTodavía no soy un experto en rubíes, posiblemente pueda jugar golf.
Con rojo y negro mismo puntaje:
fuente
Perl, 84 bytes (- 10% = 76)
Esto toma un argumento de línea de comando que es el texto en la marquesina.
Explicación:
$_
\b
) y un espacio (). Esto elimina el último carácter de la impresión anterior. Luego imprima el retorno de carro y el color.
$p
$p = ($p+1) % length of text
fuente
bash, 121 bytes
fuente
Python 3, 96 bytes
Esto solo funcionará en terminales que admitan secuencias de escape ANSI. Si estás en Windows, prueba ansicon .
Hurra por la
flush
palabra clave en Python 3, por lo que no tenemos que hacer unasys.stdout.flush()
llamada costosa .fuente
C,
293269 bytes(Se agregaron nuevas líneas para facilitar la lectura)
Esto toma la entrada de la entrada estándar terminada por EOF; así que es mejor ingresar una cadena, una nueva línea y luego el EOF (por ejemplo, Ctrl ^ D).
Sin golf:
fuente
SmileBASIC BIG, 79 bytes
Tuve una buena solución gráfica casi terminada cuando me di cuenta de que tenía que desplazar 1 carácter completo a la vez.
fuente
Jalea ,
201918 bytes80
por⁹
(= 256) porque tiene que multiplicarse por al menos 80Çß
(desdeÇ1¿
).Con algunos trucos de la respuesta de @Dennis aquí . Jelly es más nuevo que el desafío, pero no está diseñado específicamente para ello. ¡Sugerencias sobre cómo mejorar son bienvenidas! Si su consola está en utf-8, ejecute
export LC_ALL=en_US
o similar antes de intentarlo.Ejemplo
Explicación
fuente
LOVE2D Lua, 197-10% = 178 Bytes
Requiere que la entrada esté en un archivo llamado 'tt' en la raíz, por lo tanto, se agregaron 3 bytes adicionales a la puntuación.
Funcionalidad realmente básica, solo en un bucle for de 80 iteraciones, agregue el carácter en el índice de i más el tiempo actual en segundos modulado por la longitud de la cadena actual, dando una cadena larga repetida de 80 caracteres de la entrada, que se desplaza hacia la izquierda Conforme pasé él tiempo.
Usé LOVE2D para las risas.
fuente
Sinclair ZX81 / Timex TS1000 / 1500 BASIC,
110 bytes182 bytes (para el listado)Funciona imprimiendo los primeros
3280 caracteres de la cadenaA$
en la posición de pantalla 0,0 en la línea dos, y luego manipulando la cadena desde la posición 2 hasta el final de la picadura en la línea 3 (Sinclair ZX81 BASIC indexa cadenas de 1 y no cero ), por lo tanto, agrega el primer carácter al final y lo devuelve a laA$
variable; entonces hay un bucle incondicional de regreso a la línea 2.fuente
Commodore 64, 434 bytes
Como esto requiere 80 caracteres para mostrar, y el C64 por defecto tiene solo 40 caracteres, luego se imprimen 40 caracteres de la voluta en la línea superior del área de la pantalla mientras que los otros 40 se imprimen cerca de la parte inferior.
Para aclarar en qué se
{HOME}
traducen los símbolos y otros como PETSCII, aquí hay una captura de pantalla tomada de mi emulador:Haré una versión completa de golf cuando instale CBM PRG Studio (o cuando no esté almorzando en el trabajo).
fuente
Ruby,
7977 caracteresfuente
PHP, 136 bytes
php -f marquee.php hello\ world
para marcar la cadena "hello world".hello worlddddddddddddddddddddddddddddddddddddddd
, pero solo pasará por 80 caracteres, espero que todavía cuente.Ha sido un día largo, probablemente hay algo que puedo hacer para mejorarlo.
fuente
PHP, 85 bytes
toma la entrada del primer argumento de línea de comando; correr con
-nr
.Comienza a desplazarse con el segundo personaje. Agregue un byte para comenzar en el primer carácter:
Reemplace
=++$i%
con%=
y;;
con;;$i++,
.fuente