Introducción
Un campanario hará sonar sus campanas cada hora, n
veces, n
siendo la hora actual en un reloj de 12 horas.
Por ejemplo, una campana sonará 5 veces a las 5 p.m. y 10 veces a las 10 a.m.
Tarea
Dado dos veces en un formato adecuado, emite el número de veces que sonará la campana, incluidas las horas de inicio y finalización
Ejemplos
"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
Si el inicio es el mismo que el final, entonces simplemente superas el número de campanas para esa hora:
[5pm, 5pm]
5 = 5
Como puede ver, puede elegir un método de entrada, pero la salida debe ser un entero por sí mismo (o una alternativa aceptable).
Nota:
- Las entradas pueden abarcar desde la tarde de un día hasta la mañana del siguiente.
- La diferencia entre las dos veces nunca será más de 24 horas.
- la entrada es flexible siempre que indique claramente qué formato tiene su entrada.
- su entrada debe tener una clara distinción entre AM y PM.
pm
aam
, cruzando así a un segundo día.Respuestas:
JavaScript (ES6),
3835 bytesAgrega recursivamente el número actual de timbres al total. Llamado como
f(11,15)
; la medianoche se representa como24
. Obtuve parte del~-
truco de la respuesta Python de @ xnor .Fragmento de prueba
Mostrar fragmento de código
Versión no recursiva (Firefox 30+), 56 bytes
Equivalente a la siguiente función ES6:
fuente
Python 2, 46 bytes
Basado en mi respuesta JS. La fórmula recursiva f para la solución se define así:
fuente
Python 2,
Equivalente a5954 bytesfuente
a=
parte.a=
. Está permitido ser una lambda pura.y%24
.05AB1E , 13 bytes
Con mucha ayuda de Emigna .
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Python, 42 bytes
Una función recursiva que toma dos números del 0 al 23. Expandir los
~x
's para-x-1
darLa expresión
(a+1)%12+1
convierte un tiempo en el número de anillos1
a12
. Luego, el límite inferior se incrementa en el módulo 24 y se agrega la función para el resultado recursivo. Es decir, a menos que la hora actual sea la hora final, en cuyo caso nos detendremos.En cambio, he estado tratando de escribir una solución puramente aritmética, pero hasta ahora solo he encontrado expresiones largas y desordenadas.
fuente
or
. ¡Buena esa!Haskell,
4843 bytesEl uso es
startHour % endHour
, con ambas entradas en formato de 24 horas.editar: se agregó la mejora de @ xnor, ahorrando 5 bytes
fuente
e
cuándoe<s
, puede filtrar el rangos%e=sum[mod(x-1)12+1|x<-[s..e+24],x<=e||s>e]
. A continuación, guarda un byte en desplazamiento x por 1:s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]
.C #, 73 bytes
Entrada aceptable: enteros en el rango [0,23].
Esta solución no usa LINQ.
Programa completo con casos de prueba:
fuente
Jalea ,
17 16 1514 bytesTryItOnline
¿Cómo?
fuente
MATL , 14 bytes
El formato de entrada es como en el tercer ejemplo en el desafío, es decir, dos números en formato de 24 horas.
Pruébalo en línea!
Explicación
Tomar entradas
22
,10
como un ejemplo.fuente
PHP, 90 bytes
Formato de entrada '[1,24]' entre 1 y 24
En este desafío, odio por qué PHP se suelta contra otros lenguajes. Prefiero mostrar todas mis ideas. Quizás otro PHP Crack encuentre una solución más corta.
99 bytes
113 Bytes por camino con min y max
bien esta idea loca trabaja con una matriz 149 Bytes llena la matriz
$y[0]
y$y[1]
si$_GET["b"][0]<=$_GET["b"][1]
, si$y[1]
esnull
que podemos resumir esta matrizarray_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1))
Esto podría reducirse a 124 Bytes
Ahora bien, en este punto, podemos reducir la matriz con sólo dos enteros 101 Bytes 2 Hacer sumas
$x[0]
y$x[1]
list($f,$g)=$_GET[b];
si
$v=($f>$g
luego agregar valor a$x[$i<$f&$i>$g]
otro valor agregado a$x[$i>=$f&$i<=$g]
la salida se encontrará por casoecho$x[!$v];
Después de eso encontré una manera de calcular el resultado directamente 112 Bytes
103 Bytes recursivos
fuente
PHP, 69 bytes
La extracción de la lista se inspiró en la respuesta de Jörg Hülsermann, pero el resto de las similitudes son el resultado de una evolución convergente y debido a que es bastante más corto y los condicionales en el bucle son lo suficientemente diferentes, lo publico como una respuesta separada.
Toma datos como 24 horas (bien con 0 o 24). Corre como:
fuente
$i>$a?24:0
tiene la misma longitud que($i>$a)*24
wiki.php.net/rfc/short_list_syntax Quizás desee usar la sintaxis de lista corta que es nueva en 7.1[$x,$i,$a]=$argv;
-2 Bytes Antes de que no haya probado que no la usaría. Bueno, ahora me odio más de lo que no he encontrado de esta manera.Java,
72717876 bytesEditar :
e
/clock
se inicializa.Sin golf:
fuente
a
, yd
, yb
? El método completo tiene sentido, pero a menos que me falte algo gravemente, creo que debes mirar tu lambda de golf nuevamente e intentar ejecutarlo. Para más golf:(time+1)
puede convertirse++time
.a+=a?
debería serb+=a?
. Además, puedes jugarlo en 2 bytes cambiando elwhile
cuerpo a un cuerpofor
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 bytesEntonces, aquí está la respuesta imprimiendo solo el número total de timbres:
La entrada está en el rango
1-24
;a
yb
son las entradas (::
en el código),c
realiza un seguimiento de am / pm,d
es el número total de timbres. Cuando hemos contado todas las horas,_Xd
finaliza el programa e imprimed
en el proceso.OK, entendí mal la pregunta y pensé que el
1+2+3...=
texto era parte del resultado, así que escribí que:Ahora, voy a codificar la respuesta correcta ...
fuente
Pyth - 11 bytes
Test Suite .
fuente
23, 1
salidas144
cuando debería salir24
. (¡Tal caso, por supuesto, debería estar en las pruebas!)C #, 76 bytes
fuente
a=23
yb=0
parece ser el ejemplo más obvio.Perl, 36 bytes
Incluye +1 para
-p
Indique la hora de inicio y finalización en formato de 24 horas en una línea en STDIN:
toll.pl
:fuente
Java 7, 64 bytes
Método recursivo basado en la respuesta Python 2 de @ETHproductions . Utiliza una entrada de reloj de 24 horas.
Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
Lote,
16891 bytesEditar: Guardado 77 bytes al cambiar a un formulario cerrado para la respuesta.
%1
y%2
son los dos parámetros de la línea de comandos@
Deshabilite el valor predeterminado de Batch, que es hacer eco del comandocmd/c
Fool Batch para imprimir inmediatamente el resultado del cálculoset/a
Realizar un cálculo numéricox=(%1+23)%%24,
Normalice la hora de inicio para que sea la cantidad de horas desde la 1AM (1PM también funcionaría, pero 11 no es más corto que 23)y=x+(%2+24-%1)%%24,
Normalice la hora de finalización para adelantarse a la hora de inicio, avanzando al día siguiente si es necesarioz=y%%12+1,
Número de campanas golpeadas a la hora final(y/12-x/12)*78+
Número de campanas debido a medio día extraz*~-z/2-
Número de campanas desde la 1 en punto hasta la hora de finalización inclusive(x%%=12)
Uno menos que el número de campanas golpeadas a la hora de inicio*-~x/2
Número de campanas que habrían sonado desde la 1 en punto hasta la hora de inicio, pero sin incluir la hora de iniciofuente
C, 56 bytes
fuente
> <> , 48 + 2 = 50 bytes
Se espera que la entrada esté presente en la pila al inicio del programa, por lo que +2 bytes para el
-v
indicador. La entrada es dos enteros que especifican la hora en el reloj de 24 horas, por10am - 10pm
lo que se daría como10 22
.Pruébalo en línea!
fuente
Cubix ,
4544 bytesGuardado 1 byte, gracias a @ETHproductions
Mi primera incursión en Cubix ...
O cubicado:
Puede probarlo en el intérprete en línea . La entrada está en formato de 24 horas, con la hora de finalización primero. Por ejemplo, de 5pm a 1am la entrada debería ser
1 17
.Versión anterior, 45 bytes:
fuente
)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;
Qbasic, 112 bytes
fuente
Python, 73 bytes
Sería mucho más corto si no tenemos para apoyar
pm
aam
. Yo uso la recursividad para apoyarlo.Pruébalo en línea
Sin soporte
pm
paraam
(45 bytes):fuente