
Le Problème
Imaginez un cadran circulaire (comme un cadenas à combinaison) avec 100 positions numérotées 0 à 99. Le cadran commence à pointer à 50.
Vous recevez une séquence d'instructions de rotation :
L= tourner à gauche (vers des nombres inférieurs)R= tourner à droite (vers des nombres supérieurs)Le nombre suivant indique combien de "clics" à tourner
Parce que le cadran est circulaire :
Aller à gauche depuis 0 revient à 99
Aller à droite depuis 99 revient à 0
Partie 1 : Compter les Positions Finales à Zéro
Objectif : Comptez combien de fois le cadran atterrit sur 0 à la fin d'une rotation.
La Formule de Retour Modulo
Cette formule gère l'arithmétique circulaire :
dial + sign * distance→ Calculez la nouvelle position brutesignest-1pour la gauche,+1pour la droite
% range→ Le premier modulo l'amène dans la plage, mais il peut être négatif !Exemple :
(5 - 10) % 100 = -5❌
+ range→ Ajoutez 100 pour gérer les résultats négatifs-5 + 100 = 95✓
% range→ Le modulo final garantit que nous sommes dans[0, 99]Si le premier résultat était positif, cela annule l'extra
+ range
Pourquoi cela fonctionne : En JavaScript, -5 % 100 retourne -5, et non 95. Le truc du double modulo garantit que nous obtenons toujours un résultat positif dans la plage valide.
Partie 2 : Compter Chaque Clic à Travers Zéro
Objectif : Comptez chaque fois que le cadran passe par 0, pas seulement quand il s'y arrête.
C'est la partie délicate ! Si vous êtes à la position 50 et que vous tournez L200, vous passerez par 0 deux fois.
L'Insight Clé : Calculer la Distance jusqu'au Premier Zéro
Position Actuelle | Direction | Distance jusqu'au Premier Zéro |
|---|---|---|
| Gauche ( |
|
| Droite ( |
|
| Les deux |
|
Exemple visuel allant à gauche depuis 50 :
Exemple visuel allant à droite depuis 50 :
Compter Tous les Passages par Zéro
La logique :
Vérifiez si nous atteignons même zéro :
distance >= firstZeroSi nous ne voyageons pas assez loin, nous n'atteignons jamais zéro
Comptez les passages :
+1→ Nous avons définitivement atteint zéro au moins une fois (aufirstZero)(distance - firstZero) / range→ Après le premier zéro, combien de rotations complètes de 100 clics s'adaptent ?Chaque rotation complète = un passage de plus à zéro
Exemple : Position 50, instruction L250
firstZero = 50(distance pour atteindre 0 en allant à gauche)distance = 250≥50✓ nous allons atteindre zéroReste après le premier zéro :
250 - 50 = 200Rotations complètes :
Math.floor(200 / 100) = 2Total de zéros :
2 + 1 = 3🎯
Résumé
Partie | Question | Stratégie |
|---|---|---|
1 | Combien de fois atterrissons-nous sur 0 ? | Simple : vérifiez |
2 | Combien de fois passons-nous par 0 ? | Calculez la distance jusqu'au premier 0, puis comptez les rotations complètes |