Parece que todavía no tenemos este, así que aquí vamos:
El reto
Escriba un programa o función que tome una fecha como entrada y genere el número de día del año. ¡No puedes usar ningún incorporado para eso!
Reglas
- Como de costumbre, puede escribir un programa completo o una función.
- El formato de la entrada depende de usted, pero debe contener un año, un mes y un día. ¡Deje claro cuál usa su solución!
- ¡No se permiten construcciones relacionadas con la fecha! Tienes que hacer el trabajo tú solo. Las construcciones que no están relacionadas con las operaciones de fecha están bien.
- La base para el cálculo es el calendario gregoriano.
- Tienes que tener en cuenta los años bisiestos.
- Solo necesita manejar años en el rango [1, 9999]
- Las lagunas estándar están prohibidas.
- ¡El conteo de bytes más bajo gana!
Casos de prueba
El formato de entrada aquí es AAAA / MM / DD
2016/07/05 -> 187
2000/03/28 -> 88
0666/06/06 -> 157
6789/10/11 -> 284
0004/04/04 -> 95
1337/07/13 -> 194
¡Feliz codificación!
Respuestas:
Pyth, 31 bytes
Gracias a @Dennis y @Jakube por la porción del año bisiesto . La entrada es AAAA, MM, DD en líneas separadas.
Banco de pruebas .
fuente
JavaScript ES6,
8169 bytesSuponiendo que los meses estén basados en 1, de lo contrario podría ahorrar 2 bytes.
Editar: guardado 12 bytes con la sugerencia de @ user81655.
fuente
C,
961028961 bytesfuente
Python 3,
152148150 bytesToma fechas en el formato "MD AAAA".
fuente
print n[m-1]+d
Python 2,
10082 bytesUn puerto de Python con la respuesta de @ Neil :
Al igual que con la respuesta anterior, agregar 17 bytes (99 bytes en total) generará un programa completo:
Respuesta anterior:
Como una lambda anónima:
Se puede convertir a una lambda con nombre para una penalización de 2 bytes. Alternativamente,
D,M,Y
se puede lograr un programa completo (que toma la entrada en el formato ) para 117 bytes:fuente
Python 3, 125 bytes
Otro enfoque para este problema. El código aprovecha las prioridades de ejecución de álgebra booleana de Python y, dado que
not
es la última operación, la conversión a booleana es automática. Cuando se realiza la suma, el booleano se trata como 1 o 0. El formato de entrada es la cadena "YY MM DDDD". Sistema de entrada inspirado en el similar de @ SteveEckert .Otra forma como función, 91 bytes
En este caso, la entrada es de tres enteros, el mes está entre 0-11. Esto también funcionaría en Python 2.
fuente
Excel, 106 bytes
Toma entrada en tres celdas
A1
= Año,B1
= Mes,C1
= Día.1
si LeapYear, de lo contrario0
Múltiple de
30
, ELIJA por días adicionales, más días en el mesEvolución:
fuente