Anima el texto en tu terminal
La meta
El objetivo es "animar" la cadena "Hola mundo" en su salida para que cada personaje se capitalice uno tras otro.
Su programa puede salir después de que cada letra haya sido capitalizada.
Por ejemplo;
# Iteration 1
Hello world
# Iteration 2
hEllo world
# Iteration 3
heLlo world
# Iteration 4
helLo world
# Iteration 5
hellO world
# Iteration 6 (note: it should capitilize the space char (ie: a break between iteration 5 and iteration 7)
hello world
# Iteration 7
hello World
# Iteration 8
hello wOrld
# Iteration 9
hello woRld
# Iteration 10
hello worLd
# Iteration 11
hello worlD
Solo debe animar la cadena una vez y entre cada estado debe haber un retraso de 1 segundo.
Entrada
No se requiere entrada, pero "Hola mundo" debe ser la cadena que está "animada".
Salida
La cadena "Hola mundo" debe estar animada. La salida debe ser como 1 línea para crear una especie de animación de onda. Se permite una nueva línea final vacía. Ejemplo gif;
Vi esto en un video de YouTube de Metasploit y pensé que el efecto era bastante bueno, que es donde grabé el gif, por lo que es un poco lento, pero espero que ilustre bien la salida
Este es el código de golf , el conteo de bytes más bajo se considerará el ganador.
Respuestas:
Vim 26 bytes
Explicación (no .gif todavía):
Primero, debemos ingresar el texto 'hola mundo'. Esto es bastante sencillo. Es solo:
En este punto, el cursor está en la 'd' en 'mundo'. Próximo:
También hay otras dos versiones de 26 bytes que encontré:
fuente
~
rompa el círculo . Creo que es lol
que hace el trabajo duroPython 2,
989490 bytes-9-4 bytes gracias a @ElPedro -4 bytes gracias a @JonathanAllan y @Rodfuente
-u
argumentos y usarlosprint"\t"+s[:x]+s[x:].title(),;
(tenga en cuenta la coma final) . Y esto no cambiará su recuento de bytes (porque el argumento agregaría +2 bytes)python -c 'code here'
. Con la bandera, la invocación seríapython -uc 'code here'
, que es un byte diferente.Commodore 64,
168162137133 BASIC (y tokenized) bytes utilizadosDeberá usar las abreviaturas de palabras clave BASIC para ingresar esto en un C64 o emulador real (o ingresar el programa en un Commodore 128 y cargarlo nuevamente en modo C64, aunque esto también debería funcionar en el 128). El
{control+n}
sólo funcionará / pantalla después de la cita de apertura. Es una forma abreviadachr$(14)
y, por lo tanto, guarda algunos bytes y cambia el juego de caracteres al modo comercial o los caracteres en mayúscula / minúscula.He agregado algunas abreviaturas para usted, así que usted. El
{clear home}
carácter se realiza presionandoShift
y laCLR/HOME
tecla después de la comilla de apertura.Para fines ilustrativos, la lista no consolidada se puede ingresar de la siguiente manera:
Funciona al cambiar el juego de caracteres PETSCII al modo comercial (mayúsculas / minúsculas) y al escribir la cadena hello world en la línea superior de la pantalla que se encuentra en la ubicación de memoria $ 0400, luego tomará el valor en cada ubicación para la próxima 11 bytes desde allí y aumente cada valor en 64 (el equivalente en mayúsculas). Si el contador j es> 0, llama a una rutina en la línea 2 para disminuir la ubicación de memoria anterior en 64 nuevamente.
La línea 3 es una pausa, también escribe un espacio en la ubicación $ 0405 y $ 040b, que es una corrección de errores (que probablemente podría eliminarse para guardar algunos bytes).
fuente
fori=0to1step0
...nexti
esencialmente está creando un ciclo infinito (sin goto), algo así comowhile(true){...}
en los idiomas más modernos.GO TO
está prohibido, correcto ;-) Uno puede resolver fácilmente el listado por sí mismoCLR
antes de resolver los bytes libres restantes con laFRE(0)
función rotaC #,
230215193161135134130 bytesEs C #, así que es largo, ¿verdad? :-( Pero después de un poco de ayuda y búsqueda, yo (y otros, realmente) me las arreglé para eliminar exactamente 100 bytes ya.
Golfed
Sin golf
Captura de pantalla
Aunque se ve mucho mejor cuando se repite y más rápido.
Actualizaciones
Perdí 15 bytes al usar el retorno de carro en lugar de lo
Clear()
que también me permitió reemplazar un uso conSystem.Console
algún lugar en línea.Programa reemplazado con lambda ahorrando 23 bytes gracias a @devRicher
new string(b)
conb
yb[i]=char.ToUpper(b[i])
conb[i]-=' '
, ¡ahorrándome otros 26 bytes!i++
gracias a @Snowfirei<11
de mifor
buclefuente
class P{static void Main(){ ... }}
a()=>{ ... }
para cortar algunos bytes. PPCG acepta funciones como respuestas, por lo que una lambda funciona bien.void g(){ ... }
.char g = string j[x]
), para guardar alrededor de 50 bytes:()=>{var s="Hello world";for(int i=1;i<11;i++){string h = s;h[i]=char.ToUpper(s[i]);System.Console.Write(h+"\r");System.Threading.Thread.Sleep(1000);}}
b[i++]-=' '
. Eso sería útil, porque entonces también podría eliminar la condición en el bucle for y simplemente escribirfor(int i=0;;)
. OP señaló en los comentarios que el programa puede salir con un error, por lo que puede permitir una excepción IndexOutOfRangeExceptionPowershell,
126119107104 BytesRevisiones (probablemente habrá muchas):
Cambiar
$s.Length
a const1110
Constructor de cadenas reestructurado, eliminó 1 declaración de unión y se utilizó en
++$s
lugar de($s+1)
, para guardar algunos bytes gracias a @AdmBorkBorkAdmBorkBork señala que usar la cadena dos veces es en realidad más corto que encapsular y luego usarlo
.ToLower()
, lo que dice mucho sobre cuán detallado es powershell, -3.básicamente recorre la longitud de la cadena, forma una matriz de tres partes, pre-capitcal, mayúscula y post-capital, quita 32 de la letra del medio, luego convierte de nuevo en un carácter para obtener mayúsculas, afortunadamente esto no No convierta el espacio en un personaje visible tampoco, espero que esto sea aceptable.
fuente
$s
y.ToLower()
agregarla. -'Hello world';$s='hello world';
Conjunto CP-1610 , 50 DECLE = 63 bytes
Este código está destinado a ejecutarse en una Intellivision .
Un código de operación CP-1610 está codificado con un valor de 10 bits, conocido como 'DECLE'. Este programa tiene una duración de 50 DECLE, que comienza en $ 4800 y termina en $ 4831.
Salida
fuente
MATL , 30 bytes
¡Pruébalo en MATL Online!
fuente
PHP,
767471 bytes¡Gracias @hd por la demora de ser un segundo completo y ninguna fracción del mismo!
Gracias @ user63956 por 2 bytes y @aross por 3 bytes.
Corre con
-nr
.fuente
sleep(print"$s\r")
.C,
97retirados106 bytescon caracteres escapados contados como 1 byte
Nota: He
comentado el retraso de tiempo enTIO no vinculado porque espera a completarse antes de mostrar la salida, tampoco parece reconocer los retornos de carro y pone nuevas líneas. Además, si está en Windows, la suspensión es en milisegundos en lugar de segundos, por lo quesleep(1)
debería sersleep(1000)
.Nota 2: He retirado esta entrada por el momento hasta que se hayan solucionado los errores de salida.fuente
^C
para detenerlo. (también estoy en Mac)JavaScript (ES6),
141 139131 bytesGuardado 8B gracias a Apsillers
Explicación
Esto crea una función sin argumentos, que divide la cadena
hello world
en una matriz de caracteres y capitaliza el carácterd+1
th .d
es un contador que comienza como0
y se incrementa cada vez.Uso
fuente
_=>
que hacer un programa completo (por ejemplo, si usted se pegó en un archivo, Node.js para correr con éxito hasta su finalización). Mi comprensión de la prohibición de los "fragmentos de código" está en contra de escribir código que implícitamente acepte alguna entrada como variable, como "si suponemos quei
ya tiene la entrada, podemos hacer ...", lo que no está sucediendo aquí, ya que explícitamente existe sin entrada.Noodel , 22 bytes
Intentalo:)
Cómo funciona
El fragmento utiliza una versión de 25 bytes que se repite continuamente.
fuente
Bash + coreutils,
9998 bytesfuente
Perl 6 ,
6561 bytesGIF:
Cómo funciona
La secuencia de escape ANSI
\ec
borra la pantalla.Cada iteración, el carácter
i
'th de la cadena codificada está sustituido por su versión en mayúsculas.La
say
función siempre regresaTrue
, que se pasa a la función de suspensión que la interpreta como1
segunda.fuente
Ruby,
8281 bytes^ H es ascii 8 (retroceso), y es solo 1 byte.
fuente
C, 87 bytes
Compila y ejecuta en Linux.
fuente
Mathematica,
130128123110108 bytesExplicación:
i=1
del 11 al 11, imprima del 1 ° al (i-1) carácter de "hola mundo","hello world"[i]
escriba en mayúscula y luego imprima el resto de la cadena, incrementandoi
al mismo tiempo.fuente
Java
215212204203 bytesSin golf:
fuente
interface A
(con un espacio)? Además, puedes eliminar el espacio entre,
yCharacter.toUpperCase
.R ,
106103bytesSolo un simple bucle, limpiar la consola
cat('\f')
parece algo dependiente del sistema, pero no conozco una mejor manera.fuente
utf8ToInt
. Esto no funcionó, el espacio debe manejarse como un caso especial. En el proceso descubrí quecat("\014")
parecía funcionar mejor que trabajar dondecat("\f")
no. pero no en TIOC, 122 bytes
Más corto que C #: D
fuente
i<11
lugar dei<10
en su buclePerl, 75 bytes
Utiliza el código ANSI ESCcpara borrar la consola y mover el cursor hacia la parte superior izquierda en cada iteración, pero aún necesita
\n
al final de la cadena de reemplazo para evitar que toda la animación se pierda en el búfer de línea.Una llamada exitosa a
print
devuelve un valor de 1, al que se puede pasar directamentesleep
.fuente
$`
y$'
para guardar algunos bytes en eso(.{$_})(.)(.*)
(no funcionará en una terminal, pero eso no es un problema). Se requiere modificar un poco el resto de su código sin embargo:"hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger
. (Escribí casi este código exacto, luego, al mirar si alguien había publicado una respuesta perl, encontré la tuya). Y un pequeño detalle sobre el bytecount: puede usar una nueva línea literal para guardar un byte, y tal vez algún tipo de literal\33c
(aunque no estoy muy seguro de eso último).SmileBASIC,
9071 bytesfuente
Jalea ,
2421 bytesEste es un enlace / función niládica que se imprime en STDOUT. No funciona como un programa completo.
El código no se puede probar en TIO; utiliza caracteres de control y TIO no tiene emulador de terminal (todavía).
Cómo funciona
fuente
(Strings are cast to Boolean.)
Eso es tortuoso!C, 122 bytes
Como ejercicio, escribí esto para proporcionar un formato de salida más óptimo que algunas de las otras respuestas. También significa que el cursor se encuentra después de la letra mayúscula más reciente durante las pausas.
(Líneas nuevas y muescas cosméticas y que no forman parte del recuento de bytes)
Ahora, algunos lectores pueden notar que esto requiere un poco de masaje para poder ejecutarse en máquinas modernas (el encantamiento mágico es
-static -Wl,-N
), pero así es como se comportaban las implementaciones reales de C, así que creo que es válido. También supone que el conjunto de caracteres es ASCII y no imprime una nueva línea final.Bonificación: para una versión EBCDIC, puede reemplazar
8
con22
y64
con32
, y cambiar la lógica parap[1]
yp[2]
. Para probar en un sistema que no sea EBCDIC, puede compilar con-funsigned-char -fexec-charset=cp037
.La salida es de 43 bytes:
Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD
fuente
Scala, 92 bytes
Sin golf
fuente
h(i)toUpper
Lote, 184 bytes
Curiosamente, la línea de comando para
timeout/t>nul 1
se corrompe si no hay una nueva línea final, por lo que no puedo ponerla al final del archivo.fuente
Ruby, 108 bytes
Primera vez, estudiante de primer año. No es un águila, pero al menos estoy un poco orgulloso.
fuente
Pascal,
187152 bytesNo es exactamente el más eficiente o el más corto, ¡pero funciona bastante bien!
Probado y funciona en Free Pascal Compiler 2.6+.
¡Gracias a @manatwork por guardar 35 bytes!
He usado http://www.onlinecompiler.net/pascal para compilar el archivo y ejecutarlo en Windows.
No he visto ningún problema con eso, hasta ahora.
fuente
UpCase
función desde los viejos tiempos de Turbo. (Hay que cargo únicamenteChar
, pero en Free Pascal también se ocupa de las cadenas.)Word
(oByte
); hacer P aconst
para que infiera tipo del valor de inicialización; mientras esté allí, haga de X una constante inicializada para deshacerse de unavar
palabra clave separada (esta puede no funcionar en todas las variantes de Pascal, pero ciertamente sí funciona en Free Pascal); useClrScr
para saltar a la esquina superior izquierda; reemplazar esaif
con una sola expresión:X:=X*Ord(X<11)+1
. pastebin.com/FfaixkESconst X:Word=1;P='hello world';
y esoconst X:Word=1;P='hello world';
era posible. Aprendí Pascal en Turbo Pascal 7, que puede no ser compatible con eso. Y se olvidó por completoupcase
. ¡Muchas gracias!C
12011010496 bytesVersión sin golf
@Pakk Gracias por guardar algunos bytes, gran idea. :)
@Pakk @KarlNapf Gracias a todos por sus aportes.
¿Todavía se puede acortar? :)
fuente
-=
y+=
. Además, una variable de puntero podría guardar el[]
pero no estoy seguro.char *j,s[]="hello world";
para guardar algunos caracteres más.f(){char*j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(1));}
89 bytes.Python 2,
220189179 bytesSolución sin usar cadenas y
capitalize()
, byte cuenta como es:Y una variante un poco más larga (191 caracteres) sin reiniciar el caso:
fuente
C ++,
88125 BytesVersión sin golf:
Compilado con TDM-GCC en una máquina con Windows 10 con Dev-C ++.
Editar: Olvidé los incluye en mi primera versión.
fuente
for
bucle moviendo el retorno del carro al comienzo de la cadena. También lo ayudaré: Hacerlofor(int c=1;;c++)
le ahorrará 1 byte.for(int c=1;;)
y luegoa[c++]-=32;
guardar otro byte.