Skip to content

Déterminer si le coffre de récompenses peut être ouvert

ylked edited this page Oct 23, 2023 · 1 revision

Introduction

La question semble plus simple qu'elle ne l'est. On souhaite savoir si le coffre de récompenses peut être ouvert par l'utilisateur.

Les caractéristiques du coffre sont les suivantes :

  • Un nouveau coffre est disponible chaque jour à une certaine heure fixe.
  • Si un nouveau coffre apparait alors que le précédent n'a pas été ouvert, ce dernier est perdu.

Le coffre n'est pas une entité à part entière de l'application, il n'est pas possible de déterminer directement si un nouveau coffre vient d'apparaître et quels utilisateurs l'ont déjà ouvert. Pour savoir si un utilisateur peut ouvrir un nouveau coffre, il faut s'aider des informations dont on dispose :

  • Timestamp de la dernière ouverture de coffre par l'utilisateur
  • Timestamp actuel
  • heure et minute des ouvertures de coffres (deux entiers)

Les sections suivantes s'intéressent aux différents cas de figures qui peuvent apparaître et si oui ou non le coffre peut être ouvert.

Données à disposition

Notations

Pour simplifier les écritures, nous allons utiliser les notations suivantes :

Notation définition
h heure de l'ouverture des coffres (entier)
m minute de l'ouverture des coffres (entier)
L Timestamp de la dernière ouverture de coffre par l'utilisateur en question
N Timestamp actuel

Déterminer les timestamps des ouvertures quotidiennes

Comme vu dans le paragraphe précédent, nous disposons du timestamp de la dernière ouverture (L) , du timestamp actuel (N) et de l'heure/minute de l'ouverture quotidienne des coffres (h et m). Pour effectuer des opérations entre ces variables, nous allons créer des timestamps pour l'ouverture quotidienne des coffres.

Pour ces deux mêmes valeurs entières, il existe une infinité de timestamps : le coffre peut être ouvert chaque jour. Toutefois, toutes ne nous intéressent pas. Donnons quelques exemples de timestamps :

  • Aujourd'hui à h:m (T)
  • Hier à h:m (Y)
  • Demain à h:m (D)
  • Avant-hier à h:m (A)
  • ...

On se rend déjà compte que certaines valeurs ne nous intéressent pas. Le timestamp D n'est pas utile : Le moment auquel le coffre s'ouvrira demain n'a aucune incidence si le joueur peut ouvrir son coffre maintenant.

On peut penser que le timestamp Y est dans ce même cas. On s'intéresse à maintenant ! Or, il existe le cas de figure suivant : Le coffre d'aujourd'hui n'est pas encore disponible. Alors le coffre d'hier est encore d'actualité ; s'il n'a pas encore été ouvert, alors le joueur peut le faire.

Le timestamp A, n'a toutefois aucune utilité : Un nouveau coffre est généré toutes les 24h. Cela signifie que le temps maximum entre une ouverture et une génération de coffre est aussi de 24h. Or, à tout instant de la journée d'aujourd'hui, n'importe quel moment de la journée d'avant-hier se situe à une distance de > 24h. Ainsi, le coffre aura dans tous les cas été remplacé, soit par le coffre T, soit par le coffre Y.

Comme D et A ne sont pas utiles, on peut supposer que tous les timestamps <A et >D ne le sont pas non plus.

Ainsi, on se retrouve avec les deux variables suivantes, que l'on peut ajouter au tableau des notations :

Notation Définition
Y Timestamp de la génération du coffre d'hier
T Timestamp de la génération du coffre d'aujourd'hui

Déterminer les cas possibles

Nous disposons désormais des 4 variables suivantes :

Notation Définition
Y Timestamp de la génération du coffre d'hier
T Timestamp de la génération du coffre d'aujourd'hui
L Timestamp de la dernière ouverture de coffre par l'utilisateur en question
N Timestamp actuel

Chacune de ces variables peut se situer avant ou après une autre, à condition qu'on ne s'occupe pas de la cohérence de ces cas de figures (Par exemple, T ne peut logiquement pas se situer avant Y, mais on ne s'en occupe pas pour l'instant).

Ainsi, il existe exactement 4! = 24 cas de figures (il existe 4! façon différentes d'ordonner 4 objets) :

YTLN YTNL YNLT YNTL YLTN YLNT
TYLN TYNL TNLY TNYL TLNY TLYN
NYLT NYTL NTLY NTYL NLYT NLTY
LYNT LYTN LTYN LTNY LNTY LNYT

On sait qu'il existe des cas impossibles dans cette table. On cherche alors à déterminer quelles sont les règles pour qu'un cas soit possible.

  • Y < T car hier se situe toujours avant aujourd'hui
  • L < N car la dernière ouverture par un joueur ne peut pas se situer dans le futur
  • Y < N car hier se situe toujours avant maintenant

On peut désormais supprimer tous les cas de figures du tableau qui ne respectent pas ces règles. On se retrouve alors avec les 5 cas de figures suivants, dont on va déterminer si le coffre peut être ouvert ou non :

  • YTLN : non car coffre d'aujourd'hui déjà ouvert
  • YLNT : non car coffre d'hier ouvert mais coffre d'aujourd'hui pas encore généré
  • YLTN : oui car coffre d'aujourd'hui déjà généré mais pas encore ouvert
  • LYTN : oui car coffre d'aujourd'hui déjà généré mais pas encore ouvert
  • LYNT : oui car coffre d'hier pas encore ouvert

On en déduit alors que les conditions pour qu'un coffre puisse être ouvert sont :

(Y > L) or ((N > T) and (L < T))