Écrivez un programme qui enregistre le nombre de jours consécutifs d'exécution.
Le jour se réinitialise à minuit (l'heure locale de l'ordinateur sur lequel le programme est exécuté).
S'il y a un jour où le programme n'est pas exécuté, le compteur est remis à zéro.
Chaque fois que le programme est exécuté, le compteur doit augmenter d'un jour si c'est la première fois que le programme est exécuté ce jour-là. Cela signifie que la première fois que le programme est exécuté, il devrait dire: "Vous avez une séquence d'une journée!"
La sortie du programme est sous la forme: You have a [streak_length] day streak!
Vous êtes autorisé à stocker des données en externe ou à modifier le code source –– votre choix.
C'est du code-golf , donc le code le plus court en octets gagne!
Réponses:
Frapper,
92,90, 82 octetsGolfé
MODIFICATIONS
Comment ça fonctionne !
Chaque fois que vous le lancez, il ajoutera une ligne avec la date actuelle au fichier h , par exemple:
Il sera ensuite utilisé
uniq
pour filtrer les doublons (c'est-à-dire plusieurs lancements, dans la même journée) et compter les lignes pour obtenir la longueur de séquence .Pour réinitialiser une séquence , il recherchera «hier» en h et la tronquera s'il n'est pas trouvé.
la source
Bash, 102 octets
Attention, ne vous exécutez dans aucun dossier qui vous intéresse. Il supprime tout fichier non consulté au cours du dernier jour dans le répertoire de travail.
Utilise un fichier
a
pour stocker des données, en utilisant les horodatages accessibles / modifiés.la source
Goruby, 85 octets
Exécutez avec le drapeau d'interprète
-rdate
.Il fonctionne en stockant un nouveau fichier pour chaque jour où il est invoqué, puis compte le nombre de fichiers consécutifs en arrière pour obtenir la longueur de la séquence. Il ne supprime jamais les fichiers, donc il finira par, après un très, très, très, très, très long temps, remplir votre disque dur, une poignée d'octets à la fois.
En voici une version non golfée:
la source
Python 3, 213 octets
la source
Bash + coreutils,
12097 octetsLa ligne bash ci-dessus contient 95 octets.
Il y a un deuxième fichier appelé f qui ne contient qu'un seul caractère:
(Le programme écrit sur f.)
Je pense donc que le nombre total d'octets doit être marqué comme 97 (95 octets pour le contenu du fichier bash, 1 octet pour le contenu du fichier externe et 1 octet car 1 fichier autre que le programme est utilisé). Ceci est basé sur le comptage des octets pour les programmes multi-fichiers .
Remarque: Merci à @orlp d'avoir souligné qu'une réponse antérieure à cela que j'avais publiée était un non-sens; J'avais complètement mal lu le problème. (Il a été publié comme une réponse différente, que j'ai supprimée.)
la source
PowerShell , 95 octets
Essayez-le en ligne!
Explication
Je commence par écrire la date actuelle (au format de date courte) dans un fichier (nommé
z
).>>
fonctionne comme d'habitude; s'ajoute, mais crée s'il n'existe pas.Ensuite, je lis le contenu du fichier ligne par ligne avec
Get-Content
(gc
), pipe throughGet-Unique
(gu
) car il peut y avoir plusieurs entrées à partir de la même date, puis pipe throughForEach-Object
(%
).Dans la boucle, je crée un tableau à 2 éléments avec la valeur
0
dans le premier élément et la valeur actuelle de$c
(+1
) dans le deuxième élément. L'utilisation++$c
me permet d'éviter d'envelopper quelque chose comme$c+1
entre parenthèses.Ensuite, je indexe dans le tableau à deux éléments avec une comparaison booléenne, qui sera fusionnée en
0
pour$false
ou1
pour$true
. Dans la comparaison, j'assigne à$d
un[datetime]
objet créé à partir de la date lue à partir de la ligne actuelle dans le fichier. Cet objet est comparé à$n
, qui lors de la première exécution n'a pas encore été attribué, il ne correspondra donc jamais et$c
sera initialisé à1
, car la valeur de l'indexation est affectée à$c
.Ensuite,
$n
est rempli avec la prochaine date attendue, en ajoutant1
à l'objet datetime actuel. La clé ici est que1D
cela signifie que c'est un[decimal]
littéral. Pour une raison quelconque, lorsque vous ajoutez des nombres entiers à a[datetime]
, il est interprété comme des graduations, mais lorsque vous ajoutez des nombres à virgule flottante, ils sont interprétés comme des jours. Donc, cela remplit$n
pour la prochaine itération.L'effet est que le compteur est réinitialisé à chaque fois que la date actuelle ne correspond pas à la date "suivante" (qui est la date précédente plus 1 jour).
Enfin, le message est sorti.
la source