Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » comparer liste et variable
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

comparer liste et variable

Posté le 21/11/2019 19:59

je veux comparer rapidement les données d'une liste avec une variable, mais la manière dont je m'y prend est trop lente. Auriez vous une piste ou un bout de code ? (voir directement effacer les données d'une liste en double)


1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 21/11/2019 20:02 | #


Il faut que tu expliques ce que tu veux, car il y a plusieurs façons de comparer une liste avec une variable.

• Tu veux vérifier que tous les éléments de la liste sont égaux à la variable ?
• Tu veux savoir si la valeur de la variable est présente dans la liste ?
• Tu veux trouver l'indice de la première occurrence de la valeur de la variable ?
• Tu veux trouver les indices de toutes les occurrences de la valeur de la variable ?

(voir directement effacer les données d'une liste en double)

Est-ce que c'est acceptable de changer l'ordre de la liste en même temps qu'on enlève les doublons ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 21/11/2019 20:06 | #


ma liste stocke toute les coordonnées et types des objets posés sur la map, donc le changement de l'ordre n'a aucune importance. j'ai besoin d'avoir tout le nombre car je stocke comme ceci : 2(type d'objet),3(coo en Y)16(coo en X) ou 2.316
Etudiant en informatique à l'Umons, fan de prog en tout genre
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 21/11/2019 20:19 | #


Voilà un code qui élimine tous les doublons de la liste 1.

• Je suppose que la liste 2 est disponible pour calculer.
• Je suppose que 0 est une valeur qui n'apparaît pas dans la liste 1 (et toutes les valeurs sont positives).

{1,1,8,4,6,7,8,8,5,4,8}→List 1

SortA(List 1)
Augment(List 1,{0})→List 2
Augment({0},List 1)→List 1
List 1≠List 2→List 2
List 1×List 2→List 1
SortD(List 1)
Seq(List 1[X],X,1,Sum List 2-1,1)→List 1

// List 1={8,7,6,5,4,1}

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 21/11/2019 20:22 | #


et si les 26 listes sont prises ?
Etudiant en informatique à l'Umons, fan de prog en tout genre
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 21/11/2019 20:26 | #


Dim List 1->L
L->Dim List 2 //Create temp list with the same size as one we are testing
Fill(A,List 2 //A is the variable you're testing
List 1=List 2
Sum List Ans->N//This tells you have many times your variable appears in the list
//This is if you want the location of that number in the list
Seq(X,X,1,L,1->List 2
List 2List Ans
Sum List Ans->P //This tells you the Postion of the number, but wont work if there is multiple instances of that number

If your list is only 5 long or so, going through each element with a for loop might be faster
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 21/11/2019 20:29 | #


Juste pour clarifier, le code de Redcmd ci-dessus cherche la valeur de A dans la liste, ce qui est différent de mon code.

Youstones a écrit :
et si les 26 listes sont prises ?

Et bien ça marche quand même !

{1,1,8,4,6,7,8,8,5,4,8}→List 1

SortA(List 1)
Augment(List 1,{0})
List Ans×(List Ans≠Augment({0},List 1))→List 1
SortD(List 1)
Seq(List 1[X],X,1,Sum (List 1≠0),1)→List 1

// List 1={8,7,6,5,4,1}

Edit: amélioré le temps de calcul en utilisant la liste Ans.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 21/11/2019 20:30 | #


bon et bien je vais essayer ça je vois si ça boost mon jeu...

Ajouté le 21/11/2019 à 20:32 :
https://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=3969
sinon tu peux le télécharger et me dire si ça passera ? (si ce n'est pas trop demander)

Ajouté le 02/12/2019 à 19:22 :
Re ça ne convient pas à mon jeu ! Désolé d'être cash mais je vais essayer de reformuler extrêmement clairement précisément ce que je voulais comme application (maintenant que j'ai des listes) :

Notre personnage voyage sur la carte quand il voit un magnifique diamant devant lui. Il le mine et rajoute dans la liste ceci : 0,513 (0 est le type, 5 la profondeur et 13 sur l'axe x)
Mais lorsque notre perso fait un aller retour pour aller vendre ce précieux, il voit le diamant réapparaître et disparaître juste ensuite !
(car il extrait de la liste la co du diamant, puis du vide fait par la pioche)
Et ce que je veux, c'est que cette hallucination disparaisse...
Etudiant en informatique à l'Umons, fan de prog en tout genre
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 02/12/2019 19:25 | #


C'est un problème dans ton programme ça, pas un problème de listes. D'abord, traduis ça en le problème associé sur la liste, et la solution sera plus claire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 02/12/2019 20:31 | #


Mais je ne vois pas comment ?
Etudiant en informatique à l'Umons, fan de prog en tout genre
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 02/12/2019 20:33 | #


Hé hé, je ne sais jamais répondre à cette question... c'est trop naturel pour moi...

Ton programme ne "marche pas bien" car il autorise le diamant à rester dans la liste. Si j'ai bien compris, tu ne fais que mettre du vide dessus, alors que la vérité c'est qu'il n'y a plus de diamant du tout.

Donc, il me semble que ton problème c'est que tu as inséré dans ta liste un objet disant "fais comme si le diamant n'était pas là" au lieu de supprimer le diamant pour de vrai.

Ça c'est un problème sur les listes, tu vois.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 02/12/2019 20:45 | #


Oui c'est vrai mais si j'ai une liste de 10 minerais, je dois vérifier si les co sont déjà comprises à chaque frame... Et ça peut monter jusque plusieurs douzaine de coordonnées a vérifier...
Etudiant en informatique à l'Umons, fan de prog en tout genre
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 02/12/2019 21:00 | #


Si les "co" ? Je ne vois pas pourquoi tu aurais besoin de le faire à chaque frame, plutôt que juste quand on crée ou détruit des minerais.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 02/12/2019 21:15 | #


Oui c'est ce que je voulais dire mais c'est lent de faire ça...

Sinon je peux essayer de le post mtn...
Etudiant en informatique à l'Umons, fan de prog en tout genre
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 02/12/2019 21:54 | #


Qu'est-ce qui serait lent exactement ? Écris-le de façon claire, tu verras, ça résoud la moitié du problème.

(Je suis à peu près sûr que quoi que tu essaies de faire, je sais le faire efficacement, mais faut bien poser le problème.)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 03/12/2019 06:52 | #


Supprimer le diamant de la liste serait encore plus simple, met la valeur à 0 et teste au début de ton code de dessin la valeur (si valeur supérieure à 0 dessiner diamant).
Si ça ne te convient toujours pas, et pour tes prochaines questions, donne le problème, pas la solution que tu penses avoir et n'arrives pas à implémenter
ouais ouais
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 03/12/2019 06:57 | #


Quand je mine sur la carte, je pars et que je reviens, tout apparaît au fur et à mesure comme une histoire...

Etudiant en informatique à l'Umons, fan de prog en tout genre
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 03/12/2019 07:15 | #


1) Ne supprime pas le topic, c'est horrible de tout faire sur la page d'un programme.

2) Que se passe-t-il concrètement quand tu "mines" sur la carte ?
À quoi sert la variable à comparer ?
ouais ouais
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 03/12/2019 07:45 | #


Chaque fois que la pioche ou l'échelle est utilisée, il stocke le type et le coordonnées de celui ci avec les minerais qui ont été générée dans une liste dédié à un "écran" car ma méthode est de générer de la terre partout (des 1 dans la matrice) et puis de lire dans la liste ce qui a été changé et le placer (9 à la place de 1 pour le diamant par exemple)

La solution que j'avais serai que si on revient dans un "écran" déjà visité, il efface les ancienne coordonnées des minerais pour le remplacer par du vide ou des échelles...
Etudiant en informatique à l'Umons, fan de prog en tout genre
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 03/12/2019 07:47 | #


Youstones a écrit :
Chaque fois que la pioche ou l'échelle est utilisée, il stocke le type et le coordonnées de celui ci avec les minerais qui ont été générée dans une liste dédié à un "écran" car ma méthode est de générer de la terre partout (des 1 dans la matrice) et puis de lire dans la liste ce qui a été changé et le placer (9 à la place de 1 pour le diamant par exemple)

La solution que j'avais serai que si on revient dans un "écran" déjà visité, il efface les ancienne coordonnées des minerais pour le remplacer par du vide ou des échelles...

Étant donné que tu n'as que 6 écrans de 21×7, pourquoi ne pas tout stocker dans une matrice ? Ce n'est pas économe en mémoire mais tu peux la supprimer à la sortie du jeu et c'est rapide.
ouais ouais
Youstones Hors ligne Membre Points: 333 Défis: 0 Message

Citer : Posté le 03/12/2019 07:54 | #


Non car je vais augmenter progressivement vers une map gigantesque
Etudiant en informatique à l'Umons, fan de prog en tout genre
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 309 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd