En este desafío, el texto falso de la marquesina es texto que se muestra parte por parte, en forma de desplazamiento.
Algunos ejemplos:
testing 4
t
te
tes
test
esti
stin
ting
ing
ng
g
hello 2
h
he
el
ll
lo
o
foobarz 3
f
fo
foo
oob
oba
bar
arz
rz
z
Something a bit longer 10
S
So
Som
Some
Somet
Someth
Somethi
Somethin
Something
Something
omething a
mething a
ething a b
thing a bi
hing a bit
ing a bit
ng a bit l
g a bit lo
a bit lon
a bit long
bit longe
bit longer
it longer
t longer
longer
longer
onger
nger
ger
er
r
small 15
s
sm
sma
smal
small
small
small
small
small
small
small
small
small
small
small
mall
all
ll
l
aaa 3
a
aa
aaa
aa
a
brace yourself 6
b
br
bra
brac
brace
brace
race y
ace yo
ce you
e your
yours
yourse
oursel
urself
rself
self
elf
lf
f
Tiene que escribir un programa o una función que tome dos entradas e imprima la salida como se describió anteriormente. Puede o no generar espacios finales en su salida. Este es el código de golf, por lo que el código más corto en bytes gana.
Si su programa es independiente (es decir, cuando se ejecuta realmente imprime las líneas) (la entrada puede ser codificada pero fácil de cambiar) y duerme un poco entre cada línea de salida, obtiene un bono de -10.
Respuestas:
CJam,
1211 bytes1 byte guardado por Dennis.
Estoy haciendo uso de "La entrada puede ser codificada pero fácil de cambiar": esto espera que la entrada ya esté en la pila, por lo que puede anteponerse
"testing" 4
a lo anterior, por ejemplo.Pruébalo aquí.
Explicación
Tenga en cuenta que la transposición de la salida deseada es mucho más simple:
Así que solo necesitamos crear
n
líneas, anteponiendoi
espaciosi
desden-1
abajo hacia abajo0
. Eso es lo que hace el código:19-10 = 9?
Encuentro el bono "duerme un poco entre cada línea" un poco vago y poco fiable, pero aquí hay una versión de 19 bytes que simplemente se detiene después de cada línea al calcular todas las permutaciones de la matriz
[0 1 .. 7]
. En el intérprete en línea, esto simplemente lleva a que el resultado final se muestre un poco más tarde, pero si usa el intérprete de Java, esto realmente imprimirá cada línea después de "dormir un poco":fuente
z
. Asumiendo que la entrada es ASCII imprimible, puede reemplazarW%
con$
.z
todo el tiempo para desafíos basados en la cuadrícula ascii.)C, 69 bytes
printf magic!
Versión ampliada con alguna explicación:
Y aquí hay un ejemplo:
fuente
Pyth, 13 bytes
Pruébelo en línea: Pyth Compiler / Executor
Explicación
fuente
Python
6563En realidad, esto se usó para escribir los ejemplos. Solución basal.
fuente
join
Javascript ( borrador ES7 ), 61 bytes
Entradas codificadas de Javascript ( ES6 ), 47 bytes
Suponiendo entradas codificadas en las variables
s
(cadena) yl
(longitud), se puede reducir a 47 bytes de impresión con una alerta para cada línea:fuente
K, 19 bytes
Agregue
x
espacios (x#" "
) al comienzo de la cadenay
. Luego use la forma de "exploración de punto fijo" del operador\
para crear el conjunto de cadenas rotadas. Un punto fijo en K deja de iterar si el resultado de aplicar la función devuelve un resultado repetido o si se revisa la entrada inicial. Dado![1]
que rotará una cadena un paso a la vez,![1]\
es un buen modismo para las permutaciones cíclicas. Luego simplemente recortamos los resultados conx#'
.Una muestra de ejecución:
fuente
J (22)
Esto terminó más tiempo de lo que esperaba, pero supongo que no es tan malo.
Dato curioso: ninguno de los
[
y en]
realidad coinciden, o tienen algo que ver entre sí.fuente
[{."1]]\.@,~' '#~[
(18 bytes).Julia, 75 bytes
Esto crea una función sin nombre que acepta una cadena y un entero como entrada e imprime la salida. Para llamarlo, dale un nombre, por ejemplo
f=(s,n)->(...)
.Ungolfed + explicación:
Ejemplos:
Tenga en cuenta que esta solución tiene 66 bytes si
s
yn
se supone que ya existe en el programa.fuente
QBasic, 56-10 = 46
Esto se jugó golf QBasic - la autoformatter se expandirá
?
haciaPRINT
y añadir algunos espacios. Probado con QB64 , aunque no debería haber nada aquí que no funcione con DOS QBasic.QBasic generalmente no es bueno con las operaciones de cadena, pero muy convenientemente hay una función que devuelve un número dado de espacios.
Tomando algunas libertades con "input puede estar codificado", este código espera que la variable
s
seaDIM
'dAS STRING
, para evitar el$
sufijo de tipo, así como la cadena a la que se asignas
y el númeron
.Preámbulo de ejemplo:
Salida:
La fila en blanco superior puede eliminarse iniciando el
FOR
ciclo en 2 en lugar de 1.Bonificación: Agregar
CLS
justo antesNEXT
de un mísero cuatro bytes convierte esto en ... ¡una verdadera marquesina !Yo
PRINT CHR$(3)
QBasic. : ^ Dfuente
Ruby,
68, 55 bytesDespués de una actualización de @blutorange:
Salida:
ruby marquee.rb "Something a bit longer" 10
Primera presentación para pedir críticas.
fuente
a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
Haskell,
615954 bytesEjemplo de uso:
Editar: se permite una línea vacía al principio / al final
fuente
Bash, 109-10 = 99 bytes
Veo que en el tiempo que me llevó escribir mi solución, me han golpeado profundamente. Sin embargo, pasé demasiado tiempo escribiéndolo para no publicarlo ...
Además de eso, tiene algunas características únicas, como que el tiempo entre la impresión de líneas sea ajustable por el usuario en función de cuánto hay en el directorio actual. (También algo inconsistente, dependiendo de cómo se sienta su disco)
Ejemplo:
Ungolfed y comentó:
Realmente nunca he intentado esto antes. Sugerencias y comentarios bienvenidos!
fuente
Pure Bash, 61 bytes
Salida:
fuente
Perl, 50
57
personajes+3
para-i
,-n
y-l
.-10
personajes para el sueño-i
se usa para la entrada numérica, que se almacena en$^I
. Básicamente, agregamosi
espacios al frente y al final de la entrada, y luego buscamos todos losi
caracteres y los recorremos con elloswhile
.say
convenientemente devuelve1
lo que podemos ingresarsleep
.fuente
s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/
. También puede perder la-l
bandera, pero creo que es necesario contar las 5 para-i -n
(ya que-i
no es un indicador predeterminado) si se ejecuta a través de:echo -n "testing" | perl -i4 -nE'...'
. ¡Sin embargo, aún debería bajar a 44!POSIX shell, 94
Sé que se parece más a Perl, ¡pero esto realmente es una concha!
La primera línea agrega los espacios iniciales necesarios, solo la primera vez a través del ciclo. Establece $ 3 para indicar que lo ha hecho.
La segunda línea (nueva línea incrustada NB) vuelve a aparecer hasta que se agota la entrada, imprimiendo la primera n caracteres de la cadena y luego se invoca con el primer carácter eliminado de $ 1.
Probado con Debian
/bin/dash
- a continuación se muestran ejemplos de resultados:./marquee "prueba" 4
./marquee "Algo un poco más largo" 10
./marquee "pequeño" 15
fuente
Python 2, 51 bytes / 37 bytes
Sin entrada codificada (51 bytes):
Llama como
f("testing", 4)
.Con entrada codificada (37 bytes):
Ambas versiones generan una línea inicial de espacios.
fuente
Python 2, (54 bytes - 10 = 44)
64626046(Supuse que la línea para la entrada codificada no se suma al recuento de bytes).
Todavía no vi un programa que realmente duerma entre líneas de impresión, así que hice uno que sí, ya que se parece más a una marquesina de esa manera. Este programa tiene 2 bytes más en Python 3.
EDITAR: El programa ahora hace un cálculo en lugar de dormir. Lo usé
i
en el cálculo para que el programa no lo almacene como una constante, sino que debe calcularlo cada vez.Pruebe el Python 3 aquí (la respuesta de Python 2 tiene errores)
fuente
time.sleep
haya algún cálculo largo que pueda usar? Además, es un poco más corto usar unwhile
bucle:i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
q=
. Gracias.i**(7**7)
Pyth, 12 bytes
Demostración.
Pyth, 17-10 = 7 bytes
Esta versión emplea un retraso entre las impresiones de línea. Esto se puede ver en el compilador de línea de comandos, que puede obtener aquí .
Ejecute lo siguiente:
Esto tiene un retraso de aproximadamente 0.3 segundos antes de cada impresión. Si prefiere un retraso más largo, puede usar:
Esto tiene un retraso de aproximadamente 4 segundos.
fuente
Java,
133119115Versión larga:
El relleno se aplica a la cadena, y luego las subcadenas de la cadena se imprimen en la consola.
-4 bytes gracias a @KevinCruijssen.
fuente
for(;i<= s.length();System.out.println(s.substring(i-n,i++)));
( -3 bytes )Matlab, 95
Como siempre, es una manipulación de matrices. El núcleo aquí es el comando
spdiags
que le permite crear matrices diagonales muy fácilmente.Con codificación fija de 71 bytes (cadena esperada almacenada
t
y númerok
)fuente
APL, 50-10 = 40 caracteres
Estoy seguro de que podría ser más corto. 50 es la duración del programa sin las dos constantes.
Explicación:
Desarrollado para ngn APL en la terminal.
fuente
Powershell -
8583 bytesEs tarde, no va a ganar :-) Pero pensé en tirar un Powershell para completar:
function m($s,$n){1..$($n+$s.length)|%{-join(" "*$n+$s+" "*$n)[$_-1..$($n+$_-1)]}}
fuente
Cobra - 60
fuente
Maravilloso - 82
fuente
Lua, 79 bytes
fuente
C #, 112 bytes
Programa completo con método no protegido y casos de prueba:
fuente
Jelly , 15 bytes - 10 = 5 (¿ no compite ?)
Pruébalo en línea!
Duerme por un segundo entre cada línea. Imprime una nueva línea final, si eso es aceptable.
yay Jelly beats Charcoal
fuente
PHP4.1, 85-10 = 75 bytes
Sí, esta es una versión muy antigua, pero tiene una funcionalidad que necesito.
Todavía puede ejecutarlo en cualquier versión más reciente de PHP, pero debe configurar las variables usted mismo antes de ejecutar el código a continuación.
¡Eso me ayuda a reducir mucho el tamaño de mi código!
Es realmente básico:
Corrí por la bonificación debido a esto, citando a OP:
Como obviamente puedes ver, tiene un sueño.
Esto supone que ha
register_globals
habilitado de forma predeterminada, que eran las configuraciones predeterminadas para esta versión.Puede probar fácilmente en su navegador, con
mínimoalgunos cambios:El código anterior es un políglota y puede ejecutarse en su navegador o en un intérprete PHP. ¿No debería obtener un premio por esto? ¿Una galleta, tal vez?
Lista de cambios:
sleep(1)
en esta pruebaconcat
El objetivo es superar las diferencias de PHP y JS en cadenas de concatenación.
-
se usa a para llenar el espacioecho
,printf
se utiliza en su lugar (limitación de PHP)<br>
se utiliza en su lugarfuente
J ,
1514 bytesPruébalo en línea!
fuente
APL (Dyalog) , 17 bytes
Pruébalo en línea!
(el programa asume
⎕IO←0
cuál es el valor predeterminado en muchas máquinas)Explicación
fuente