Schreiben Sie ein Programm, das die Anzahl der aufeinanderfolgenden Tage protokolliert, an denen es ausgeführt wurde.
Der Tag wird um Mitternacht (die Ortszeit des Computers, auf dem das Programm ausgeführt wird) zurückgesetzt.
Wenn es einen Tag gibt, an dem das Programm nicht ausgeführt wird, wird der Zähler auf Null zurückgesetzt.
Jedes Mal, wenn das Programm ausgeführt wird, sollte der Zähler um einen Tag erhöht werden, wenn es das erste Mal ist, dass das Programm an diesem Tag ausgeführt wird. Dies bedeutet, dass beim ersten Ausführen des Programms die Meldung "Sie haben eine eintägige Pause!" Angezeigt wird.
Die Ausgabe des Programms erfolgt in der Form: You have a [streak_length] day streak!
Sie dürfen Daten extern speichern oder den Quellcode ändern - nach Ihrer Wahl.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
Antworten:
Bash,
92,9082 BytesGolf gespielt
EDITS
Wie es funktioniert !
Bei jedem Start wird eine Zeile mit dem aktuellen Datum an die Datei h angehängt , z.
Anschließend
uniq
werden Duplikate (dh mehrere Starts innerhalb desselben Tages) herausgefiltert und die Linien gezählt, um die Streifenlänge zu erhalten .Um einen Streifen zurückzusetzen , sucht er in h nach 'gestern' und schneidet ihn ab, wenn er nicht gefunden wird.
quelle
Bash, 102 Bytes
Achtung, nicht in einem Ordner ausführen, der Ihnen am Herzen liegt. Es löscht alle Dateien, auf die am letzten Tag nicht zugegriffen wurde, im Arbeitsverzeichnis.
Verwendet eine Datei
a
zum Speichern von Daten unter Verwendung der aufgerufenen / geänderten Zeitstempel.quelle
Goruby, 85 Bytes
Führen Sie mit dem Interpreter-Flag aus
-rdate
.Es speichert eine neue Datei für jeden Tag, an dem sie aufgerufen wird, und zählt dann die Anzahl aufeinanderfolgender Dateien rückwärts, um die Länge der Streifen zu erhalten. Es löscht niemals Dateien, daher wird es nach einer sehr, sehr, sehr, sehr, sehr langen Zeit Ihre Festplatte füllen, eine Handvoll Bytes auf einmal.
Hier ist eine ungolfed Version davon:
quelle
Python 3, 213 Bytes
quelle
Bash + Coreutils,
12097 BytesDie obige Bash-Zeile enthält 95 Bytes.
Es gibt eine zweite Datei mit dem Namen f, die nur ein einzelnes Zeichen enthält:
(Das Programm schreibt an f.)
Ich denke also, die Gesamtzahl der Bytes sollte mit 97 bewertet werden (95 Bytes für den Inhalt der Bash-Datei, 1 Byte für den Inhalt der externen Datei und 1 Byte, da 1 andere Datei als das Programm verwendet wird). Dies basiert auf dem Zählen von Bytes für Programme mit mehreren Dateien .
Hinweis: Vielen Dank an @orlp für den Hinweis, dass eine frühere Antwort auf diese Frage Unsinn war. Ich hatte das Problem komplett falsch verstanden. (Es wurde als eine andere Antwort gepostet, die ich gelöscht habe.)
quelle
PowerShell , 95 Byte
Probieren Sie es online!
Erläuterung
Ich beginne damit, das aktuelle Datum (im kurzen Datumsformat) in eine Datei (mit Namen
z
) zu schreiben .>>
funktioniert wie gewohnt; wird angehängt, aber erstellt, wenn es nicht vorhanden ist.Als nächstes lese ich den Inhalt der Datei Zeile für Zeile mit
Get-Content
(gc
), Pipe ThroughGet-Unique
(gu
), da es mehrere Einträge vom selben Datum geben kann, und dann Pipe ThroughForEach-Object
(%
).In der Schleife erstelle ich ein Array mit 2 Elementen mit dem Wert
0
im ersten Element und dem aktuellen Wert von$c
(+1
) im zweiten Element. Mit++$c
kann ich vermeiden, etwas$c+1
in Klammern zu setzen.Dann indexiere ich in das Array mit zwei Elementen mit einem booleschen Vergleich, der zu
0
for$false
oder1
for verschmolzen wird$true
. Innerhalb des Vergleichs ordne ich$d
ein[datetime]
Objekt zu, das aus dem Datum erstellt wurde, das aus der aktuellen Zeile in der Datei gelesen wurde. Dieses Objekt wird mit verglichen$n
, das beim ersten Durchlauf noch nicht zugewiesen wurde. Daher wird es nie mit dem Objekt übereinstimmen und$c
mit initialisiert1
, da der Wert der Indizierung zugewiesen wird$c
.Als nächstes
$n
wird mit dem nächsten erwarteten Datum1
aufgefüllt , indem zum aktuellen datetime-Objekt hinzugefügt wird. Der Schlüssel hier ist, dass1D
es ein[decimal]
Literal ist. Wenn Sie a Ganzzahlen hinzufügen[datetime]
, wird dies aus irgendeinem Grund als Häkchen interpretiert. Wenn Sie jedoch Gleitkommazahlen hinzufügen, werden diese als Tage interpretiert. Das füllt sich also$n
für die nächste Iteration.Dies hat zur Folge, dass der Zähler jedes Mal zurückgesetzt wird, wenn das aktuelle Datum nicht mit dem "nächsten" Datum (dem vorherigen Datum plus 1 Tag) übereinstimmt.
Schließlich wird die Nachricht ausgegeben.
quelle