Baruch > tu devrais pt faire une explication de texte (pour que ça serve la compréhension, et pas juste sembler "tombé du ciel" ) ?
Je me livre à un commentaire libre:
K-22-5int(.1K)+2(K<44
bon d'abord:
Remarques: +10 à chaque ligne, +1 de gauche à droite, 5 touches sur une ligne: ce qui donne pour deux lignes: 31, 32, 33, 34, 35, 41, 42, 43, 44, 45. Y'a 5 nombres sautés à chaque fois. Les unités donnent la place de la touche sur une ligne, le nombre de dizaines donnent la ligne..
ensuite: clavier de la Ti, repérer les touches qui servent pour les lettres. Remarque: ça se suit en permanence, sauf les touches [var] et [clear]. ça commence en A = 41
donc:
-ramener 41 à 1, genre par une simple soustraction
-trouver un moyen pour 'retirer' le décalage introduit par les '+5' à chaque ligne. Si il n'existait pas ce décalage, les lettres dans l'ordre auraient des numéros qui se suivent (genre de 41 à 57), et donc simplement soustraire 40 permettrait de se ramener aux nombres de 1 à 27...
-bidouiller pour niquer le déclage des deux touches sur la première ligne.
Solution:
. retirer 40, K -40
. la ligne de la touche est donnée par le nombre de dizaines, donc int(0.1*K). (on dégage les unités en multipliant par 0.1, et on coupe ce qu'il y a après la virgule) On compte le nombre de '+5' introduits: on introduit +5 quand on passe à la seconde ligne (celle après A B, C qui est la première ligne "alphabétique" ), +5 de plus quand on passe à la troisième, etc...
donc: total du décalage: 5 * (numéro_ligne - numéro_ligne_début ) = 5 * ( int(0.1*K) - 4 ) = -20 + 5int(.1K)
. si on est sur la ligne du début (A, B, C ), on s'en fout des deux touches supplémentaires. Sinon, ça rajoute 2 dans le comptage.. Donc: si ligne>4, retirer 2. En ti: -2*(K>44 (si la ligne>4, le numéro est >44 )
Bilan:
K - 40 - (-20 + 5int(0.1k)) -2*(k>44
= K-20-5int(0.1K)-2(K>44
remarque: légère différence avec Baruch mais résultat identique. (on peut faire -22 et +2(K<44: cela revient à considérer comme 'exceptionnels' les touches 'A', 'B', 'C', de rajouter 2 pour ces touches là, pour les autres c'st déjà dans le '22' )
conclusion: avec un peu d'habitude et de logique, ce genre de formule très efficaces peut se déduire relativement facilement. Quelques idées de base reviennent toujours:
-utiliser des tests ( X>42 .. ) pour 'coder' un if: (X>42)*5 renvoie 5 si X est plus grand que 42, 0 sinon. Cela revient à faire:
if x>42
x+5 -> ..
-utiliser int( et multiplication/divisions par des puissance de 10 pour sélectionner une partie d'un nombre.