Sua tarefa é criar um programa que imite o Big Ben (Twitter) .
Tarefa
Sempre que uma nova hora começa (de acordo com a hora local do seu computador ou com o UTC), é necessário gerar tempos BONG
repetidos hour
(com um espaço entre as palavras). Por exemplo, quando são 3 horas, você precisa emitir BONG BONG BONG
. O formato da hora segue o formato das 12 horas, ou seja, depois das 12 horas, temos 1 e não 13. O programa / função deve ser executado para sempre.
Exemplo:
não produza coisas dentro dos colchetes
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
Regras
- Cada série de
BONG
s deve ser separada por uma nova linha - Novas linhas iniciais / finais são permitidas
- No entanto, espaços à esquerda / à direita não são permitidos
- O envio deve ser executado para sempre
- Sua saída pode ser impressa em ± 3 segundos desde o início da hora
- Você não pode presumir que o programa seja executado a qualquer hora específica
Isso é código-golfe , então o programa com o menor número de bytes vence!
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
fonte
fonte
TIMESKEW="60 1"
faz minutos fluir como segundos.Respostas:
05AB1E , 43 bytes
Experimente online! (lol, isso não funcionará, o tempo limite será excedido em 60 segundos. Faça o download do interpretador 05AB1E para isso)
Explicação:
Demorei um pouco para jogar golfe! Talvez eu consiga jogar um pouco mais, mas é melhor do
*><>
que isso, então é legal :)Versão rápida:
Esperará um segundo no início e um segundo entre os BONGs
fonte
Bater,
71,70, 69 bytesEDITAR% S:
Golfe
Explicado
Versão de teste
Funciona com minutos em vez de horas
fonte
yes BONG|sed 12q
*> <> ,
484744 bytesExperimente aqui! ( ou esta versão que faz isso a cada minuto para teste )
Isso gera um número de
BONG
s separados por espaços com base em que hora é (e 13 é 1, etc). Não há espaço à direita após a finalBONG
e há uma nova linha à direita.Tecnicamente, isso não dura para sempre (mas basicamente). Ele vaza ~ 28 bytes por dia (ignorando a sobrecarga do intérprete ...). Levaria ~ 105062 anos para vazar 1GiB.
Aproximando-se da sobrecarga do intérprete, a pilha é apenas uma fatia de
float64
s no intérprete Golang. Então, eu simplesmente28*8
criei 224 bytes por dia. Dividi esse número pelo número de bytes em um gibibyte (1073741824) e 365 para aproximar que levaria 13132,85 anos para vazar 1 GiB.Nota sobre os intérpretes
O intérprete online está em Javascript. A página deve estar aberta e visível para verificar a hora atual e emitir os BONGs. O intérprete Golang não tem essa limitação.
Explicação
fonte
JavaScript (ES6),
9993 bytesIsso usa a hora UTC (que se alinha com a coisa real). Devido à natureza não testável do código, você pode tentar o seguinte, que faz a mesma coisa, mas a cada 60 segundos:
Aqui está uma versão bônus de 99 bytes que usa a hora local:
fonte
alert
é a cada minuto para mim (mas o número deBONG
s está correto), mas o programa deve funcionar apenas a cada hora #JavaScript (ES6),
125123117115 bytesObrigado a @ Flp.Tkc por salvar 5 bytes!
Agradecemos a @BenAston por salvar mais 2 bytes!
Snack Snippet
fonte
Lote, 142 bytes
Como o arquivo é executado como um loop infinito, inicio com um atraso de 1s, pois preciso de um após os bongos, e isso salva os ciclos da CPU. Ele
>nul
é posicionado com cuidado para salvar um byte (1>nul
faria com que o 1 fosse consumido pelo redirecionamento). Em seguida, fazemos um loop até que os minutos e os segundos sejam zero. Os bongos são construídos utilizando o módulo de hora negativo 12 e solicitando os últimosh
caracteres de uma sequência de 12 caracteres. Quandoh
é zero, isso nos dá a cadeia inteira, portanto, 12 bongos. Basta substituir os caracteres pela palavraBONG
. Quando executado, é algo parecido com isto (observe que a imagem não se repete, portanto, você precisará forçar o recarregamento para ver a animação novamente):fonte
Bash + Linux crontab, 90
Eu esperava que isso fosse mais curto do que as outras respostas do shell. Ainda assim, acho que é uma abordagem interessante:
O script é executado uma vez, preenche o crontab e sai. No entanto, a saída dos cronjobs é enviada para o terminal a partir do qual o script foi executado. Eu acho que isso satisfaz o envio deve ser executado para sempre requisito.
Aviso - isso limpará todas as entradas existentes do crontab, portanto, verifique se você possui as cópias de segurança existentes.
Isso funciona no Ubuntu 16.04, que está usando o Vixie
cron
por padrão.fonte
BONG
que o necessário.cron
você está usando?/proc/<PID>/fd/<N>
.Ruby,
11299 BytesVersão antiga
Obrigado a QPaysTaxes pelas dicas
fonte
sleep(60)
aconteceCheddar v1.0.5, 162 bytes
O Cheddar não possui leitor de tempo / leitor de saída cmd, então eu tive que improvisar!
Golfe:
Ungolfed:
Explicação:
Devido à biblioteca padrão limitada do Cheddar, tive que usar o cmd para gerar o tempo. Fiz isso salvando a saída de "time / t", que imprime a hora no formato de 12 horas, em um arquivo chamado "c". IO.read retorna um buffer que eu converti em uma string e dividi por ":", garantindo que a hora esteja sempre no índice zero. Salvei toda a operação em uma expressão lambda que me salvou 44 bytes. Depois desse ponto, entra na lógica de "se a hora armazenada não for igual à hora atual, defina a hora anterior como atual e imprima BONG n vezes, apare o espaço à direita".
O cheddar pode não ser a linguagem menos detalhada, mas pode ser divertido encontrar soluções alternativas como essa!
Infelizmente, esta é uma solução apenas para Windows.
Editar 1: salvou dois bytes substituindo "0 <1" na condição for para "1". Não esperava que 1 fosse avaliado como verdadeiro neste idioma!
fonte
Ruby,
8281 bytesA cada segundo, verificamos se é o último segundo da hora e o BONG em conformidade. Provavelmente poderia ser jogado mais com alguns truques sujos, mas não sei muitos. Também funciona de maneira diferente da outra resposta do Ruby.
Um byte economizado graças à cortesia de QPaysTaxes.
fonte
if
?puts
me esqueci disso.Python 2 ,
105106 bytesEditar
Adicionado um byte alterando <para! = Após o feedback de @ pinkfloydx33. Bom lugar.
Testado o máximo possível localmente, mas não funciona no TIO, pois (obviamente) excede o limite de execução de 60 segundos. Por favor, sinta-se livre para testar localmente :-)
btw, perder esse espaço à direita me custou 7 bytes, caso contrário, isso teria sido inferior a 100.
Na ausência de TIO, aqui é emitido após aguardar uma hora. O programa foi iniciado às 15:27 com código de depuração extra para mostrar a hora da impressão (formato de 12 horas).
Bem simples, mas aqui está uma explicação para quem estiver interessado.
fonte
11>0
simh>c
ou estou perdendo alguma coisa?Python
3-1009792 bytesExplicação:
fonte
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
é 93 bytesfrom time import*
, como estaC, 238 bytes
Não tenho certeza se isso funciona corretamente, sou móvel e meu telefone não possui um compilador C. (Funciona apenas em sistemas tipo UNIX)
fonte
f
em vez demain
? Como é que isso deveria funcionar?sh, 66 bytes
Explicado
fonte
%I
por%M
e funcione por minutos.C, 198 bytes
fonte
Javascript ES6 87 bytes
Edit:
new Date/36e5%12|0||12
Código @ETHProductions 'emprestado descaradamente para salvar 6 bytesfonte
R,
104105 bytesA cada segundo, ele deve (deve) testar se estamos no final de uma hora e depois imprimir essa quantidade de
BONG
s.fonte
12:00:01
?Sys.sleep(60)
isso faz com que isso aconteçawhile(1)
porrepeat
.BONG
por 1 segundo, em vez de apenas uma vez. Isso é para garantir que ele verifique apenas uma vez por segundo.JavaScript ES2015,
1009998969488 bytesExplicação:
h
é uma função que obtém a hora do dia com base em 12 horas usando o operador restante (%12
).36e5
é o número de milissegundos em uma hora usando a sintaxe exponencial para salvar caracteres. Onew
operador não exige que parênteses sejam usados com funções se não houver argumentos, portantonew Date
. O JavaScript possui apenas aritmética de ponto flutuante, o|
operador OR bit bit força o número a ser um número inteiro porque os operadores bit a bit JS trabalham com o subconjunto inteiro dos números representados pelo ponto flutuante IEEE 754.A vírgula delineia subexpressões.
p
é inicializado para a hora atual (p=h()
).for(;;)
é usado para verificar repetidamente se algumBONG
s deve ser alertado. A verificação é realizada tão rapidamente quanto o tempo de execução permitir.Se a hora mudou (
h()!=p
), atualizamos pe alertamos osBONG
. O operador AND lógico é usado como uma proteção (se houver um curto-circuitoh()===p
) para determinar se osBONG
s são emitidos.String.prototype.repeat
é novo no ES2015 e salva alguns caracteres usando algo como o ES5Array.prototype.join
.h
retorna zero para múltiplos exatos de 12 (ou seja, 12h, 12h), portanto, alteramos para 12 usando o OR lógicop||12
.Com agradecimentos a Kritixi Lithos e ETHProductions por idéias.
fonte
Excel VBA, 143 bytes
Saídas de código para a janela VBE Immediates
Versão divertida, 143 bytes (não-concorrente)
Embora seja bastante difícil fazer com que o excel entre no BONG, é bastante simples obter o excel para ir
Beep
. ABeep
chamada produz um sinal sonoro, e o código abaixo o utiliza para produzir sinais sonoros indicando a hora, a hora, separada por pausas de 1 segundo.Como acima, esse código faz com que o excel pareça não responder e
:DoEvents
é recomendável adicionar uma chamada ao final da primeira linha, pois melhora a experiência do usuário; no entanto, isso não é necessário para a execução correta do código.Versão Ungolfed
fonte
Beep
ouDoEvents
não funcionem corretamente em máquinas Mac.C # 234 bytes
Não estou planejando ganhar nenhum prêmio aqui, mas uma implementação de C # é obrigatória.
Ungolfed com comentários:
fonte
for(;;)
, altereh=()=>1+(DateTime.Now.Hour-1)%12;
(não observe nenhum espaço em branco) e, em seguida, Enumerable.Repeat torna-se("BONG",t)
(economiza dois ou três) e livre-se de um espaço em branco extra, ou seja,if(...)
observe também que isso imprimirá todos os bongos concatenados, provavelmente usará a economia de bytes para transformar o concat em união com um espaço como seu primeiro argumento.Groovy, 72 bytes
Quão?
Armazene um método para obter o horário atual.
Armazene as horas iniciais.
Embora verdadeiro, se a hora atual não for igual à hora anterior, a hora atual de saída multiplicada por "BONG" para gerar a hora atual dos bongos.
+3 bytes
%12
para bongos não militares.fonte
perl, 60 bytes
Atualizar
Substituído
" "
por$"
, removidoCORE::
, contagem corrigida.Golfe
Isso precisa ser executado com
perl -E
.Observações
x while y
é equivalente awhile(y){x}
(ondex
está uma única instrução), mas não precisa dos colchetes.sleep
é executado pela primeira vez antes de qualquer coisa ser impressa.time
usa UTC. O Big Ben original está no horário de verão (horário de verão britânico, BST) do final de março até o final de outubro.sleep
retorna o número de segundos esperados. Isso sempre será verdade.fonte
-E
sinalizador tem +1 byte (há uma página em algum lugar sobre como medir sinalizadores ...). 2 , não sei como executar isso comoperl -E golf.pl
parece terminar imediatamente.QBIC , 82 bytes
Realmente precisa alterar o token para literais de código (
$
) e implementar um recurso de substring (left$(x,y)
pode ser mais curto).O funcionamento interno:
Atualização (NC):
$
não é mais usada no conjunto de instruções QBICs, portanto agora pode ser usada livremente como código para QBasic sem a necessidade de literais de código. Nesse caso, ele salva 4 bytes, elevando o QBIC a 78 bytes:fonte
SmileBASIC,
7467 bytesProduz grandes quantidades de quebras de linha "à direita";)
Editar: salvou 7 bytes com um melhor algoritmo de 24-> 12 horas.
fonte
PHP, 63 bytes
Eu poderia salvar mais dois bytes com o ASCII estendido. Mas atualmente estou com preguiça de fazer isso.
imprime os BONGs com uma quebra de linha líder precisamente a toda a hora. Corra com
-nr
.fonte
-n
é meio implícito (ignore php.and volte aos valores de configuração padrão);-r
diz ao PHP para executar o código a partir de um parâmetro de linha de comando, e não a partir de um arquivo.C, 152
Legível:
fonte