Poster un nouveau sujet Poster une réponse
combinaissons
Auteur Message
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Sam 05 Oct 2013, 17:21   Citer 

RE
Je me suis souvenu d'un film où deux personnages volent un commissariat pour récupérer des documents confidentiels etc.
Pour ouvrir un coffre fort à code l'un des deux lance une appli mobile qui demande de cibler les combinaisons (utilisation des ultraviolets) puis l'appli donne les possibilités (le tope aurait été de les trier dans l'ordre croissant des chance de leurs d'utilisation)

C'est réalisable, j'ai commencé à faire cela sur une appli android "B.A.S.I.C.mobile" elle permet de programmer en basic

Mais c'est compliqué:

demander le nombre de caractères minimum du code

demander le nombre de caractères maximum du code

demander les caractères possibles dans le code sous une chaîne de caractère

-> calcul : Les étapes sont :

-Dans une boucle (for):

-réaliser une liste d'autant de nombre que de caractères pour chaque possibilités de nmb de caractères donnés précédemment crazy.gif

-dans une boucle FOR , utiliser la liste précédente comme un nombre de base égale au nmb de caractères, ajouter 1

-traduire la liste en chaine de caractère (l(1)=1 -->> premier caractère de la chaine l(1)=2 -->> second etc.

-afficher cette chaîne (Sur mon appli c'est facile car on a une sorte de terminal ou je ne sais comment cela s'appelle mais sur la calculette cela risque d'être compliqué)

-Fin des boucles (FOR)

C'est vrais que vous pouvez pas m'aider, sans code.
Mais cela viendra bientôt.

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Sam 05 Oct 2013, 17:37   Citer 

Bonjour,

C'est un peu chaud à faire, étant donné qu'il y aura en fait un nombre très très grand de possibilité de code...
Par exemple pour min = 4 et max = 8, tu as, pour 10 caractères possibles seulement:
10^4+10^5+10^6+10^7+10^8 = 111110000 possibilités, rien que ça... alors je te dis pas pour les combinaisons qui peuvent allier nombres et lettres et autorisent entre 4 et 12 caractères (voire plus).
Bref le problème principal sera l'affichage des résultats laugh.gif

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Sam 05 Oct 2013, 17:57   Citer 

Ouai voilà pourquoi je pense faire 8 combinaison par 8 en utilisant Pause et de ne pas calculer la totalité des combinaison du premier coup.

Et puis on est censé supprimer des cas comme dans le film exemple supprimer les lettres rapportant le plus de points dans le scrabble (les moins utilisés) ou mouiller les doigts de celui qui tape le code avant qu'il le tape, voir même utiliser les ultraviolets ou encore utiliser l'encre des stylos à encre invisible qui se vend dans le commerce.

Après je ne me dis pas que je vais faire un module qui utilise la sortie jack pour faire en sorte qu'il tape tout les codes possible en 2 secondes et ainsi ouvrir le coffre fort d'une banque. glasses.gif

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Sam 05 Oct 2013, 20:23   Citer 

Hum... Entre les films et la réalité il y a souvent beaucoup d'écart.
Bonne chance en tout cas!

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Dim 06 Oct 2013, 17:22   Citer 

RE
Et bien de la chance, j'en ai pas cry.gif : mon code ne fonctionne pas :

Code
Input "CARACTERES",Chaîne1
Input "CARACT MAX",M
Input "CARACT MIN",N
(M)->DIM(L1
Remplir(0,L1        (dans L1 0 = nombre inexistant , 1=0 ,2=1 , 3=2 etc.
For(A,1,N
1->L1(A
End
Longeur(Chaîne1->L 
0
For(A,N,M
L^A+Rép
End
Disp "POSSIBILITES :
Pause Rép
EffEcr
For(A,1,Rép
1+L1(1->L1(1
For(B,2,M
If L+1=L1(B-1
Then
1+L1(B->L1(B
1->L1(B-1
End
EffVar Chaîne2
For(C,1,M
If 0!=L1(C
sous-Chaîne(Chaîne1,L1(C),1)+Chaîne2->Chaîne2
End
P+1->P
Output(P,1,Chaîne2
If P=8
Then
Pause
1->P
End
End



Aidez-moi SVP cry.gif
_______________________________________

EDIT: cela marche à merveille :



Code
Input "CARACTERES",Chaîne1
Input "CARACT MAX",M
Input "CARACT MIN",N
(M)->DIM(L1
Remplir(0,L1       
For(A,1,N
1->L1(A
End
Longeur(Chaîne1->L 
0->P
For(A,N,M
L^A+Rép
End
Disp "POSSIBILITES :
Pause Rép
EffEcr
For(A,1,Rép
1+L1(1->L1(1
For(B,2,M
If L+1=L1(B-1
Then
1+L1(B->L1(B
1->L1(B-1
End
End
" "->Chaîne2
For(C,1,M
If 0!=L1(C
sous-Chaîne(Chaîne1,L1(C),1)+Chaîne2->Chaîne2
End
P+1->P
Output(P,1,Chaîne2
If P=8
Then
Pause
1->P
End
End



----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 07 Oct 2013, 2:34   Citer 

Pas le temps de tout regarder, à première vue des choses que je croyais faciles ne le sont pas et tu t'es bien débrouillé.

Je voudrais bien utiliser une relation du style 2^n= nombre de parties d'un ensemble de n éléments.
EDIT 7/10 : la formule que j'avais écrite, L^M+L^(M-1)+...+1=L^(M+1) est fausse. Donc la déduite aussi.

Convertir les nombres en caractères est facile avec la sous-chaîne.

Tu peux effacer la liste avant de la dimensionner, la TI la remplit de zéros toute seule.
Tu peux la remplir directement avec la fonction suite() sans avoir à faire tout le reste.
suite(A<=N,A,1,M->L1
A<=N est la condition booléenne qui vaudra 1 au début de la liste.

Ton crible est intéressant puisqu'il n'utilise pas de récursivité.
Moi je résous souvent ces cribles avec de la récursivité. Exemple avec FACTZ.
Je crois que tu utilises un pointeur vers chaque terme de la liste.
Tu m'intéresse vraiment, cela pourrait révolutionner des programmes que j'ai déjà fait.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Mar 08 Oct 2013, 0:01   Citer 

Re
C'est pas très gentil et un peu paradoxal mais je suis heureux de t'annoncer que tu as tors (pour une fois bigmouth.gif)
la formule est plutôt L^(M*(M+1)/2)-L^(N*(N+1)/2) et cela fait 25 octès contre 12 donc c'est bien comme cela.

Et bien au - j'ai appris un truc aujourd'hui la fonction suite donc voilà le code.


Code
Input "CARACTERES",Chaîne1
Input "CARACT MAX",M
Input "CARACT MIN",N
(M)->DIM(L1
 Remplir(0,L1
 Suite(A<=N,A,1,M->L1
 Longeur(Chaîne1->L
0->P
For(A,N,M
L^A+Rép
End
Disp "POSSIBILITES :
Pause Rép
EffEcr
For(A,1,Rép
1+L1(1->L1(1
For(B,2,M
If L+1=L1(B-1
Then
1+L1(B->L1(B 1->L1(B-1
1->L1(B-1
End
End
" "->Chaîne2
For(C,1,M
If 0!=L1(C
sous-Chaîne(Chaîne1,L1(C),1)+Chaîne2->Chaîne2
End
P+1->P
Output(P,1,Chaîne2
If P=8
Then
Pause
0->P
End
End


Par contre G pas compris en quoi c'est si bien de ne pas avoir de récursivité dans mes codes, c'était ironique? C cool parce que c'est plus rapide ?

De plus j'en vois de la récursivité :
3 boucles for sont mis les unes dans les autres dans la partie calcul du programme même si je fais tous dans une boucle générale qui utilise moin de ram d'apres ce que j'ai compris

En tout cas j'attend impaciement la suite : un prog basé sur ce prog la, qui traitra les mots de façon à supprimer les mot françois imposible, et donc laisser les mots prenonsables : l'utilisation de la fonction sous-chaine dans le prog sera importante mais avant ca il faut recopier ce code creer un nouveau sujet et peut etre améliorer ce prog la maintenant avec des principes plus complexes et meilleurs

Au fait mon premier clear memory + pas de câble -> pas de backups
-> programmes supprimés maxiangry.gif
A+

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 08 Oct 2013, 1:01   Citer 

Je ne sais pas où tu as trouvé des fraction sur 2, mais de toute façon ma formule était fausse depuis le début.
J'essaie de refaire le problème pour la science, mais si ton objectif est le poids plutôt que l'algorithme, tu pourra bien sûr garder ta somme, comme tu l'as dit c'est plus léger que le calcul.

D'après le mécanisme des retenues, j'écrit cette relation contenant la somme de 1 à M.
1+(L-1)*( L^M+L^(M-1)+...+L+1 ) = L^(M+1)
Puis je résous.
L^M+L^(M-1)+...+L+1 = ( L^(M+1)-1 )/(L-1)
Je décompose la somme de 1 à N-1 et N à M puis j'applique la formule précédente à N et je résous.
L^M+L^(M-1)+...+L^N+L^(N-1)+...+L+1 = (L^(M+1)-1)/(L-1)
L^(N-1)+...+L+1 = (L^N-1)/(L-1)
L^M+L^(M-1)+...+L^N = (L^(M+1)-1)/(L-1) - ( L^(N-1)+...+L+1 )
= (L^(M+1)-1)/(L-1) - (L^N-1)/(L-1)
= ( L^(M+1) - L^N )/(L-1)
Donc somme(L^x,x,N,M) = (L^(M+1)-L^N)/(L-1)

EDIT 8/10 : en fait j'ai retrouvé la série géométrique que j'aurais pu appliquer directement.


Tu peux enlever toute la préparation de L1 puisque tu affectes avec suite.
Et puis j'avais mentionné l'effacement (donc sous-entendu EffListe) de L1 plutôt que d'utiliser Remplir.

Moi je fais la récursivité avec deux programmes et des affectations à chaque imbrication. Toi tu le fais avec un seul programme. Tu as fais tellement plus simple que mon FACTZ dans ce type de crible...

Ton projet global me dépasse.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Mar 08 Oct 2013, 20:12   Citer 

RE

Tu connais pas Gauss ?
n*(n+1)/2= somme de tous les nombres compris entre 0 et n (n compris)

en fait 16 caractères suffisent:
-(M^2+M-N^2-N)/2

Ton calcul m'est incompréhensible: rassure moi tu parle bien du calcul du nombre de possibilités ?! (si c'est plutôt le calcul des différentes possibilités je tien à que tu m'explique car la lenteur du programme à l'affichage de toutes les possibilités est déconcertante : 6/16 secondes pour 8 codes)

sinon pour le projet général, je pensais mettre les mots "prononsables", pour cela il suffit de supprimer les cas où la suite de lettres se compose de :

4 ou plus consonnes à la suite
3 ou plus voillelles à la suite (sauf cas particulier que l'on ne va pas traiter car rare -> de l'eau
2 voillelles qui ne font pas partie d'exemples types eu au ou , ai oi
il faut aussi mieu traiter les consonnes -> h : ch, ph, début du mot
q -> avec u seulement


A +

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mar 08 Oct 2013, 20:33   Citer 

Tu risques de passer à côté de plusieurs possibilités en faisant cela:
_les mots qui ont un q mais pas de u existent (cinq par ex, donc un q en fin de mot ne devra pas être éliminé)
_les mots en eau y en a pas mal (oiseaux...)
_4 consonnes c'est possible (transcrire)

Donc il faudrait juste rajouter ces cas, sinon ça a l'air pas mal.

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 08 Oct 2013, 22:38   Citer 

Je parle bien du calcul du nombre de possibilités avec ma formule de somme.
La démonstration est tordue mais le résultat est simple.

Tu confonds les suites arithmétiques et géométriques.
*** Série de u(n)=u0+n*r arithmétique montrée par Gauss : Sn=(n+1)*(u0+un)/2
Elle donne pour la suite unitaire u(n)=n commençant à u1=1 : Sn=n(n+1)/2
*** Série de u(n)=u0*q^n géométrique : Sn=u0*(1-q^(n+1))/(1-q)=(u0-u(n+1))/(1-q)
Elle donne pour la somme des indices n à m : S(n,m)=(un-u(m+1))/(1-q)

D'ailleurs j'oubliais de simplement appliquer cette formule. Tant pis j'ai inventé une démonstration pour le coup.

Je parle du crible de test des possibilités lorsque je parle de récursivité.

Es-tu conscient que le For ne recalcule pas le paramètre Rép entre deux itérations ?

J'applique des choses simples. Pas encore regardé le crible entièrement.

Code
Input "CARACTERES",Chaîne1
Input "COMBIEN MAX",M
Input "COMBIEN MIN",N
Suite(A<=N,A,1,M->L1   // rien d'autre à faire puisqu'on affecte
Longeur(Chaîne1->L
0->P
For(A,N,M   // peut être remplacé par le calcul signalé à la place de Rép
L^A+Rép     //
End         //
Disp "POSSIBILITES :
Pause Rép   // Pause (L^(M+1)-L^N)/(L-1
EffEcr
For(A,1,Rép
1+L1(1->L1(1
For(B,2,M
If L+1=L1(B-1
Then
1+L1(B->L1(B 1->L1(B-1
1->L1(B-1
End
End
" "->Chaîne2
For(C,1,M
If 0!=L1(C
sous-Chaîne(Chaîne1,L1(C),1)+Chaîne2->Chaîne2
End
P+1->P
Output(P,1,Chaîne2
If P=8
Then
Pause
0->P
End
End



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Jeu 10 Oct 2013, 6:41   Citer 

Re
Le projet générateur de mot :
L'histoire du cas où q est à la fin ne m'embale pas plus que cela : montre moi 3 mots avec un q à la fin et je le rajouterais parmis la liste
Les eau(crazy.gif sont un oublie de ma part
Et pour le mot transcrire par exemple le n n'a pas la même fonction que les autres consonnes je le considere comme étant dans le groupe des voyelles si précédé d'un e, a, o, i, u et cette regle s'applique aussi pour le m

Pour ce scripte là (dsl G pas le temps de recopier et modifier le code)
Je voudrais savoir si la fonction suite( peut faire en sorte que le l1={0,1,1,1,1,0,0,0} pour n=5 et m=8 afin de ne pas avoir à mettre l'affichage avant le calcul

A+

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 10 Oct 2013, 13:40   Citer 

Autant faire un dictionnaire dans ce cas là. crazy.gif
Sans blague, je pense que ce genre de base de données de règles et d'exceptions n'est pas à la hauteur du langage TI-Basic voire même pas du processeur Z80.

Je me dis que dans la vie les codes n'ont pas toujours un sens, donc se baser sur un dictionnaire me parait absurde.

###

Bien sûr la suite permet de générer ce que tu veux pourvu que tu écrives la bonne expression de fonction explicite pour la suite.
Voici ma solution à ta demande:

Code
seq((X>1)(X<=N),X,1,M)



###

J'ai écrit une procédure extrêmement simple de crible, il ne manque plus que l'affichage et ton projet de discrimination.
Evidemment des choses sont cohérentes avec le tien.

Est-ce bien utile de déterminer à l'avance le nombre de possibilités ?
Je préfère détecter la retenue du poids fort.

Je préfère utiliser Ans=Rép dans la boucle d'affichage soit pour la chaîne soit pour la liste.


Code
Input "LETTRES:",Str1
length(Str1->L
Prompt N,M
1->X
ClrList L1
M->dim(L1
Repeat not(L1(1   //ou bien : Repeat not(X
1+L1(X->L1(X
If L<L1(X
Then
0->L1(X
X-1->X
Else
If X>=N
prgmCOMBIAFF
If X<M
X+1->X
End
End


Code
 // COMBIAFF //étoffer pour tester des situations improbables
" "
For(A,1,M
If L1(A
Ans+sub(Str1,L1(A),1
End
Output(1,1,Ans  // suppose X<128


Je viens de passer une heure à bidouiller un étoffement qui ne marche pas encore.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 11 Oct 2013, 21:10   Citer 

Voici une petite simplification et un étoffement : pour éliminer les excès de consonne suivant ton objectif.

Code
Input "LETTRES:",Str1
length(Str1->L
Prompt N,M
1->X
ClrList L1
M->dim(L1
While X      // c'est plus simple
1+L1(X->L1(X
If L<L1(X
Then
0->L1(X
X-1->X
Else
If X>=N
prgmCOMBIAFF
If X<M
X+1->X
End
End


Code
 // COMBIAFF //étoffer pour tester des situations improbables
" "
For(A,X,1,-1
sub(Str1,L1(A),1)+Ans
End
Ans->Str2
 // j'ai inversé le sens d'écriture pour placer l'espace à la fin de la liste
 // Sinon il faut affecter Q à 1 ci-après et supprimer l'espace à l'affichage
 // ou encore supprimer l'espace avant les discriminations.

0->G // mot juste

//// discrimine les quadruplets et plus de consonnes à l'aide des voyelles
0->Q // position
0->T // compte consonnes proches
Repeat Q>X or G
Q+1->Q
inString("AEIOUY",sub(Str2,Q,1->Z
If not(Z
T+1->T
If Z
0->T
If T>3
1->G
End

Disp ""  // défile l'écran // il faudra plutôt effacer, si mots >16 carac
If not(G
Output(1,1,Str2  // suppose X<129



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink