Bem, o Brexit aconteceu . E o Sky News, sendo os gênios que são, decidiu criar uma contagem regressiva ao lado de um ônibus.
Seu trabalho é fazer algo semelhante. O Reino Unido sai da UE em 31 de março de 2019 e você precisa criar uma contagem regressiva digital para isso que muda a cada segundo (com um desvio de 0,05 segundo permitido).
Entrada
Seu programa não deve receber absolutamente nenhuma entrada. Está proibido!
Saída
Ele deve exibir o tempo até o Brexit no formato ddd:hh:mm:ss
. Novas linhas iniciais e finais são permitidas, mas a exibição deve permanecer no mesmo local a cada vez. Deve parecer que está realmente diminuindo no lugar. Como apontado por @AnthonyPham, isso não significa imprimir novas linhas suficientes para "limpar" a tela, isso significa que você deve realmente limpar a tela.
Uma saída como esta não é permitida:
100:20:10:05
100:20:10:04
Nem isso
100:20:10:05
*A thousand newlines*
100:20:10:04
como eles estão em mais de uma linha.
Você não precisa se preocupar com o Brexit. Seu programa só precisa funcionar até 31/03/2019
Regras
- As brechas padrão não são permitidas
- Este é o código-golfe, pelo que o código mais curto em bytes vence.
- Mensagens de erro (embora eu não consiga pensar como) são proibidas
- O código deve poder ser executado em 2 anos (quando o Reino Unido deixar a UE) e deve exibir a hora real e não iniciar novamente a partir de 730 (veja abaixo)
Regra de contagem regressiva
A contagem regressiva não deve ser codificada e deve poder ser executada a qualquer momento antes do Brexit terminar e ainda assim produzir o resultado correto. Quando um novo dia é iniciado, a hora deve seguir o formato abaixo
712:00:00:01
712:00:00:00
711:23:59:59
Deixe-me dizer novamente, a data em que o Brexit termina é 31/03/2019 à meia-noite por conveniência (31: 3: 19 00:00:00 ou 31: 3: 2019 00:00:00 ou qualquer outro formato que você quiser)
NB: Acho que tenho tudo, mas não o publiquei na Sandbox, caso contrário, o tempo poderia ter mudado. Sinta-se à vontade para postar sugestões de melhorias, pois não é perfeito.
1000
se eu quiser mudar uma vez por segundo. ObrigadoRespostas:
JavaScript,
134129113 bytesEditar: salvou 2 bytes graças a @Shaggy. Economizou 11 bytes graças a @ l4m2.
fonte
<a id=0>
? Ou algo assim?document.body.innerHTML
em vez deo.innerHTML
<tt>
.PowerShell,
70635553 bytesCitações duplas excluídas, fácil -2 graças a @Joey
Executar isso com suspensão adiciona 8 bytes, mas a entrada é quase invisível se for executada sem eles, versão (63 bytes) com suspensão:
for()
é um loop infinito e dentro desse loop ..cls
para limpar a telaget
31/3/19
como umDateTime
objeto e-
a data atual a partir dele, para fornecer o tempo restante e, em seguida,.ToString()
(|% T*
) com o formato correto.isso exibirá um tempo negativo após o brexit.
fonte
T*
funciona. Eu não estou familiarizado com isso.%
foreach pega oT
objeto oString e aceita a próxima string como argumento. em relação ao formato de data e hora, por que não é executado nas máquinas dos EUA? Eu pensei que odd
etc eram insensíveis à cultura.3/31/19
. Também funcionaria em2019-03-31
qualquer lugar, mas isso custa alguns bytes.31Mar19
vez de31/3/19
que esperamos corrigi-lo?Excel VBA,
918482 bytesEconomizou 7 bytes graças a JoeMalpass, indicando que o Excel vê datas como números.
Economizou 2 bytes graças a JoeMalpass
A saída é para célula
A1
na planilha ativa do Excel.fonte
("2019-3-31")
com(43555)
. Quando tento executar este no Excel no entanto, ele congela depois de cerca de 5-6 segundos ...Now
funciona sem a()
também ...Python 3.6, 146 bytes
fonte
C #,
173172156 156150127 bytesGuardou 16 bytes graças a @Bob Guardou 6 bytes graças a @ Søren D. Ptæus
Versão formatada:
fonte
(TimeSpan)0
? No telefone, não é possível testar no momento. Você ainda pode deixar o campo limpo, pois o retorno de carro cuida disso: coloca o cursor de volta no início da linha.Clear
! Eu tolo. E não é possível converterint
paraTimeSpan
eu já tentei esse.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 bytesGraças a @Fels pela referência
Math
, @dgrcode pela referênciaconsole
Sem golfe
fonte
g=Math;
Math
ainda pode salvar 2 bytes, certo?var
. Além disso, escolha nomes mais curtos para variáveis, como emh
vez dehours
ou emm
vez deminutes
. Provavelmente, issoc=console
salvará mais alguns bytes. Também em1e3
vez de1000
PHP, 84 bytes
Bastante direto. 1553990400 é o carimbo de data e hora de 31/03/2019 00:00:00 no UTC. Faz um loop infinito, usando DateTime-> diff () -> format () para gerar quanto tempo resta. Após o Brexit, ele começará a contar a partir de 0.
Versão comentada / mais legível:
fonte
<?
tag aqui? 2. Acho que seus parênteses estão errados, agora você está chamando->diff
o eco, e não o objeto DateTime. 3. eco funciona sem parênteses de qualquer maneira. 4. Mesmo depois de consertar isso, isso não funciona para mim, mas eu sou novo no golfe, e isso pode ser apenas eu ser um idiota.CJam,
69625957 bytesEconomizou 7 bytes convertendo para o formato da hora de maneira diferente
Economizou 3 bytes graças às sugestões de Martin Ender
2 bytes salvos usando um retorno de carro em vez de backspaces
Não pode ser executado no TIO por razões óbvias.
Ele reescreve a exibição constantemente em um loop infinito, para que o texto entre e saia (pelo menos no meu console), embora na verdade só atualize o tempo uma vez por segundo.
Esta versão de 70 bytes é impressa apenas uma vez por segundo:
Explicação
fonte
Ab
pors
e salvar um byte executando1e3/
primeiro e depois divida na ordem oposta60md\60md\24md\]W%
.{60md\}2*
salva outro.Python 3.5 (118 bytes)
fonte
C # 6, 149 bytes
Agradecemos a Bob por salvar 57 bytes!
Programa não destruído:
C #,
210206159 bytesAgradecemos a Bob por salvar outros 47 bytes!
Obrigado a Martin Smith por economizar 4 bytes!
Programa não destruído:
fonte
new DateTime(2019,3,31)
é mais curto.Console.Clear
e, em vez preceder"\r"
para a cadeia, por exemplo"\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
é equivalente a `String.Format (" \ r {0: d \\: hh \\: mm \\: ss} ", xa)` é equivalente a$@"{x-a:d\:hh\:mm\:ss}"
(string mais curta e interpolada no C # 6.0). Se você fizer isso, então você pode reduzir ainda mais o completo"\r"+$@"{x-a:d\:hh\:mm\:ss}"
em$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C, 104 bytes
Demolir
Confia no
time
número de segundos retornados desde 01/01/1970, que é o meu caso (usando Clang / GCC no macOS) e deve ser o caso da maioria das coisas do UNIX.Usa seqüências de escape do terminal
bashpara mover o cursor (<esc>[1A
move o cursor para cima 1 linha). Seria melhor poder usar simplesmente\r
, masprintf
não liberará até que ela veja uma nova linha, e liberá-la manualmente leva muito mais.Provavelmente a contagem regressiva mais intensiva da CPU que eu já vi. É executado em um loop quente para garantir que seja sempre o mais preciso possível. Se executado após o prazo, produzirá algumas coisas bem estranhas (negativos em todos os lugares!)
fonte
main(x)
não é uma forma válida de main, int implícito foi removido do idioma. Acredito que a versão mínima e segura sejaint main(){}
.AHK , 145 bytes
Essa não é a resposta mais curta, mas o resultado dá uma sensação muito agradável de desgraça, eu acho. Originalmente, tentei enviar as teclas pressionadas Ctrl+ Aseguidas de DELe, em qualquer que fosse a hora, mas a taxa de atualização era muito lenta e destruiria qualquer ambiente em que você estivesse. Em vez disso, fui com a GUI. Acabou por demorar menos bytes para destruir completamente a janela e recriá-la do que para atualizar o controle repetidamente, então fui com isso. É um efeito legal.
fonte
C #,
128127 bytesCódigo não destruído:
Eu não teria descoberto o truque sem a ajuda das outras respostas C # aqui.
Para quem procura mais aprimoramentos, também pode colocar a expressão Write () dentro do loop for. Parece que eu deveria ser capaz de salvar um byte de alguma forma aqui, porque isso me poupa ponto e vírgula para essa declaração, mas funciona com o mesmo número porque você não pode ter um corpo totalmente vazio:
fonte
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
preenchimento dos zeros parece melhor do que o método dos dois espaços.Ruby (83 bytes)
Ungolfed
Basicamente, um dos envios do Python, com algumas melhorias. Nós apenas emitimos um "\ r" para iniciar o texto antes de renderizar novamente. E para o formato de string de
"%03d:%02d:%02d:%02d"
, realmente não nos importamos com a largura do primeiro especificador ... então podemos fazê-lo"%02d"*4
e emitir um backspace e um espaço para limpar os dois pontos extras desnecessários.Além disso, eu encontrei um dois caracteres mais curto
print
:$><<
.$>
é um atalho global para$defout
, que é o fluxo de saída paraprint
eprintf
e padrões paraSTDOUT
.IO#<<
grava o lado direito dele no fluxo. Como esses dois caracteres são mais curtos? Bem, agora posso omitir o espaço que antecedeu o parêntese envolvendo a sequência de formatação.Neste ponto, eu realmente acho que não há como reduzir ainda mais esse programa no Ruby.
Edit: Eu estava errado. Em vez do primeiro
Time.new(2019,3,31)
, podemos usar apenas o tempo UNIX cru:1553990400
.Edit 2: Tentei brincar de fatorar minutos e dividir o carimbo de data e hora do UNIX por essa constante, mas na verdade não acaba salvando bytes. :(
Editar 3: Acontece que o cache
h=3600
realmente me machucou por dois bytes. Ops.Editar 4: salvou 3 bytes graças a @EricDuminill. Ele usou carros alegóricos, mas os racionais funcionam sem perda de precisão!
Editar 5:
Array#*
como um apelido paraArray#join
, com a?
sintaxe Ruby para caracteres individuais!fonte
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
segundos podem ser desativados em 1, devido ao arredondamento.to_r
vez deto_f
preservar a precisão..to_r
vez de.to_f
+"\r"
para a direita da matriz. Isso permite que você use em['%02d']*4*?:
vez de'%02d:'*4+"\b "
perder os parênteses, o que lhe dá um byte. Salve mais um byte escrevendo em+?\r
vez de+"\r"
.JavaScript + HTML, 136 + 7 = 143 bytes
fonte
C #, 142 bytes
Programa não destruído:
fonte
ToString()
bytes e, em vez construir a formatação para o método write (), ou talvez uma seqüência interpoladagoto
ideia básica .Data do Bash + GNU, 128 bytes
2 bytes eliminados graças a @muru e 2 bytes anteriores graças a @This Guy.
Ungolfed
fonte
while[1]
:?line 1: [1]: command not found
erro. Os espaços são obrigatórios, parece :-(3600
a uma variável para salvar 2 bytes? Você também pode ser capaz de mudarB=3600;A=86400
paraB=3600;A=24*B
um outro byte?A=$[24*B]
de modo não é possível lá emboraC=:%02d;printf "%03d$C$C$C\r"
salvar um byte? E mova as atribuições para A e B no contexto aritmético:D=$[B=3600,A=24*B,1553990400-`date +%s`]
salvar outra?MATL, 45 bytes
O TIO aparentemente não suporta a limpeza da saída, mas felizmente o MATL Online sim !
Com mais 2 bytes, uma versão um pouco mais compatível com a CPU que faz um
pause
(suspensão) a cada segundo:Experimente no MATL Online
737515
é "31 de março de 2019" representou o formato de época padrão do MATLAB - número de dias a partir de 0 de janeiro de 0000, incluindo opcionalmente uma parte fracionária para representar a hora do dia. (Tentei encurtar isso calculando-o de alguma forma, mas seus únicos fatores são 5 e outro número de seis dígitos (147503), e não consegui descobrir uma maneira de fazê-lo em menos de 6 bytes.)fonte
PHP, 64 bytes
Isso vai contar exatamente até
0:00:00:00
e depois interromper / sair. Corra com-r
.-2 bytes se não precisar imprimir o 0.
fonte
RPL,
8378 bytesSupondo que o HP48, ou similar, esteja configurado com data e hora corretas (Reino Unido), formato de data em mm / dd e formato de 24 horas:
Fiquei surpreso ao poder salvar 2 bytes removendo espaços ao redor
":"
. 1.1 é a data válida mais curta, posteriormente descartadaSUB
. Cuidado com os emuladores, pois o tempo pode correr mais rápido ou mais devagar (ou nem um pouco) do que o relógio de parede. Com um HP real, você pode interromper esse programa pressionando a tecla LIGAR… ou esperar as pilhas vazias.fonte
PHP,
1029590 bytesEconomizou 7 bytes graças a @TheLethalCoder e por não fatorar
Salvo outros 5 bytes concatenando
Este é o meu primeiro golfe, então provavelmente estou perdendo alguns truques, mas aqui está você.
Quanto à resposta PHP do @chocochaos que, de outra forma, superaria isso, acredito que seja falha por razões que expliquei em meus comentários, mas como sou nova aqui, posso estar errada.Ou eu sou apenas um novato :)fonte
$a
uma vez para que também possa usar o número no lugar. Eu não estou muito familiarizado com php, mas parece que poderia haver mais melhoriasflawed because of reasons stated in the comments
? Se você quer dizer os comentários na resposta deles, você é o único que comentou.<?=
tag de abertura e soltando o eco, atribuindo$b
o local em que você a usou pela primeira vez. Além disso, você pode salvar 3 bytes usando em^0
vez defloor
. É bit a bit ou envolve uma conversão para int, é a maneira mais curta de converter para int que eu já vi.AWK , 78 bytes
Experimente online!
Demorou mais para eu perceber que podia pré-calcular o tempo do fim. Às vezes vale a pena chegar um pouco tarde para o jogo e obter idéias de outras pessoas.
Para sua informação, o link do TIO não funciona muito bem, pois não é implementado
\r
corretamente.fonte
F #, 142 bytes
Eu cresci na Irlanda a cerca de meio quilômetro da fronteira. Além de um sinal de "Bem-vindo a Fermanagh" e as marcações da estrada mudando, você não saberia que havia entrado em outro país. Costumava atravessá-lo duas vezes a caminho da escola.
fonte
c, gcc 114 bytes
Nada omitido, programa completo. O programa é compilado no gcc no Ubuntu. A contagem regressiva não mostrará uma longa trilha de instruções de impressão devido à chamada do sistema para limpar e parar quando a contagem regressiva atingir 0 segundos.
UnGolfed
fonte