Cada mes, tu pareja queda con su mejor amigo. Ambos tienen agendas muy apretadas, ¡así que encontrar una fecha que les venga bien es todo un reto! Como tú también tienes una agenda apretada, tu pareja siempre consulta contigo las posibles fechas para quedar:
En la llamada de este mes, tu pareja te hizo esta pregunta:
Confundido, preguntas qué es un día «teenth». Tu pareja te explica que un día teenth, un concepto que se ha inventado, se refiere a los días del mes que terminan en «-teenth»:
Como además hay siete días de la semana, está garantizado que cada día de la semana tiene exactamente un día teenth cada mes.
Ahora que entiendes el concepto de día teenth, consultas tu calendario. No tienes nada planeado para el jueves teenth, así que confirmas la fecha con tu pareja muy contento.
Tu tarea es encontrar la fecha exacta de una reunión, dados un mes, un año, un día de la semana y una semana.
Hay seis valores posibles para la semana: first, second, third, fourth, last y teenth.
Por ejemplo, es posible que te pidan encontrar la fecha de la reunión del primer lunes de enero de 2018 (1 de enero de 2018).
Del mismo modo, es posible que te pidan encontrar:
La semana «teenth» se refiere a los siete días de un mes que terminan en «-teenth» (13th, 14th, 15th, 16th, 17th, 18th and 19th).
Si nos piden encontrar el sábado «teenth» de agosto de 1953, consultamos su calendario:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
De ahí deducimos que el sábado «teenth» es el 15 de agosto de 1953.
El soporte integrado de Prolog para fechas es bastante rudimentario. Una forma mucho mejor de trabajar con fechas es usar el [paquete date_time][date_time-package].
Si la versión de Swipl que tienes instalada está bastante actualizada, puedes instalar el paquete ejecutando:
swipl pack install date_time
Si eso no funciona, puedes ejecutar:
swipl -g 'pack_install(date_time)'
Si usas el editor en línea, no necesitas instalar nada manualmente.
Añade el siguiente código al principio de tu fichero de solución para usar el paquete date_time:
:- use_module(library(date_time)).
Consejo: el [código fuente del paquete date_time][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src] está bien documentado y puede serte de gran ayuda.
Regístrate en Exercism para aprender y dominar Prolog con 109 ejercicios y mentoría humana real, todo gratis.