
Pour ceux qui sont interessés j'ai réussi à programmer un calculateur de sommes kakuro (le fameux jeu japonais proche du sudoku) en TI-BASIC . Sur ma ti89 de base (non titanium) le programme a mis 6s pour calculer les combinaisons (25 en 5 chiffres), 5s pour (20 en 4 chiffres) et 3s pour (15 en 3 chiffres) .
6s pour (30 en 6 chiffres) , 5s pour (35 en 7 chiffres).
Pour 2 et 8 chiffres, ce n'est pas la peine, car c'est ultra facile à calculer à la main .
Voici les sources (il y a juste quelques differences entre chacune d'entre elles, mais je pense qu'il vaut mieux avoir plusieurs programmes et non aiguiller pour optimiser le calcul)
EndFor :EndPrgm
Pour 3 chiffres :kakcomb3(r)
:Prgm
:{«(«&string(r)&»,3)»}->sortie
:r-6->rprime
:For chf1,0,6
:For chf2,chf1,6
:2*chf2+chf1->r_p_deb
:6+chf2+chf1->r_p_fin
:If rprime >= r_p_deb and rprime <= r_p_fin Then
:rprime-r_p_deb+chf2->chf3
:augment(sortie,{string(chf1+1)&string(chf2+2)&string(chf3+3)})->sortie
:EndIf
:EndFor
:
EndFor :EndPrgm
Pour 4 chiffres :kakcomb4(r)
:Prgm
:{«(«&string(r)&»,4)»}->sortie
:r-10->rprime
:For chf1,0,5
:For chf2,chf1,5
:For chf3,chf2,5
:2*chf3+chf2+chf1->r_p_deb
:5+chf3+chf2+chf1->r_p_fin
:If rprime >= r_p_deb and rprime <= r_p_fin Then
:rprime-r_p_deb+chf3->chf4
:augment(sortie,{string(chf1+1)&string(chf2+2)&string(chf3+3)&string(chf4+4)})->sortie
:EndIf
:EndFor
:EndFor
:
EndFor :EndPrgm
Pour 5 chiffres :kakcomb5(r)
:Prgm
:{«(«&string(r)&»,5)»}->sortie
:r-15->rprime
:For chf1,0,4
:For chf2,chf1,4
:For chf3,chf2,4
:For chf4,chf3,4
:2*chf4+chf23+chf2+chf1->r_p_deb
:4+chf4+chf3+chf2+chf1->r_p_fin
:If rprime >= r_p_deb and rprime <= r_p_fin Then
:rprime-r_p_deb+chf4->chf5
:augment(sortie,{string(chf1+1)&string(chf2+2)&string(chf3+3)&string(chf4+4)&string(chf5+5)})->sortie
:EndIf
:EndFor
:EndFor
:EndFor
:
EndFor :EndPrgm
Pour 6 chiffres :kakcomb6(r)
:Prgm
:{«(«&string(r)&»,6)»}->sortie
:r-21->rprime
:For chf1,0,3
:For chf2,chf1,3
:For chf3,chf2,3
:For chf4,chf3,3
:For chf5,chf4,3
:2*chf5+chf4+chf3+chf2+chf1->r_p_deb
:3+chf5+chf4+chf3+chf2+chf1->r_p_fin
:If rprime >= r_p_deb and rprime <= r_p_fin Then
:rprime-r_p_deb+chf5->chf6
:augment(sortie,{string(chf1+1)&string(chf2+2)&string(chf3+3)&string(chf4+4)&string(chf5+5)&string(chf6+6)})->sortie
:EndIf
:EndFor
:EndFor
:EndFor
:EndFor
:
EndFor :EndPrgm
Pour 7 chiffres :kakcomb7(r)
:Prgm
:{«(«&string(r)&»,7)»}->sortie
:r-28->rprime
:For chf1,0,2
:For chf2,chf1,2
:For chf3,chf2,2
:For chf4,chf3,2
:For chf5,chf4,2
:For chf6,chf5,2
:2*chf6+chf5+chf4+chf3+chf2+chf1->r_p_deb
:2+chf6+chf5+chf4+chf3+chf2+chf1->r_p_fin
:If rprime >= r_p_deb and rprime <= r_p_fin Then
:rprime-r_p_deb+chf6->chf7
:augment(sortie,{string(chf1+1)&string(chf2+2)&string(chf3+3)&string(chf4+4)&string(chf5+5)&string(chf6+6)&string(chf7+7)})->sortie
:EndIf
:EndFor
:EndFor
:EndFor
:EndFor
:EndFor
:
Le programme attend la valeur de la somme à atteindre .
Le resultat est dans la variable sortie .
(Calculer 20 en 3 chiffres : kakcomb3(20) => sortie contient la liste des resultats sous forme de chaine) .
J'ai également tenté d'expliquer brièvement ma démarche dans les documents suivants (Potentiels négatifs.doc est à lire avant le deuxième document) :

