Cela a été inspiré par un problème de mathématique que j’ai vu quelque part sur Internet mais ne me souviens plus où (MISE À JOUR: le problème original a été trouvé sur les énigmes mathématiques subreddit avec une preuve à condition que cela soit possible, voir aussi ce post de Math SE ), demandant une preuve si le processus suivant est possible pour toute paire d'entiers quelconque (de ce que je me souviens, il était possible pour toute paire donnée):
Étant donné une paire d’entiers, j et k, doublez-en un et ajoutez-en un, créant ainsi une paire de nouveaux entiers, à savoir, (j, k) -> (j + 1, k * 2) ou (j * 2, k + 1). Répétez ensuite ce processus avec ces entiers, l'objectif étant que la paire d'entiers soit égale.
Ces exemples donnés ne sont pas nécessairement optimaux mais montrent comment ce processus peut être effectué sur des nombres entiers, positifs, négatifs ou nuls:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
Défi
Créez un programme qui donne deux entiers et affiche la liste des étapes nécessaires pour rendre ces entiers égaux en incrémentant plusieurs fois et en doublant l'autre
Caractéristiques
- La solution ne doit pas nécessairement être optimale, mais elle doit être résolue en un nombre fini d'étapes pour toute paire arbitraire.
L'entrée doit être deux entiers
La sortie peut être toute sortie raisonnable indiquant clairement les entiers résultants de chaque étape, par exemple:
- une chaîne avec deux délimiteurs distincts (tout symbole, espace, etc.), un pour chaque entier d'une paire et un pour chaque paire
- par exemple, entrée j, k: 2, 5 -> sortie: 3,10; 6,11; 12,12
- une liste de listes d'entiers
- par exemple, entrée j, k: 2, 5 -> sortie: [[3, 10], [6, 11], [12, 12]]
- une chaîne avec deux délimiteurs distincts (tout symbole, espace, etc.), un pour chaque entier d'une paire et un pour chaque paire
Si l'entrée est une paire de nombres égaux, vous pouvez sortir n'importe quoi pourvu que ce soit cohérent avec d'autres réponses non triviales.
- par exemple
- si l'entrée [2, 5] a une sortie [[3, 10], [6, 11], [12, 12]], qui n'inclut pas la paire d'entrée, l'entrée [4, 4] ne doit alors rien émettre.
- si l'entrée [2, 5] a la sortie [[2, 5], [3, 10], [6, 11], [12, 12]], qui inclut la paire d'entrée, alors l'entrée [4, 4] devrait sortie [[4, 4]].
- par exemple
Les méthodes IO standard s'appliquent et les échappatoires standard sont interdites
Ceci est le code de golf si la réponse la plus courte en octets gagne
[(12,12),(6,11),(3,10),(2,5)]
pour l'entrée (2,5)
?