Raffaele Cecco é um programador que produziu alguns dos melhores videogames para o computador ZX Spectrum no final dos anos 80. Entre outros, ele desenvolveu o altamente aclamado Cybernoid e Exolon .
Raffaele completará 50 anos em 10 de maio de 2017 . Esse desafio é uma pequena homenagem a ele, pelas horas felizes que muitos de nós passamos jogando nesses jogos fantásticos e pela motivação que eles trouxeram.
O desafio
O objetivo é produzir uma marca de seleção retangular inspirada na tela do menu principal do Cybernoid , mas na arte ASCII.
Especificamente, a sequência "Happy birthday Raffaele Cecco "
(observe o espaço final) será mostrada girando ao longo das bordas de um retângulo 12 × 5, com um tempo de pausa constante entre os instantâneos.
Por exemplo, supondo que o texto seja exibido no sentido horário e girado no sentido anti-horário (veja as opções abaixo), aqui estão três instantâneos consecutivos da marca de seleção retangular:
Happy birthd
a
o y
c
ceC eleaffaR
então
appy birthda
H y
o R
cceC eleaffa
então
ppy birthday
a
H R
a
occeC eleaff
e assim por diante.
Regras
Nenhuma entrada será aceita. A saída será através de STDOUT ou equivalente, ou em uma janela gráfica.
A saída deve realmente representar o texto girando; isto é, cada novo instantâneo deve substituir o anterior para dar a impressão de movimento. Isso pode ser feito de qualquer maneira, por exemplo, escrevendo o número apropriado de novas linhas para limpar efetivamente a tela. É aceitável se isso for válido apenas para um determinado tamanho de tela; basta especificá-lo na resposta.
As seguintes opções são aceitas:
- O texto pode ser exibido no sentido horário ou anti-horário e pode ser girado no sentido horário ou anti-horário (os exemplos de instantâneos acima pressupõem exibição no sentido horário e rotação no sentido anti-horário).
- A rotação deve continuar ciclicamente em um loop infinito (até que o programa seja interrompido) e pode iniciar em qualquer fase.
- O tempo de pausa entre os instantâneos deve ser aproximadamente constante, mas pode ser escolhido livremente entre 0,1 e 1 s. Uma pausa inicial antes de exibir o primeiro instantâneo é aceitável.
- As letras podem ser maiúsculas, minúsculas ou mistas (como no exemplo acima).
- O espaço em branco à esquerda ou à direita é permitido.
Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
Se possível, forneça um arquivo gif mostrando a saída ou um link para testar o programa.
O menor código em bytes vence.
Respostas:
Geléia ,
7465 bytesVersão do Windows em execução em um console cp-65001 de 6 linhas de altura.
Há uma pausa de meio segundo (mais avaliação) entre as iterações:
Quão?
fonte
HTML + ES6, 200 bytes
fonte
ZX Spectrum BASIC, 187 bytes
Irritado que Philip tenha me vencido por alguns minutos :-) Números como
\{15}
são códigos de controle não imprimíveis - compile com zmakebas se você quiser mexer. Observe que o retângulo completo não é impresso imediatamente, mas se encaixa após os primeiros quadros.Experimente aqui (versão emulada em JS on-line, pressione Enter para iniciar) ... http://jsspeccy.zxdemo.org/cecco/
Você também pode salvar quatro bytes limpando a tela entre os quadros em vez de fazer uma PRINT AT, mas é muito instável para valer a pena ...
fonte
V,
757170 bytes4 bytes salvos graças a @DJMcMayhem
Aqui está um link do TIO, mas observe que isso não funcionará no TIO porque o programa faz um loop infinito. Experimente online!
Como esse código contém não imprimíveis, aqui está um hexdump.
O tempo de sono é de 500 milissegundos.
fonte
H|
->{
.<C-v>êx
->dê
, e5L
->}
±± a
,o° y
ec±±<space>
5L
=>}
.ZX Spectrum BASIC, 274 bytes
Bem, alguém tinha que fazer isso. Os pedantes podem querer desqualificar isso por ser muito lento e não ter uma pausa entre as animações, mas estou reivindicando um caso especial aqui :-)
Também não é muito golfista. 274 bytes é o número de bytes salvos pelo Spectrum em fita ao salvar este programa.
fonte
SGN PI
para1
(poupa 5 bytes) mas você esqueceuNOT PI
de0
eVAL
para as outras constantes ...NOT PI
Eu apenas errei. Deliberadamente não fezVAL
como era lento o suficiente, eVAL
é terrivelmente lento.SVG (HTML5), 267 bytes
Bem, é retangular, e é uma marquise, e é texto ASCII ...
fonte
PHP, 184 bytes
imprime 39 novas linhas para limpar a tela; corra com
-nr
.A pausa real é de 1 segundo; mas eu acelerei o gif.
destroçado
fonte
Python 2,
230184 bytesExperimente em repl.it
fonte
Python 3 , 160 bytes
Experimente online! (Sem animação)
fonte
Python 2,
218200190181176 bytes-18 bytes removendo a
str
formatação-10 bytes, graças às sugestões @Uriel e @ElPedro
-9 bytes removendo a indexação negativa
-5 bytes armazenando invertido
f
comov
ewhile
condições condiçõesrepl.it
fonte
while 1:
eprint
e substitua o próximo;
com uma nova linha (real). Tambémf='H..
. Tambémf[:1]
é verdadef[0]
.time.sleep(1)
levá-lo abaixo de 200?Ruby + GNU Core Utils, 136 bytes
fonte
Python 2,
182179173160 bytesExperimente em repl.it
Como o TIO não funciona, minha primeira tentativa de usar repl.it
Editar uso de um loop "perda de tempo" para contar até 1000000 fornece um atraso consistente entre 0,1 e 1s na minha máquina e no repl.it e salva a importação
time
. Acho que se você o executou em um computador antigo 286 com 64 MB de RAM, pode demorar mais de um segundo, mas tenho certeza de que isso não acontecerá. Se isso acontecer, basta reduzir os 1000000 e salvar alguns bytes :-)Edite 2 -6 para lembrar que as compreensões da lista no Python 2 vazam o último valor de
s
para que eu possa usá-lo mais tarde e também para lembrar que praticamente qualquer coisa que não seja 0 e "" é verdadeira. Erros ou recursos? Não se importe. Ele me salvou 6 bytes :-)Editar 3 Outros 13 reverenciando a rotação e usando uma compreensão de lista para as linhas do meio dentro da junção e alterando
3000000
para40**4
. Obrigado a @FelixDombek pela última. Tive que perder o meu truque de compreensão da lista.fonte
999999
vez de1000000
por um byte: VCódigo da máquina ZX81 Z80,
158130 bytesOK, então ele possui muitos bytes até ser montado, mas depois cai para 130 bytes. Não tem certeza se isso quebra alguma regra? É o meu primeiro post e apenas como convidado.
O programa usa 'força bruta' para exibir a mensagem em vez do uso inteligente da função, como pode ser visto pelo modo como possui blocos de código separados para a linha superior, a direita direita, a linha inferior e a esquerda. A animação é obtida girando o conteúdo da mensagem e exibindo-a após um pequeno atraso, que deve ser exatamente de 0,2 segundos, enquanto aguarda 10 quadros em uma taxa de 50 (de qualquer maneira para o Zeddys do Reino Unido).
Eu tenho que dar crédito à kmurta pelo conceito de girar a mensagem para obter a animação - que economizou 28 bytes !!!
Desculpe, não posso postar um link para ele em execução, pois é um programa compilado no formato .P para o EightyOne (ou outros emuladores) ou para um Zeddy real, se você tiver um ZXPand ou semelhante para carregá-lo.
O arquivo .P pode ser baixado em http://www.sinclairzxworld.com/viewtopic.php?f=11&t=2376&p=24988#p24988
fonte