Anime o texto no seu terminal
O objetivo
O objetivo é "animar" a string "Hello world" em sua saída para que cada caractere fique em maiúscula um após o outro.
Seu programa pode sair após cada letra ser maiúscula.
Por exemplo;
# 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
Ele deve animar a sequência apenas uma vez e, entre cada estado, deve haver um atraso de 1 segundo.
Entrada
Nenhuma entrada é necessária, mas "Hello world" deve ser a sequência que é "animada".
Resultado
A sequência "Hello world" deve ser animada. A saída deve ser de 1 linha para criar uma espécie de animação de onda. Uma nova linha vazia à direita é permitida. Gif de exemplo;
Eu vi isso em um vídeo do metasploit no youtube e achei o efeito muito legal, que foi onde eu gravei o gif, então é um pouco lento, mas espero que ilustre bem a saída
Isso é código-golfe , a menor contagem de bytes será considerada a vencedora.
Respostas:
Vim 26 bytes
Explicação (ainda não .gif):
Primeiro, devemos inserir o texto 'olá mundo'. Isso é bem direto. É apenas:
Neste ponto, o cursor está no 'd' no 'mundo'. Próximo:
Também existem outras duas versões de 26 bytes:
fonte
~
quebra o ciclo . Eu acredito que é ol
que faz o trabalho duroPython 2,
989490 bytes-9-4 bytes graças a @ElPedro -4 bytes graças a @JonathanAllan e @Rodfonte
-u
argumentos e usarprint"\t"+s[:x]+s[x:].title(),;
(observe a vírgula à direita) . E isso não vai mudar a sua contagem de bytes (porque o argumento acrescentaria +2 bytes)python -c 'code here'
. Com o sinalizador, a chamada seriapython -uc 'code here'
, que é um byte diferente.Commodore 64,
168162137133 bytes BASIC (e tokenizados) usadosVocê precisará usar abreviações de palavras-chave BASIC para inserir isso em um C64 ou emulador real (ou inserir o programa em um Commodore 128 e carregá-lo novamente no modo C64, embora isso também funcione no 128). Ele
{control+n}
só funcionará / será exibido após a cotação de abertura. É uma abreviação dechr$(14)
e, portanto, salva alguns bytes e alterna o conjunto de caracteres para o modo comercial ou para caracteres maiúsculos / minúsculos.Eu adicionei algumas abreviações para você, para você. O
{clear home}
caractere é criado pressionandoShift
e aCLR/HOME
tecla após as aspas de abertura.Para fins ilustrativos, a listagem não confiável pode ser inserida da seguinte forma:
Ele funciona alternando o conjunto de caracteres PETSCII para o modo de negócios (maiúsculas / minúsculas) e gravando a sequência hello world na linha superior da tela, localizada no local de memória $ 0400, e o valor em cada local para o próximo 11 bytes a partir daí e aumente cada valor em 64 (o equivalente em maiúsculas). Se o contador j for> 0, ele chamará uma rotina na linha 2 para diminuir novamente o local da memória anterior em 64.
A Linha 3 é uma pausa, também grava um espaço no local $ 0405 e $ 040b, que é uma correção de bug (que provavelmente pode ser removida para salvar alguns bytes).
fonte
fori=0to1step0
...nexti
é essencialmente criar um loop infinito (sem goto), comowhile(true){...}
nas linguagens mais modernas.GO TO
é proibido, direito ;-) Um pode facilmente trabalhar fora da lista por si só porCLR
antes de trabalhar fora o restante bytes livres com o quebradoFRE(0)
funçãoC #,
230215193161135134130 bytesÉ C #, então está certo! :-( Mas depois de alguma ajuda e pesquisa, eu (e outros, realmente) consegui remover exatamente 100 bytes.
Golfe
Ungolfed
Captura de tela
Embora pareça muito melhor ao fazer um loop e mais rápido ..
Atualizações
Perdi 15 bytes usando o retorno de carro em vez de o
Clear()
que também me permitiu substituir um uso porSystem.Console
algum lugar inline.Programa substituído com lambda economizando 23 bytes graças a @devRicher
new string(b)
porb
eb[i]=char.ToUpper(b[i])
comb[i]-=' '
, poupando-me mais 26 bytes!i++
graças a @Snowfirei<11
do meufor
loopfonte
class P{static void Main(){ ... }}
para()=>{ ... }
para cortar alguns bytes. O PPCG aceita funções como respostas, portanto, um lambda funciona bem.void g(){ ... }
.char g = string j[x]
), para economizar cerca 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++]-=' '
. Isso seria útil, porque você também pode remover a condição no loop for e apenas escreverfor(int i=0;;)
. OP apontou nos comentários, que o programa pode sair com um erro, para que você possa permitir um IndexOutOfRangeExceptionPowershell,
126119107104 BytesRevisões (provavelmente haverá muitas):
Mude
$s.Length
para const1110
Construtor de strings reestruturado, removido 1 instrução de junção e usada em
++$s
vez de($s+1)
, para salvar alguns bytes graças a @AdmBorkBorkO AdmBorkBork ressalta que o simples uso da string duas vezes é realmente mais curto do que encapsular e depois incluí
.ToLower()
-la - o que diz muito sobre o quão detalhado é o PowerShell, -3!basicamente percorre o comprimento da string, forma uma matriz de três partes, pré-capitcal, maiúscula e pós-maiúscula, retira 32 da letra do meio e depois converte novamente em um caractere para obter letras maiúsculas, felizmente isso não transformará o espaço em um personagem visível também, espero que seja aceitável?
fonte
$s
e.ToLower()
inseri-la. -'Hello world';$s='hello world';
Montagem CP-1610 , 50 DECLEs = 63 bytes
Este código deve ser executado em um Intellivision .
Um código de operação CP-1610 é codificado com um valor de 10 bits, conhecido como 'DECLE'. Este programa tem 50 DECLEs, começando em US $ 4800 e terminando em US $ 4831.
Resultado
fonte
MATL , 30 bytes
Experimente no MATL Online!
fonte
PHP,
767471 bytesObrigado @hd pelo atraso de um segundo inteiro e nenhuma fração disso!
Obrigado @ user63956 por 2 bytes e @aross por 3 bytes.
Corra com
-nr
.fonte
sleep(print"$s\r")
.C,
97retirados106 bytescom caracteres de escape contados como 1 byte
Nota: eu
comentei o atraso noTIO desvinculado, porque aguarda a conclusão antes de exibir a saída, também parece não reconhecer retornos de carro e colocar novas linhas. Além disso, se você estiver no Windows, o sono será em milissegundos em vez de segundos, portantosleep(1)
deve se tornarsleep(1000)
.Nota 2: Retirei essa entrada no momento até que os erros de saída sejam resolvidos.fonte
^C
para pará-lo. (também eu estou no mac)JavaScript (ES6),
141 139131 bytesEconomizou 8B graças a Apsillers
Explicação
Isso cria uma função sem argumentos, que divide a string
hello world
em um array de caracteres e capitaliza od+1
th personagem.d
é um contador que começa como0
e é aumentado a cada vez.Uso
fonte
_=>
que você faz tem um programa completo (por exemplo, se você preso em um arquivo, Node.js seria executado com êxito lo até a conclusão). Meu entendimento da proibição contra "trechos de código" é contra a criação de código que implicitamente aceite alguma entrada como variável, como "se assumirmos quei
já tem a entrada, podemos fazer ..." o que não está acontecendo aqui, pois existe explicitamente sem entrada.Noodel , 22 bytes
Tente:)
Como funciona
O trecho usa uma versão de 25 bytes que faz loops continuamente.
fonte
Bash + coreutils,
9998 bytesfonte
Perl 6 ,
6561 bytesGIF:
Como funciona
A seqüência de escape ANSI
\ec
limpa a tela.A cada iteração, o
i
caractere da string codificada é substituído por sua versão em maiúscula.A
say
função sempre retornaTrue
, que é passada para a função de suspensão que a interpreta como1
segunda.fonte
Ruby,
8281 bytes^ H é ascii 8 (backspace) e tem apenas 1 byte.
fonte
C, 87 bytes
Compila e roda no Linux.
fonte
Mathematica,
130128123110108 bytesExplicação: De
i=1
até 11, imprima do 1º ao (i-1) caractere de "olá mundo", coloque em maiúscula e"hello world"[i]
, em seguida, imprima o restante da sequência, incrementandoi
ao mesmo tempo.fonte
Java
215212204203 bytesUngolfed:
fonte
interface A
(com um espaço)? Além disso, você pode remover o espaço entre,
eCharacter.toUpperCase
.R ,
106103 bytesApenas um loop simples, a limpeza do console
cat('\f')
parece um pouco dependente do sistema, mas não estou ciente de uma maneira melhor.fonte
utf8ToInt
. Isso não funcionou, o espaço precisa ser tratado como um caso especial. No processo, descobri quecat("\014")
parecia funcionar melhor do que trabalhar ondecat("\f")
não funcionava. mas não no TIOC, 122 bytes
Menor que C #: D
fonte
i<11
vez doi<10
loop forPerl, 75 bytes
Usa o código ANSI ESCcpara limpar o console e mover o cursor para o canto superior esquerdo a cada iteração, mas ainda precisa
\n
no final da cadeia de substituição para evitar que toda a animação seja perdida no buffer de linha.Uma chamada bem-sucedida para
print
retorna um valor 1, que pode ser passado diretamente parasleep
.fonte
$`
e$'
salvar alguns bytes(.{$_})(.)(.*)
(isso não funcionará em um terminal, mas isso não é um problema). Ela exige modificar um pouco o resto do seu código no entanto:"hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger
. (Eu escrevi quase exatamente esse código, então, ao procurar se alguém já havia postado uma resposta perl, encontrei a sua). E um pequeno detalhe sobre o número de bytes: você pode usar uma nova linha literária para salvar um byte e talvez algum tipo de literal\33c
(embora não tenha muita certeza sobre o último).SmileBASIC,
9071 bytesfonte
Geléia ,
2421 bytesEste é um link / função niládica que imprime em STDOUT. Não funciona como um programa completo.
O código não pode ser testado no TIO; ele usa caracteres de controle e o TIO ainda não possui um emulador de terminal.
Como funciona
fonte
(Strings are cast to Boolean.)
Isso é desonesto!C, 122 bytes
Como exercício, escrevi isso para fornecer um formato de saída mais ideal do que algumas das outras respostas. Também significa que o cursor fica após a letra maiúscula mais recente durante as pausas.
(Novas linhas e recuos cosméticos e não fazem parte da contagem de bytes)
Agora, alguns leitores podem notar que isso requer alguma massagem para rodar em máquinas modernas (o encantamento mágico é
-static -Wl,-N
), mas é assim que as implementações reais de C costumavam se comportar, então eu acho que é válido. Ele também assume que o conjunto de caracteres é ASCII e não imprime uma nova linha à direita.Bônus: Para uma versão EBCDIC, você pode substituir
8
por22
e64
com32
e alternar a lógica parap[1]
ep[2]
. Para testar em um sistema não EBCDIC, você pode compilar com-funsigned-char -fexec-charset=cp037
.A saída é 43 bytes:
Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD
fonte
Scala, 92 bytes
Ungolfed
fonte
h(i)toUpper
Lote, 184 bytes
Curiosamente, a linha de comando para
timeout/t>nul 1
fica corrompida se não houver uma nova linha à direita, por isso não posso colocá-la no final do arquivo.fonte
Ruby, 108 bytes
Primeira vez, estudante do primeiro ano. Não é uma águia, mas tenho pelo menos um pouco de orgulho.
fonte
Pascal,
187152 bytesNão é exatamente o mais eficiente ou o mais curto, mas funciona muito bem!
Testado e funciona no Free Pascal Compiler 2.6+.
Obrigado a @manatwork por salvar 35 bytes!
Eu usei http://www.onlinecompiler.net/pascal para compilar o arquivo e executá-lo no Windows.
Até agora, não vi nenhum problema com isso.
fonte
UpCase
função desde os tempos antigos do Turbo. (Lá tratados somenteChar
, mas em Free Pascal também lida com cordas.)Word
(ouByte
); faça P aconst
para inferir o tipo do valor de inicialização; enquanto estiver lá, torne X uma constante inicializada para se livrar devar
palavras-chave separadas (essa pode não funcionar em todas as variantes do Pascal, mas certamente no Free Pascal); useClrScr
para pular para o canto superior esquerdo; substituir queif
com uma única expressão:X:=X*Ord(X<11)+1
. pastebin.com/FfaixkESconst X:Word=1;P='hello world';
e issoconst X:Word=1;P='hello world';
era possível. Eu aprendi Pascal no Turbo Pascal 7, que pode não ser compatível com isso. E esqueci completamenteupcase
. Muito obrigado!C
12011010496 bytesVersão ungolfed
@ Patk Obrigado por salvar alguns bytes, ótima idéia. :)
@Pakk @KarlNapf Obrigado pessoal por suas contribuições.
ainda pode ser encurtado !? :)
fonte
-=
e+=
. Além disso, uma variável de ponteiro pode salvar o,[]
mas não tenho certeza.char *j,s[]="hello world";
para salvar mais alguns caracteres.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 bytesSolução sem usar strings e
capitalize()
, byte count como está:E uma variante um pouco mais longa (191 caracteres) sem redefinição de maiúsculas e minúsculas:
fonte
C ++,
88125 bytesVersão não destruída:
Compilado com TDM-GCC em uma máquina Windows 10 com Dev-C ++.
Editar: esqueci as inclusões na minha primeira versão.
fonte
for
loop, movendo o retorno de carro para o início da string. Eu também ajudarei: O fazerfor(int c=1;;c++)
poupará 1 byte.for(int c=1;;)
ea[c++]-=32;
salvar outro byte.