Remerciements à @ Agawa001 pour avoir posé cette question.
Explication
Mon nouveau "keybore" n'a que 2 boutons, à savoir +
et -
.
Le numéro en mémoire commence à 0
.
Chaque pression consécutive sur +
ou -
incrémentera / décrémentera la mémoire exactement pour combien de fois elle a été pressée consécutivement.
Par conséquent, si vous appuyez +
4 fois, la première fois, il ajoute 1, la deuxième fois, il ajoute 2, la troisième fois, il ajoute 3, la quatrième fois, il ajoute 4, ce qui vous donne 10
(dix).
Maintenant, si vous appuyez -
3 fois, la première fois, il soustrait 1, la deuxième fois 2, la troisième fois 3, vous laissant avec 4
(quatre).
TL; DR
Étant donné une chaîne de + et -, divisez-la à chaque changement de caractère. Ensuite, chaque chaîne résultante de m +
symboles ajoute le m-ème numéro de triangle, et chaque chaîne de n -
symboles soustrait le n-ème triangle.
Procédure pas à pas
Maintenant, si vous ne comprenez toujours pas, je vais vous montrer comment +++--+--
crée 1
.
Program | Counter | Memory
----------------------------
| 0 | 0
+ | +1 | 1
++ | +2 | 3
+++ | +3 | 6
+++- | -1 | 5
+++-- | -2 | 3
+++--+ | +1 | 4
+++--+- | -1 | 3
+++--+-- | -2 | 1
Tâche
- Vous prendrez un entier positif en entrée, soit comme argument fonctionnel, soit depuis STDIN.
- Ensuite, vous afficherez / imprimerez le nombre minimum de touches nécessaires pour créer ce nombre en utilisant la méthode ci-dessus.
Cas de test
Étant donné que le réarrangement des séquences +
ou -
donne le même nombre, pour chacun de ces groupes, seule la séquence lexicographiquement la plus ancienne est répertoriée.
Input | Output | Possible corresponding sequences
-------------------------------------------------
4 | 5 | -+++-
6 | 3 | +++
9 | 5 | ++++-
11 | 7 | +++-+++
12 | 7 | +++++--, ++++-++
19 | 8 | -++++++-
39 | 12 | +++++++++---
40 | 13 | +++++++++---+, ++++++++-+++-
45 | 9 | +++++++++
97 | 20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
361 | 34 | ++++++++++++++++++++++++++-+++-+++
Des ressources supplémentaires
- Preuve que n'importe quel nombre peut être fait : en gros, en répétant
++-
, vous pouvez obtenir n'importe quel nombre pair. Pour obtenir les nombres impairs, il suffit de mettre un+
à la fin. - Une autre façon générale d'obtenir n'importe quel numéro. Par exemple, pour générer
50
un moyen, appuyez sur+
50 fois, puis appuyez sur-
49 fois. - Solution des 50 premiers nombres .
- Obligatoire JSFiddle .
Notation
C'est du code-golf . La solution la plus courte en octets gagne.
+++++--
c'est aussi une alternative, mais j'ai supprimé ++-++++
car c'est équivalent à ++++-++
). J'ai encore un cas de plus que j'aimerais ajouter plus tard au cas où quelqu'un trouverait une solution efficace, si je réussis à la générer.
++-++++
supprimé. De plus, c'était MON montage, pas le vôtre.
+++++--
(ou, de manière équivalente --+++++
), c'est pourquoi j'ai ressenti le besoin de modifier en premier lieu.