Você está acorrentado a uma cadeira. Debaixo de você há um enorme vulcão. Um relógio de 12 horas ao seu lado marca sinistramente, e você vê que ele tem fios que vão da parte de trás até uma corrente, o que o leva ao centro da terra. Gravada no relógio está uma nota:
Cada ponteiro do relógio possui um eletrodo. Quando os dois ponteiros do relógio estão na mesma posição, a energia flui e você morre. Ou seja, a menos que você possa me dizer a hora exata em que isso ocorrerá, no minuto mais próximo.
Você tem um computador que conhece todas as linguagens de programação. Você precisa criar o programa mais curto (isto é, código-golfe e brechas padrão são proibidas) que puder e informar ao cientista do mal que horas serão. Seu programa deve receber entrada (em qualquer método), consistindo de hora e minuto. Ele deve retornar a próxima hora e minuto (em qualquer método) que isso ocorra.
De acordo com a página OEIS , os onze tempos de sobreposição são:
00:00:00 plus 0/11 s, 01:05:27 plus 3/11 s,
02:10:54 plus 6/11 s, 03:16:21 plus 9/11 s,
04:21:49 plus 1/11 s, 05:27:16 plus 4/11 s,
06:32:43 plus 7/11 s, 07:38:10 plus 10/11 s,
08:43:38 plus 2/11 s, 09:49:05 plus 5/11 s,
10:54:32 plus 8/11 s.
A próxima vez seria 12:00:00. Os segundos e suas partes fracionárias não são necessários para este desafio. Basta arredondar para o minuto mais próximo.
Casos de teste:
0:00 (Or 12:00) > 1:05
1:00 > 1:05
11:56 > 12:00 (Or 0:00)
6:45 > 7:38
5:00 > 5:27
6:30 > 6:33 (round up)
O programa pode ser uma função ou programa completo. Eu não me importo se você escolher 0:00
ou 12:00
, e ambos são aceitáveis. Boa sorte!
Respostas:
JavaScript (Node.js) ,
5447 bytes (arredondado para o mais próximo)-7 bytes. Obrigado @ user202729
Experimente online!
JavaScript (Node.js) ,
403344 bytes (arredonda para 0)-3 bytes graças a @Arnauld
-4 bytes graças a @Kevin Cruijssen
Explicação
Nota lateral: Tenho certeza de que isso pode ser um problema no golfe por alguém com mais conhecimento em matemática. Eu mal sei somar e multiplicar
Experimente online!
fonte
05:00
deve produzir,05:27
mas gera05:25
, em vez disso, e06:45
deve produzir,07:38
mas produz em seu07:35
lugar. Aqui, talvez, uma sequência de oeis útil: A17818111:56
parece sair em00:05
vez de00:00
(ou12:00
).a=(a+=b>=a*5)%12
pode ser encurtar um pouco, mas eu não sou muito bom nissoMath.round(x)
só0|x+.5
?J , 31 bytes
Experimente online!
A maneira de arredondar um número em J é adicionar
0.5
e usar a palavra (<.
). Leva muitos bytes ...Explicação
12 60&#.
(conversão de base mista) converte de uma matriz de [hora, minuto] para o minuto passado desde 0:00.Observe que, a partir das 0:00, a cada 12/11 horas (ou seja, 720/11 minutos), os dois ponteiros se sobrepõem uma vez.
Portanto, dado o valor minuto, basta arredondá-lo para o múltiplo mais próximo de 720/11 (diferente dele mesmo). Isso pode ser alcançado por
*
11/720 (J tem um número racional literal11r720
), use a palavra<.
, aumente>:
e multiplique por 720/11.Observe que "multiplicar por 11/720" e "multiplicar por 720/11" são 2 ações reversas, além de "converter de [hora, minuto] para o número de minutos passados" e vice-versa. Felizmente, J incorporou
&.
(abaixo), o que reverte alguma ação após aplicar uma transformação.Depois disso basta fazer o arredondamento:
0.5
+
então<.
.fonte
R , 68 bytes
Experimente online!
Explorando a equação:
onde
index
é 0 para a primeira posição sobreposta (00:00), 1 para a segunda e assim por diante ...fonte
(a[...]...c(60,1))
6:30 > 6:33
.R , 88 bytes
Experimente online!
Aumente o tempo em um minuto. Verifica o ângulo. Se não estiver perto o suficiente, faça um loop até encontrar uma solução.
fonte
Python 3 ,
80bytesEsta é a minha primeira submissão, portanto críticas construtivas são bem-vindas :)
-2 bytes graças a @Jo King
Experimente online! (78)
Experimente online! (80)fonte
Java 8,
8982 bytesFixo. Vou ver se consigo jogar depois (provavelmente portando outra resposta) ..
Experimente online.
Explicação:
FAÇAM
fonte
f.apply(56).apply(10)
os rendimentos11 59
6:30 > 6:33
.Apl (Dyalog Unicode) , 28 bytes
Experimente online!
Explicação
((⍳11),⍪0,+\∊5/⊂5 6)
é uma matriz de vezes em que os ponteiros se sobrepõem (impressos no final do link do tio)(⍸⌷1⊖⊣)⎕
encontram o intervalo em que a entrada está na matriz e indexa abaixo dela.fonte
C # (.NET Core) , 70 bytes
Experimente online!
Eu acho que passa em todos os casos de teste. Embora o caso h = 11 seja meio feio
Explicação:
fonte
6:30 > 6:33
.JavaScript, 41 bytes
Mostrar snippet de código
fonte
Gelatina , 25 bytes
Experimente online!
Um link monádico que leva o tempo como uma lista de dois inteiros e retorna uma lista de dois inteiros correspondente à próxima vez que os ponteiros tocarem.
fonte
Perl 6 , 43 bytes
Experimente online!
Um anônimo Qualquer que seja o lambda que use dois números inteiros representando horas e minutos e retorne as horas e os minutos na ordem inversa. No momento, não é consistente quando você insere um horário alinhado, seja o próximo horário alinhado ou se permanece no mesmo. Estou esperando que o OP responda sobre esse assunto, mas agora estou tratando-o como indefinido.
Explicação
fonte