¿Cuántos de ustedes todavía usan su propio nudillo para determinar si un mes tiene 31 días completos o menos?
Su trabajo es escribir un programa para contar cuántos meses, en un rango de meses, tienen 31 días completos y cuántos tienen menos de 31 días "contando los nudillos".
Cortesía: amsi.org.au
Entrada
Un par de meses, el primero de los cuales no tiene que venir cronológicamente antes del segundo, dado en cualquier formato adecuado. Por ejemplo: 201703 201902
- marzo de 2017 a febrero de 2019. Describa el formato de entrada que elija. Tenga en cuenta que la entrada debe poder incluir todos los años del 1 al 9999. El rango de meses especificado incluye tanto los meses iniciales como los finales.
Salida
Dos enteros: el número de meses en el rango dado con 31 días y el número de meses en el rango con menos de 31 días.
Ejemplo: 14 10
14 nudillos, 10 surcos (significa que en ese rango de meses tenemos 14 meses que tienen 31 días completos y 10 meses que tienen menos de 31 días).
Para una entrada donde el segundo mes en el rango viene cronológicamente antes que el primero, por ejemplo 201612 201611
, debe generar un par de cero.
Ejemplos de entrada y salida.
| Input | Output |
|---------------|-------------|
| 201703 201902 | 14 10 |
| 201701 202008 | 26 18 |
| 000101 999912 | 69993 49995 |
| 201802 201803 | 1 1 |
| 201601 201601 | 1 0 |
| 201612 201611 | 0 0 |
Reglas
- Puedes elegir el idioma que quieras
- Una entrada por línea
- Este es el código de golf , por lo que gana el código más corto en bytes.
- El ganador será elegido el 9 de abril.
- Se aplican lagunas estándar
- PD: esta es mi primera pregunta en PCG, podría tener algunas inconsistencias. Siéntase libre de editar y confirmar lo que no está claro para usted.
201612 201611
.Respuestas:
Jalea , 21 bytes
Toma entrada como
[[y, m], [y, m]]
.Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6),
70686764 bytesToma la entrada como dos enteros en
yyyymm
formato, en sintaxis curry(a)(b)
. Emite una matriz de dos enteros[knuckles, grooves]
.Formateado y comentado
Casos de prueba
Nota : El tercer caso de prueba no está incluido en este fragmento, porque no funcionará a menos que su navegador tenga habilitada la Optimización de llamadas de cola.
Mostrar fragmento de código
fuente
Python 2 ,
92908680 bytesPruébalo en línea!
6 más al convertir a una lambda, gracias a @math_junkie por la idea. Ahora genera una lista que contiene los dos números.
Versión anterior que no es lambda (86 bytes)
Pruébelo en línea de edad!
2 guardado gracias a @ovs por ayudarme a deshacerme del
len(k)
. No había pensado en usarNone
.La entrada es una lista de enteros en el formato
y1,m1,y2,m2
Algún crédito debido a @KeerthanaPrabhakaran que obtuve
bin(2741)[2:]
antes que yo, lo que ahorra 1 byte sobre la codificación dura de la cadena binaria.fuente
len(k)
la última rebanada. Gracias.PHP ,
259256249248237221 bytesSuperado por aross : /codegolf//a/114512/38505
Formato de entrada
yyyymm,yyyymm
Pruébalo en línea!
versiones anteriores
Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
Pruébalo en línea!
fuente
Lote, 93 bytes
Acepta dos parámetros en formato ymm (es decir, 101 - 999912). Solución basada en bucle de 129 bytes anterior:
fuente
Python 3.5 (
164162154152150148140137 bytes)repl.it
toma entrada en forma de aaaamm aaaamm
imprime la salida como number_of_knuckles number_of_grooves
fuente
n=int
y quizás también algunasexec
tonterías.2773&1<<r%12-1>0
lugar deint('101010110101'[r%12-1])
print([k,t-k])
asprint(k,t-k)
produciría el resultado deseado(k,g)
, reduciendo así 2 bytes!split(' ')
consplit()
Python 2 ,
147146142 bytesPruébalo en línea!
Rompiendo el código,
fuente
if-else
cláusulas con búsquedas de matriz. Ver esta publicación para más detallesPHP,
1201039796 bytesCorre así:
Explicación
Ajustes
$e
, solo compare directamentefuente
$x++
en lugar de+$x++
también funciona.$x
sin inicializar la cadena sería2017-12month
, que es un formato y los resultados no reconocida en 1970+
en la cadena.PowerShell , 96 bytes
Pruébalo en línea!
Toma entrada como forma
2017-03
. Utiliza las bibliotecas de fechas .NET integradas y recorre desde las entradas$a
hasta$b
, cada iteración se incrementa$x++
y agrega$z
si la actual.Month
es-in
2,4,6,9,11
( es decir, un mes que no es de 31 días). Luego sacamos nuestros meses totales menos los meses que no son de 31 días$x-$z
y los que no son de 31 días$z
.Arroja un error en el
0001-01
que9999-12
caso de prueba, ya que sólo es compatible con .NET años hasta9999
, por lo que las últimas.AddMonths(1)
causas de un rebosadero. Sin embargo, aún genera los valores correctos porque es un error que no termina; solo hace que salga el bucle.Probablemente sería más corto hacer esto aritméticamente, como las respuestas de Python o JavaScript, pero quería mostrar un enfoque utilizando los .NET incorporados.
fuente
Bash , 113 bytes
Pruébalo en línea!
necesita jugar al golf ...
toma entrada como
2016-03
2018-10
salidas:
sin golf:
fuente
Swift, 151 bytes
input es una matriz de dos enteros en el formato según el ejemplo
fuente