Chaque mois, ta partenaire retrouve son meilleur ami. Comme tous les deux ont un emploi du temps très chargé, ce n'est pas facile de trouver une date qui leur convienne ! Et comme ton emploi du temps est lui aussi bien rempli, ta partenaire vérifie toujours avec toi les dates de rencontre envisagées :
Lors de l'appel de ce mois-ci, ta partenaire t'a posé cette question :
Perplexe, tu lui demandes ce qu'est un jour teenth. Ta partenaire t'explique qu'un jour teenth, un concept qu'elle a inventé, désigne les jours du mois qui se terminent par -teenth :
Comme il y a aussi sept jours dans la semaine, chaque jour de la semaine a exactement un jour teenth par mois.
Maintenant que tu as compris le concept de jour teenth, tu consultes ton calendrier. Tu n'as rien de prévu le jeudi teenth, alors tu confirmes joyeusement la date avec ta partenaire.
Ta tâche consiste à trouver la date exacte d'un meetup, à partir d'un mois, d'une année, d'un jour de la semaine et d'une semaine.
Il y a six valeurs de semaine à prendre en compte : first, second, third, fourth, last, teenth.
Par exemple, on peut te demander de trouver la date du meetup du premier lundi de janvier 2018 (1er janvier 2018).
De même, on peut te demander de trouver :
La semaine teenth désigne les sept jours d'un mois dont le nom se termine par « -teenth » (13, 14, 15, 16, 17, 18 et 19).
Si l'on te demande de trouver le samedi teenth d'août 1953, on consulte son calendrier :
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
On en déduit que le samedi teenth est le 15 août 1953.
La prise en charge des dates intégrée à Prolog est assez rudimentaire. Une façon bien plus agréable de travailler avec les dates est de passer par le [paquet date_time][date_time-package].
Si la version de Swipl que tu as installée est suffisamment récente, tu peux installer le paquet en lançant :
swipl pack install date_time
Si ça ne fonctionne pas, tu peux lancer :
swipl -g 'pack_install(date_time)'
Si tu utilises l'éditeur en ligne, tu n'as besoin de rien installer manuellement.
Ajoute le code suivant en haut de ton fichier de solution pour utiliser le paquet date_time :
:- use_module(library(date_time)).
Astuce : la [source du paquet date_time][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src] est bien documentée et peut t'être d'une grande aide !
Inscris-toi sur Exercism pour apprendre et maîtriser Prolog avec 109 exercices, et un vrai mentorat humain, le tout gratuitement.