Imagine o seguinte relógio de 24 horas que pode ser controlado por teclas de seta:
╔══╗ ┌──┐
║00║:│00│
╚══╝ └──┘
HH mm
Pressionar a seta para cima duas vezes ( ↑↑
) aumentará a entrada de hora focada no momento:
╔══╗ ┌──┐
║02║:│00│
╚══╝ └──┘
HH mm
Pressionar a seta para a direita ( →
) focalizará a outra entrada.
┌──┐ ╔══╗
│02│:║00║
└──┘ ╚══╝
HH mm
Pressionar a seta para baixo três vezes ( ↓↓↓
) agora diminuirá esta entrada.
┌──┐ ╔══╗
│02│:║57║
└──┘ ╚══╝
HH mm
Em breve:
- A seta para cima (
↑
) aumentará a entrada atualmente ativa. - A seta para baixo (
↓
) diminuirá a entrada ativa. - A seta direita (
→
) moverá o foco para a entrada direita. - A seta esquerda (
←
) moverá o foco para a entrada esquerda. - O movimento para cima e para baixo girará como esperado para uma entrada de tempo.
- Os movimentos esquerdo e direito não circulam.
O desafio
O relógio começa 00:00
com a entrada da hora ativa (consulte o primeiro esquema). Dada uma lista de comandos de entrada, produza a hora resultante em HH:mm
formato.
A entrada pode ser uma sequência ou uma lista (ou o idioma equivalente), onde as diferentes direções de entrada podem ser uma das opções abaixo:
↑↓←→
udlr
^v<>
- a tecla de seta real pressiona se o seu programa tiver uma GUI
Aplicam-se brechas padrão.
Casos de teste
↑↑→↓↓↓ = 02:57
↓→↑←↑→↓ = 00:00
↓→→↓ = 23:59
←←←←→↑ = 00:01
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓→↓ = 23:59
0123
) facilitaria muito o desafio em determinados idiomas, sem beneficiar outros.Respostas:
HTML no Google Chrome 67 em chinês (simplificado), 39 bytes
O Chrome mostra diferentes componentes da interface do usuário em um idioma diferente. Mesmo uma entrada de tempo simples: AM / PM será mostrado se você estiver usando o inglês (EUA). Se você quiser testar isso, altere o idioma do seu Chrome. Não entenda como alterá-lo novamente.
fonte
AM/PM
para mimC (gcc) ,
117107 bytesExperimente online!
fonte
t,i,m[8];e(char*_){for(*m=i=2[m]=0;t=*_++;t<63?i=t%4:(i[m]+=t&8?1:119));printf("%02d:%02d",*m%24,2[m]%60);}
Experimente on-line!Stax ,
36353332 bytesExecute e depure
Usos
lrud
.Explicação:
fonte
Python 2 , 105 bytes
Experimente online!
fonte
JavaScript (Node.js) , 103 bytes
Recebe a entrada como uma string, usando
udlr
.Experimente online!
fonte
C # (.NET Core) ,
149132 bytesExperimente online!
Usando
^v<>
.Este me fez perceber que o operador de módulo em C # não funciona como esperado, porque em C #
-1 % 60 = -1
, então eu preciso fazer essa operação estranha no final.fonte
Lua (estrutura love2d),
311308 bytesVersão sem migalhas:
Provavelmente ainda não é 100% fácil de ler, porque todos os ifs são trocados com uma declaração trinária (..e ..ou) :)
se iniciado em um main.lua com amor, ele abrirá uma janela e você poderá pressionar as teclas de seta para alterar os números
fonte
MATL ,
575655 bytesExperimente online!
Representa horas e minutos usando números complexos, com a parte real sendo horas e a parte imaginária da parte.
Com comentários:
fonte
PHP ,
145134133 bytes(-11 bytes por mais golfe)
(-1 byte usando o método de loop de Davіd )
Para executá-lo:
Exemplo:
Ou Experimente online!
Notas:
error_reporting=0
opção é usada para não emitir avisos.u d l r
fonte
JavaScript,
104103 bytesRecebe a entrada como uma matriz de caracteres, usando
<>^v
.Experimente online
fonte
Haskell, 236 bytes
f
é a função principal e tem o tipoString -> String
:Essencialmente
u
ev
são funções mutuamente recursivas do tipoInteger -> Integer -> String -> String
. Eles pegam a hora, o minuto e uma lista de caracteres no conjunto{v,^,<,>}
e retornam a sequência de horas.u
age como se a discagem horária estivesse destacada, chamando recursivamenteu
se o cabeçalho da lista está{v,^}
ev
se o cabeçalho da lista está{<,>}
.v
é semelhante, mas para a discagem por minuto.Tudo o resto é apenas salvar personagens.
fonte
Lua , 132 bytes
Experimente online!
Explicação
Esta é uma função anônima (uma maneira de usá-la é mostrada no link).
fonte
HH:mm
formato, em vez de em uma tabelaJava 8, 121 bytes
Resposta C de Port of Jonathan Frech . Aceita . Experimente online aqui .
^v<>
fonte
Gelatina , 36 bytes
Eu acredito que
O%5;4ṣ3œṡ€4Z%3’§§%"“ð<‘DŻ€ṫ€-j”:
deve funcionar para 32, masœṡ
atualmente parece ter um bug .Um programa completo que imprime o resultado em STDOUT (como um link monádico, na verdade, ele retorna uma lista mista de números inteiros (embora com apenas um dígito) e caracteres (o
:
).Usa a
udlr
opção para entrada.Experimente online!Ou veja uma suíte de testes .
Quão?
fonte
APL (Dyalog Classic) ,
9784 bytesExperimente online!
Requer
⎕IO←1
fonte
QBasic , 229 bytes
Um script que recebe entrada como pressionamentos de tecla e sai para o console.
Nota: o terminal
"
está incluído apenas para realçar a sintaxe e não contribui para o bytecountComentado
fonte
(m+y)
?m
por alguns minutos por algum motivo ... Vejo que sua versão comentada é mais legível.Powershell,
109103 bytes-6 bytes graças AdmBorkBork
Script de teste:
Saída:
Explicação
A idéia básica é usar um
[hashtable]
, quekeys
são comandos de controle evalues
são blocos de script. O código executa o scriptblock para cada comando a partir de argumentos.fonte
$i=0
lançando seu índice de matriz como$t[+$i]
para salvar alguns bytes. Experimente online!Perl 6 ,
101 91 8986 bytesExperimente online!
Bloco de código anônimo que recebe uma sequência de
uldr
caracteres e retorna no formato especificadofonte
perl -F // -E, 72 bytes
fonte
Python, 120 bytes
fonte
ld
ourru
causasi
para deixar o intervalo (0,1) eo[i]
é acessado depois?unput()
. A partir dos requisitos, imaginei que as ações L e R nunca ocorreriam (isto é, nãoLL
)lll
não é o mesmo quer
. Tendoll
ourr
é uma entrada válida, também está nos casos de teste, veja o terceiro por exemplo.23:59
. Experimente online!Haskell , 186 bytes
Experimente online!
fonte
R,
368355 bytesDefinitivamente não é a melhor abordagem, mas funciona.
Funcionalidade: Execute a função, digite cada letra para (in / de) amassar ou mover para a esquerda / direita, digitando "s" termina o "jogo". O problema é que ele aceita uma e apenas uma letra de cada vez.
-13 bytes Consolidou alguns valores em uma linha, substituiu T como F em vez de usar quebra, encontrou vários espaços para eliminar e uma sequência armazenada em uma variável
Também estou editando um formato alternativo para aceitar uma string R e / ou vetor, que será publicada na próxima semana.
fonte
SmileBASIC, 123 bytes
BUTTON()
retorna um número inteiro em que cada bit representa um botãoBUTTON(2)
retorna apenas os botões que foram pressionados (não estão sendo mantidos)WAIT
é necessário porqueBUTTON
somente é atualizada uma vez por quadro (1/60 de segundo). Caso contrário, o mesmo pressionar o botão seria detectado várias vezes.Definitivamente, isso pode ser mais curto
fonte
05AB1E ,
3837 bytesUsos
udlr
as instruções, mas também pode ser usado^v<>
para a mesma contagem de bytes (os caracteres↑↓←→
não fazem parte da página de código do 05AB1E, portanto, usá-los aumentaria muito a contagem de bytes, pois a codificação deveria ser alterada para ASCII).Experimente online ou verifique todos os casos de teste .
Explicação:
Veja este 05AB1E ponta do meu (seção Como comprimir grandes inteiros? ) Para entender por que
Ž9¦
é2460
.fonte