Un compteur avec des lettres, comment faire -simple- ? - PHP - Programmation
Marsh Posté le 22-05-2004 à 14:52:57
je le ferais comme ça :
4 tableaux de 26 éléments
tu initialises en fonction de ta série de lettre
tu fais une boucle qui incrémente de 1 sauf si fin de tableau, auquel cas début de tableau puis meme chose sur le suivante et ainsi de suite
Marsh Posté le 22-05-2004 à 15:48:08
4 lettres, cela fait 456976 combinaisons
tu peux créer un compteur de 1 à 456976, tu décomposes le compteur en coef_1 * (26*26*26) + coef_2 * (26*26) + coef_3 * 26 + coef_4
Chacun des coefs correspond au numéro d'ordre des lettres dans l'alphabet.
coef_4 = compteur % 26
coef_1 = .... (euh je complète plus tard, car j'ai fait une erreur)
Marsh Posté le 22-05-2004 à 16:09:40
Bonne idée !
Bon finalement j'ai fais ca:
Code :
|
Marsh Posté le 22-05-2004 à 16:42:10
Moi j'ai ceci finalement :
Code :
|
L'essai donne 233577 => MGMS, 233578 => MGMT
Marsh Posté le 22-05-2004 à 17:39:04
Je crois ca pourrais etre l'occasion pour moi de me lancer dans la prog objet en php (une tite class avec des methodes genre codeSuivant, codePrecedent, etc etc ... )
Marsh Posté le 22-05-2004 à 17:46:14
red faction a écrit : function lettreSuivante jaime bien qd jvois ca qd mm |
Je donne toujours des nom explicites
edit: en relisant ma fonction je m'dis que j'aurais pu faire des: case 'A': return 'B';
Marsh Posté le 22-05-2004 à 17:49:18
Code :
|
fait la même chose
Marsh Posté le 22-05-2004 à 17:54:54
T509 a écrit :
|
je ne comprend pas la premiere ligne (le "@" je n'ai jamais utilisé, ca fonctionne comment?)
La deuzieme ok, c'est une bonne idée, par contre est-ce que les A-Z se suivent bien? (pour le Z faut penser à revenir au A parce que sinon ca part dans des caracteres ascii qui ne nous interressent plus )
Marsh Posté le 22-05-2004 à 17:57:30
je remplace la lettre "Z" par le caractère "@" car dans la table ascii, il est juste avant le "A".
code ascii "@" => 64
code ascii "A" => 65
Oups, c'est pas "X" mais "Z"
Marsh Posté le 22-05-2004 à 18:06:01
$lettre = 'a';
$lettre++;
-> $lettre = b
si $lettre = z au debut, $lettre = aa a la fin ...
ca simplifie pas mal ton code
ps: si tu mets en majuscules $lettre au debut, meme comportement mais en majuscules.
Marsh Posté le 22-05-2004 à 18:10:14
ok t509, je comprend mieux
$lettre++ je pensais pas que ca fonctionnais
par contre si lettre est 'acf' et que je fais $lettre++ ca donne 'acg' ?
Marsh Posté le 22-05-2004 à 18:19:02
Je me suis amusé à corriger mon code pour aller jusque 8 caractères
Marsh Posté le 22-05-2004 à 18:22:28
T509 a écrit : Je me suis amusé à corriger mon code pour aller jusque 8 caractères |
Quand j'aurai le temps je ferai une version illimitée en nombre de caractère (et en reprenant les méthodes plus simples exposées ici )
Marsh Posté le 22-05-2004 à 18:27:07
aspegic500mg a écrit : Quand j'aurai le temps je ferai une version illimitée en nombre de caractère (et en reprenant les méthodes plus simples exposées ici ) |
avec 8 lettres, cela fait 208 milliards de combinaisons, cela en fait pas mal des codes ...
Tu vas tout utiliser ?
Marsh Posté le 22-05-2004 à 18:28:30
T509 a écrit : avec 8 lettres, cela fait 208 milliards de combinaisons, cela en fait pas mal des codes ... |
ouais aprés je vais gérer des doubles (genre j'ai que ca à foutre de faire ca avec des lettres )
Marsh Posté le 22-05-2004 à 18:33:24
Code :
|
10, c'est le nombre de lettres a afficher. Tu fais un code de ce genre et ton truc est torché en 10 lignes
Marsh Posté le 22-05-2004 à 18:47:45
l'incrément doit pouvoir se faire avec une petite fonction récursive ...
genre une fonction lettreSuivanteRec qui fait :
Code :
|
Marsh Posté le 23-05-2004 à 02:59:03
Beegee a écrit : l'incrément doit pouvoir se faire avec une petite fonction récursive ...
|
Comme ceci ?
Code :
|
Je le trouve amusant ce topic
Marsh Posté le 23-05-2004 à 09:46:14
le dernier return devrait plutôt être :
Code :
|
Marsh Posté le 23-05-2004 à 16:14:42
Beegee a écrit : le dernier return devrait plutôt être :
|
Pas forcément puisque
$code = "abc";
$code ++ => "abd"
Marsh Posté le 23-05-2004 à 22:42:22
T509 a écrit : Pas forcément puisque |
je croyais que ça ne marchait qu'avec une lettre
Marsh Posté le 24-05-2004 à 22:10:25
Et bah ca a bien avancé, merci pour cette solution bien plus simple
Marsh Posté le 25-05-2004 à 00:16:19
On devrait peut être lancer parfois des petites "joutes de code", qu'en pensez vous ?
On fixe un énoncé, on donne un temps de résolution. L'énoncé est prévu pour un travail d'une heure environ.
Cela pourrait être amusant et je suis sûr qu'on pourrait apprendre pas mal de choses.
Marsh Posté le 25-05-2004 à 01:59:16
T509 a écrit : On devrait peut être lancer parfois des petites "joutes de code", qu'en pensez vous ? |
Oui mais il ne faudrait pas qu'un cador arrive et donne la solution au bout de 5 minutes avant qu'on ait eu le temps de chercher !
Ca me semble interressant comme idée, par contre faut trouver des énoncées interressantes
ps: si c'est pour une sorte de concours il faut un endroit où chacun peut poster son code au fur et à mesure, sans pouvoir éditer et où les autres ne peuvent pas voir le code avant la fin du concours, et on regarde à la fin ce que chacun à fait
Marsh Posté le 25-05-2004 à 02:45:16
aspegic500mg a écrit : Oui mais il ne faudrait pas qu'un cador arrive et donne la solution au bout de 5 minutes avant qu'on ait eu le temps de chercher ! |
Pour les ennoncés, ton compteur est un bel exemple. Il y a déjà eu 3 propositions différentes
C'est à chacun d'être honnete, et de ne pas aller pomper sur les autres. Ou alors le but peut aussi être de proposer chacun des solutions différentes volontairement.
Marsh Posté le 22-05-2004 à 14:04:44
Je dois générer des series de code à base de 4 lettres (exemple: AAAA,AAAB,AAAC,...,CKRI,...,FFFF ) en partant d'un de ces codes (je génère les x codes suivants)
J'ai réfléchi à l'algorytme faisant ca, et j'ai quelques idées mais je sens que je risque de reinventer la roue, donc si quelqu'un à une bonne méthode pour faire ca, qu'il n'hesite pas
(pour ma part je posterai ma fonction ici quand je l'aurai finit )