> Tous les forums > Forum Bureautique
 dictionnaire de scrabble 2015Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
galopin01
  Posté le 19/02/2015 @ 13:18 
Aller en bas de la page 
Astucien

bonjour,

j'ai pas mal cherché mais sans succès alors je me suis trouvé une méthode mais qui nécessite la transposition du mot dans un array à 2 dimensions.

Function MOTO(plage)
Dim i%, j%, k%, Mot$, NBE%, Y, Ys, Arr(15, 2), Vl

Mot = plage
NBE = Len(Mot)
For i = 1 To NBE
Arr(i, 1) = Mid(Mot, i, 1)
Next
Ys = True

k = NBE \ 2
Do While k <> 0
For i = 1 To NBE - k
j = i
Y = True
Do While j > 0 And Y
Y = False
If (Arr(j, 1) > Arr(j + k, 1) And Ys) Or (Arr(j, 1) < Arr(j + k, 1) And Not Ys) Then
Vl = Arr(j, 1)
Arr(j, 1) = Arr(j + k, 1)
Arr(j + k, 1) = Vl
Y = True
j = j - k
End If
Loop
Next i
k = k \ 2
Loop

Mot = ""
For i = 1 To NBE
Mot = Mot & Arr(i, 1)
Next
MOTO = Mot
End Function

Avez vous une méthode de tri plus simple ?

Merci !

A+



Modifié par galopin01 le 20/02/2015 15:32
Publicité
ferrand
 Posté le 19/02/2015 à 14:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Galopin,

