Problème
À chaque coup, vous retirez deux pièces d'une pile et une pièce de l'autre. Les deux orientations sont autorisées. Vous ne pouvez jamais retirer plus de pièces qu'il n'en reste dans une pile. Déterminez si les deux piles peuvent être vidées, c'est-à-dire atteindre zéro.
Implémentez coin_piles(left, right).
Entrée
left : Le nombre de pièces dans la pile de gauche.
right : Le nombre de pièces dans la pile de droite.
Sortie
Retournez true si les deux piles peuvent être vidées ; sinon, retournez false.
Contraintes
0 ≤ left, right ≤ 1 000 000 000. Deux piles déjà vides constituent un résultat réussi.
Exemples
Entrée :
left = 4
right = 2
Sortie attendue :
expected = True
Entrée :
long long left = 4;
long long right = 2;
Sortie attendue :
bool expected = true;
Entrée :
long left = 4;
long right = 2;
Sortie attendue :
bool expected = true;
Explication
Retirez (2, 1) deux fois : (4, 2) → (2, 1) → (0, 0).
Entrée :
left = 4
right = 1
Sortie attendue :
expected = False
Entrée :
long long left = 4;
long long right = 1;
Sortie attendue :
bool expected = false;
Entrée :
long left = 4;
long right = 1;
Sortie attendue :
bool expected = false;
Explication
Le seul premier coup possible laisse (2, 0), après quoi aucun coup ne permet de vider la pile de gauche.
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Chaque coup retire exactement trois pièces au total, donc le nombre total de pièces doit respecter ce schéma.
Indice 2
Aucune pile ne peut descendre sous zéro, donc une pile ne peut pas dépasser ce que l’autre peut supporter.
Indice 3
Vérifie à la fois le total et la différence entre les piles.
Complexité attendue
temps O(1), espace supplémentaire O(1)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.