Introdução
Uma torre sineira tocará seus sinos a cada hora, n
vezes, n
sendo a hora atual em um relógio de 12 horas.
Por exemplo, um sino toca 5 vezes às 17h e 10 vezes às 10h.
Tarefa
Dado duas vezes em um formato adequado, digite o número de vezes que a campainha tocará, incluindo os horários de início e término
Exemplos
"10am-12pm"
10+11+12= 33
[01:00, 05:00]
1+2+3+4+5 = 15
[11, 15]
11+12+1+2+3 = 29
[10:00pm, 10:00am]
10+11+12+1+2+3+4+5+6+7+8+9+10 = 88
Se o início é o mesmo que o final, você simplesmente calcula o número de sinos para essa hora:
[5pm, 5pm]
5 = 5
Como você pode ver, você pode escolher um método de entrada, mas a saída deve ser um número inteiro por si só (ou uma alternativa aceitável) novas linhas e espaços à direita / à direita.
Nota:
- as entradas podem variar da tarde de um dia até a manhã do dia seguinte.
- a diferença entre os dois tempos nunca será superior a 24 horas.
- A entrada é flexível, desde que você indique claramente qual o formato da sua entrada.
- sua entrada deve ter uma distinção clara entre AM e PM.
pm
paraam
, passando para o segundo dia.Respostas:
JavaScript (ES6),
3835 bytesAdiciona recursivamente o número atual de toques de campainha ao total. Chamado como
f(11,15)
; meia-noite é representada como24
. Eu recebi parte do~-
truque da resposta Python do @ xnor .Snippet de teste
Mostrar snippet de código
Versão não recursiva (Firefox 30+), 56 bytes
Equivalente à seguinte função ES6:
fonte
Python 2, 46 bytes
Com base na minha resposta JS. A fórmula recursiva f para a solução é definida da seguinte forma:
fonte
Python 2,
Equivalente a5954 bytesfonte
a=
parte.a=
. É permitido ser um lambda puro.y%24
.05AB1E , 13 bytes
Com muita ajuda de Emigna .
Usa a codificação CP-1252 . Experimente online!
fonte
Python, 42 bytes
Uma função recursiva que leva dois números de 0 a 23. A expansão das
~x
's para-x-1
dáA expressão
(a+1)%12+1
converte um tempo no número de toques1
em12
. Então, o limite inferior é incrementado no módulo 24 e a função para o resultado recursivo é adicionada. Ou seja, a menos que a hora atual seja a hora final, nesse caso, paramos.Eu tenho tentado escrever uma solução puramente aritmética, mas até agora só encontrei expressões longas e confusas.
fonte
or
. Agradável!Haskell,
4843 bytesO uso é
startHour % endHour
, com as duas entradas fornecidas no formato de 24 horas.edit: adicionada melhoria do @ xnor, economizando 5 bytes
fonte
e
quandoe<s
, você pode filtrar o intervalos%e=sum[mod(x-1)12+1|x<-[s..e+24],x<=e||s>e]
. Em seguida, ele salva um byte para mudança de x para baixo por 1:s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]
.C #, 73 bytes
Entrada aceitável: números inteiros na faixa [0,23].
Esta solução não usa o LINQ.
Programa completo com casos de teste:
fonte
Geléia ,
17 16 1514 bytesTryItOnline
Quão?
fonte
MATL , 14 bytes
O formato de entrada é como no terceiro exemplo do desafio, ou seja, dois números no formato de 24 horas.
Experimente online!
Explicação
Tome entradas
22
,10
como um exemplo.fonte
PHP, 90 bytes
Formato de entrada '[1,24]' entre 1 e 24
Neste desafio, eu odeio o fato de o PHP perder contra outras linguagens. Eu prefiro mostrar todas as minhas idéias. Talvez um outro PHP Crack encontre uma solução mais curta.
99 bytes
113 bytes de uma maneira com min e max
bem essa idéia maluca trabalha com uma variedade de 149 Bytes preenche a matriz
$y[0]
e$y[1]
se$_GET["b"][0]<=$_GET["b"][1]
se$y[1]
énull
que podemos resumir esta matrizarray_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1))
Isso poderia ser diminuído em 124 bytes
Agora, neste ponto, podemos reduzir a matriz com apenas duas polegadas 101 bytes. Faça 2 somas
$x[0]
e$x[1]
list($f,$g)=$_GET[b];
se, em
$v=($f>$g
seguida, agregar valor, caso$x[$i<$f&$i>$g]
contrário, agregar valor à$x[$i>=$f&$i<=$g]
saída será encontrado caso a casoecho$x[!$v];
Depois disso, encontrei uma maneira de calcular o resultado diretamente 112 Bytes
103 bytes recursivos
fonte
PHP, 69 bytes
A extração da lista foi inspirada na resposta de Jörg Hülsermann, mas o restante das semelhanças é resultado de uma evolução convergente e porque é bem mais curto e os condicionais no loop são diferentes o suficiente. Estou publicando como uma resposta separada.
Recebe a entrada como 24 horas (multa com 0 ou 24). Executar como:
fonte
$i>$a?24:0
tem o mesmo tamanho que($i>$a)*24
wiki.php.net/rfc/short_list_syntax Talvez você queira usar a sintaxe da lista curta que é nova em 7.1-2[$x,$i,$a]=$argv;
Bytes Antes de eu testar, não o usaria. Bem agora, eu me odeio mais do que não encontrei.Java,
72717876 bytesEditar :
e
/clock
é inicializado.Ungolfed:
fonte
a
, ed
, eb
? O método completo faz sentido, mas, a menos que eu esteja sentindo falta de alguma coisa, acho que você precisa olhar novamente para o seu lambda golfado e realmente tentar executá-lo. Para mais golfe:(time+1)
pode se tornar++time
.a+=a?
deveria serb+=a?
. Além disso, você pode jogá-lo em 2 bytes alterando owhile
para um sem corpofor
como este:(a,b,c,d)->{int e;b+=a?12:0;d+=c?12:0;for(;b!=d;e+=b%12,b=++b%24);return e;}
QBIC ,
9047 bytesEntão, aqui está a resposta, imprimindo apenas o número total de campainhas:
A entrada está dentro do intervalo
1-24
;a
eb
são as entradas (::
no código),c
mantém registro de am / pm,d
é o número total de toques. Quando contamos todas as horas,_Xd
encerra o programa, imprimindod
no processo.OK, eu não entendi a pergunta e achei que o
1+2+3...=
texto fazia parte do resultado, então escrevi o seguinte:Agora, eu vou codificar a resposta correta ...
fonte
Pitão - 11 bytes
Conjunto de Teste .
fonte
23, 1
sai144
quando deve sair24
. (Case Tal deve, naturalmente, ser nos testes!)C #, 76 bytes
fonte
a=23
eb=0
parece ser o exemplo mais óbvio.Perl, 36 bytes
Inclui +1 para
-p
Dê a hora de início e de término no formato de 24 horas em uma linha cada, no STDIN:
toll.pl
:fonte
Java 7, 64 bytes
Método recursivo baseado na resposta Python 2 do @ETHproductions . Usa uma entrada de relógio de 24 horas.
Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte
Lote,
16891 bytesEditar: economizou 77 bytes mudando para um formulário fechado para a resposta.
%1
e%2
são os dois parâmetros de linha de comando@
Desabilitar o padrão do Lote, que é o eco do comandocmd/c
Engane o lote para imprimir imediatamente o resultado do cálculoset/a
Executar um cálculo numéricox=(%1+23)%%24,
Normalize a hora de início para ser o número de horas desde a 01:00 (13:00 também funcionaria, mas 11 não é menor que 23)y=x+(%2+24-%1)%%24,
Normalize a hora final para ficar à frente da hora inicial, avançando para o dia seguinte, se necessárioz=y%%12+1,
Número de sinos tocados na hora final(y/12-x/12)*78+
Número de sinos devido a meio dia extraz*~-z/2-
Número de sinos desde 1 até a hora final, inclusive(x%%=12)
Um a menos que o número de sinos tocados na hora de início*-~x/2
Número de sinos que teriam sido tocados desde 1 hora até a hora inicial, mas não incluindo a hora inicialfonte
C, 56 bytes
fonte
> <> , 48 + 2 = 50 bytes
A entrada deve estar presente na pilha no início do programa, portanto, +2 bytes para o
-v
sinalizador. A entrada é dois números inteiros que especificam a hora no relógio de 24 horas; portanto,10am - 10pm
seria dado como10 22
.Experimente online!
fonte
Cubix ,
4544 bytesSalvo 1 byte, graças a @ETHproductions
Minha primeira incursão no Cubix ...
Ou cubificado:
Você pode experimentá-lo no intérprete online . A entrada está no formato de 24 horas, com o horário final primeiro. Por exemplo, das 17:00 às 01:00 a entrada deve ser
1 17
.Versão anterior, 45 bytes:
fonte
)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;
Qbasic, 112 bytes
fonte
Python, 73 bytes
Seria muito menor se não tivéssemos para apoiar
pm
aam
. Eu uso a recursão para apoiá-lo.Experimente online
Sem suporte
pm
paraam
(45 bytes):fonte