Pas le temps de regarder en détail ta problématique (je dois absolument m'approvisionner si je ne veux pas dépérir et avec 3 heures en plus il faut qu'j'y aille maintenant). A l'énoncé j'aurais vu quelque chose comme ça :

Option Compare Text

Function MOTO(plage)
Dim i%, j%, n%, Mot$, arr()
Application.Volatile
Mot = plage
n = Len(Mot)
ReDim arr(n)
For i = 1 To n
arr(i) = Mid(Mot, i, 1)
Next i
For i = 1 To n - 1
For j = i + 1 To n
If arr(j) > arr(i) Then
arr(0) = arr(i)
arr(i) = arr(j)
arr(j) = arr(0)
End If
Next j
Next i
Mot = ""
For i = n To 1 Step -1
Mot = Mot & arr(i)
Next i
MOTO = Mot
End Function

Boogie Palace
 Posté le 19/02/2015 à 15:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour,

si le but est de faire court, y a ça de possible (peut-être moins abouti que vos versions, mais ça fonctionne).
l'objet collection ArrayList et sa méthode de tri sont bien plus courts à écrire que le tri à bulle (et presque aussi performant que le quicksort, même sur gros volumes)


Function MOTO(mot_à_trier)
Application.Volatile
n = Len(mot_à_trier)
Set LISTE = CreateObject("System.Collections.ArrayList")
For i = 1 To n: LISTE.Add Mid(mot_à_trier, i, 1): Next i
LISTE.Sort
For i = 1 To n: MOTO = MOTO & LISTE(i - 1): Next i
End Function


(oui, je triche un peu sur le nb de lignes avec les ":", mais c'est aussi plus lisible sur le forum sans indentation)

galopin01
 Posté le 19/02/2015 à 16:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour Ferrand, Boogie,

Le but c'est de trier 300 000 mots environ sans y passer la semaine...

Je vais tester !



Modifié par galopin01 le 19/02/2015 16:41
galopin01
 Posté le 19/02/2015 à 16:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bon, finalement je garde les 3 solutions.

Merci et bonne soirée.

Edit : Je donne ici le résultat de mes péripéties avec VBA.

Un dictionnaire de scrabble qui donne -pour un tirage donné- toutes les combinaisons valides.

Euh... C'est pas nouveau, on en trouve un peu partout sur le net. Le seul mérite de celui-ci est d'être complétement autonome.

De plus le code n'étant pas protégé, les amateurs de jeux de lettres pourront aisément en récupérer la base pour alimenter leur production...

A+



Modifié par galopin01 le 20/02/2015 17:00
ferrand
 Posté le 20/02/2015 à 23:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Merci pour le dico !

Une autre version de la fonction, n'utilisant pas de tableau.

Option Compare Text

Function MOTO(plage)
Dim i%, j%, n%, Mot$, L$
Application.Volatile
Mot = plage
n = Len(Mot)
For i = 1 To n - 1
For j = i + 1 To n
If Mid(Mot, j, 1) < Mid(Mot, i, 1) Then
L = Mid(Mot, i, 1)
Mid(Mot, i, 1) = Mid(Mot, j, 1)
Mid(Mot, j, 1) = L
End If
Next j
Next i
MOTO = Mot
End Function

Aucune idée de l'efficacité relative (ça reste du tri à bulles).

galopin01
 Posté le 21/02/2015 à 02:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Etonnant !

j'ai testé les 4 solutions sur une liste de 17000 mots :

Celle de Boogie tourne en 10" environ

Les 3 autres en 1"4 (en moyenne)

Avec un léger avantage pour la dernière solution (tri à bulle) : 1"3 !

Merci à tous.

A+

Boogie Palace
 Posté le 23/02/2015 à 18:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bah mince alors, moi qui avais abandonné les tris à bulles au profit des collections ArrayList, à cause des performances justement...
bon, bah j'ai pas été très utile sur ce coup là (10 secondes, la honte !).

Carlvb
 Posté le 23/04/2015 à 21:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

J'ai créé une version Excel du jeu (sans installation, sans DLL, juste un dico qui est fourni dans le zip et à décompresser dans le même répertoire, si cela vous intéresse.

Le lien est http://cjoint.com/?EDxvFw0d7kN

Merci d'avance.

Carlvb

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
Batterie externe OUKITEL P2001 Ultimate 2000Wh, 2000W, LifePOE4 à 1226,34 €
1226,34 € 2199 € -44% @Geekbuying
Sélection de T-Shirts Top Gun, Minecraft, Stranger Things, Marvel, Disney, Fender à 16,99 €
16,99 € 19,99 € -15% @Amazon
Lecteur/graveur de CD/DVD externe USB à 19,55 €
19,55 € 25 € -22% @Amazon
Ecran 32 pouces incurvé KTC H32S17 (QHD, 165 Hz, 1 ms, HDR10) à 239 €
239 € 350 € -32% @Amazon
Microsoft Office 2021 Professional Plus OEM à 0,90 €
0,90 € @Rakuten
Windows 10/11 Pro 32/64 bits OEM à 0,90 €
0,90 € @Rakuten
LEGO Harry Potter La Chambre des Secrets de Poudlard (76389) à 99,90 €
99,90 € 149 € -33% @Amazon
-7 € dès 20 € pour une première livraison en point de retrait Amazon (selon éligibilité)
-7 € @Amazon
Portable 16 pouces Lenovo Legion 5i Pro (WQXGA 165Hz, Core i7, 32Go DDR5, 1To SSD, RTX3070) à 1599 €
1599 € 2299 € -30% @Lenovo
Prise connectée Wi-Fi QNCX (16A, suivi de consommation, Tuya) à 7,21 €
7,21 € 15 € -52% @AliExpress

Sujets relatifs
Free Ashampoo Snap 2015 (100% discount)
Recherche d'un programme / Problème dictionnaire Kindle
Ou trouver un dictionnaire français ?
Office 2010 : correction auto+dictionnaire+ruban
Dictionnaire des synonymes Word
dictionnaire pour foxmail
dictionnaire anglais français
Dictionnaire dans Outlook
Dictionnaire word97 en Anglais!
dictionnaire word
Plus de sujets relatifs à dictionnaire de scrabble 2015
 > Tous les forums > Forum Bureautique