Sag es niemandem, aber ich habe die Zeitreisemaschine meines Onkels geklaut! Mein Onkel ist jedoch von Primzahlen besessen, und das zeigt sich in der Maschine - er hat sie so programmiert, dass sie nur Daten enthält, die eine Primzahl ergeben.
Es kann also nicht nach 1947-08-15
1947 + 8 + 15 = 1970 gehen, was keine Primzahl ist. Es kann gehen 1947-07-25
, weil 1947 + 7 + 25 = 1979, das ist prime. Wenn ich mir also Indiens Unabhängigkeitsfeier ansehen möchte, muss ich wohl ein paar Wochen früher gehen und diese 20 Tage abwarten.
Ich habe einige andere Daten, zu denen ich gehen möchte, und ich muss ebenfalls zu einem Datum gehen, das vor meinem Zieldatum liegt (oder, wenn ich Glück habe, gleich meinem Zieldatum ist) und eine Primzahl ergibt. Ich bin jedoch ungeduldig und möchte nicht zu lange warten. Deshalb möchte ich das Datum finden, das meinem Zieldatum am nächsten kommt.
Können Sie mir ein Programm schreiben, das mein Zieldatum und das Datum angibt, das ich in die Zeitmaschine eingeben soll - das nächstliegende Datum vor oder gleich dem angegebenen Datum, dessen Teile sich zu einer Primzahl addieren?
(Für diese Herausforderung verwenden wir den proleptischen Gregorianischen Kalender - was einfach bedeutet, dass wir den aktuellen Gregorianischen Kalender auch für Zeiträume verwenden, in denen Menschen den älteren Julianischen Kalender verwendeten.)
Eingang
- Ein Treffen
- im Idealfall jedes Datum in der aktuellen Ära (AD); praktisch kann jede Untergruppe Ihrer Sprache auf natürliche Weise damit umgehen
- in jedem von Menschen lesbaren Format, das Sie mögen
Ausgabe
- Das Datum, das dem Eingabedatum am nächsten liegt und kleiner oder gleich dem Eingabedatum ist und dessen Datum + Monat + Jahr eine Primzahl ergibt.
- in jedem von Menschen lesbaren Format, das Sie mögen
⁺: "vom Menschen lesbar", wie in Tag, Monat und Jahr, alle getrennt, in welcher Reihenfolge auch immer
Testfälle
1947-08-15
=> 1947-07-25
1957-10-04
=> 1957-09-27
1776-07-04
=> 1776-07-04
999-12-12
=> 0999-12-10
2018-06-20
=> 2018-06-15
1999-01-02
=> 1998-12-29
1319-12-29
=> 1319-07-01
(Danke an @Shaggy, @PeterTaylor und @Arnauld für die Hilfe bei der Frage.)
Fri Jul 25 02:46:39 CEST 1947
)