Jeden Monat trifft sich dein Partner mit seinem besten Freund. Beide haben sehr volle Terminkalender, sodass es schwierig ist, einen passenden Termin zu finden! Da auch du einen vollen Terminkalender hast, geht dein Partner mögliche Termine für ein Treffen immer mit dir durch:
Bei eurem Anruf in diesem Monat stellte dir dein Partner diese Frage:
Verwirrt fragst du, was ein „Teenth-Tag“ ist. Dein Partner erklärt, dass ein Teenth-Tag, ein Konzept, das er sich ausgedacht hat, die Tage eines Monats bezeichnet, die auf „-teenth“ enden:
Da es außerdem sieben Wochentage gibt, ist garantiert, dass jeder Wochentag genau einen Teenth-Tag pro Monat hat.
Jetzt, wo du das Konzept eines Teenth-Tags verstehst, schaust du in deinen Kalender. Am Teenth-Donnerstag hast du nichts vor, also bestätigst du deinem Partner freudig das Datum.
Deine Aufgabe ist es, das genaue Datum eines Treffens zu finden, wenn ein Monat, ein Jahr, ein Wochentag und eine Woche gegeben sind.
Es gibt sechs Wochenwerte zu beachten: first, second, third, fourth, last, teenth.
Zum Beispiel könnte man dich bitten, das Datum für das Treffen am ersten Montag im Januar 2018 zu finden (1. Januar 2018).
Ebenso könnte man dich bitten, Folgendes zu finden:
Die teenth-Woche bezieht sich auf die sieben Tage eines Monats, die auf „-teenth“ enden (13., 14., 15., 16., 17., 18. und 19.).
Wenn wir den teenth Samstag im August 1953 finden sollen, schauen wir uns den Kalender an:
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
Daraus ersehen wir, dass der teenth Samstag der 15. August 1953 ist.
Die eingebaute Unterstützung für Datumsangaben in Prolog ist ziemlich rudimentär. Ein viel schönerer Weg, mit Datumsangaben zu arbeiten, führt über das [date_time-Paket][date_time-package].
Wenn deine installierte Swipl-Version einigermaßen aktuell ist, kannst du das Paket so installieren:
swipl pack install date_time
Wenn das nicht funktioniert, kannst du Folgendes ausführen:
swipl -g 'pack_install(date_time)'
Wenn du den Online-Editor verwendest, musst du nichts manuell installieren.
Füge den folgenden Code oben in deine Lösungsdatei ein, um das date_time-Paket zu verwenden:
:- use_module(library(date_time)).
Tipp: Der [Quellcode des date_time-Pakets][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src] ist gut dokumentiert und kann eine große Hilfe sein!
Melde dich bei Exercism an, um Prolog mit 109 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.