Jump to content

scrabble code


Recommended Posts

Έκανα κάποιες αλλαγές στα προγράμματα και τα αφαίρεσα από τα attachments μου για να μην μου ποιάνουν χώρο.

 

Τα νέα προγράμματα είναι αυτά, επιπλέον βάζω και ένα αρχείο zip του λεξικού του OpenOffice3.

Μπορείτε να το αποσυμπιέσετε και να τοποθετήσετε το αρχείο oo3.1.1-dic.txt στο φάκελο εγκατάστασης που λογικά αν δεν αλλάξετε τίποτα θα είναι C:\Program Files\Anagramatismos και C:\Program Files\ReverseLexarithm

 

οπότε θα έχετε δύο Ελληνικά λεξικά.

Edited by dimulator
Link to comment
Share on other sites

  • Replies 61
  • Created
  • Last Reply

Top Posters In This Topic

παιδιά επειδή τα προγράμματα αργούσαν υπερβολικά και μάλλον ήταν δυσχρειστα τα άλλαξα.

Τώρα τα λεξικά φορτώνονται στην μνήμη και η εύρεση γίνεται σε αυτήν αντί σε αρχείο.

Πράγμα που σημαίνει ότι η ταχύτητα βελτιώθηκε κατά πάρα πολύ.

Αναμένετε την μάλλον τελική έκδοση! Μόλις ανεβάσω τα νέα αρχεία τα παλιά θα τα σβήσω γιατί μου ποιάνουν χώρο στα attachments!

Link to comment
Share on other sites

Λοιπόν τα προγράμματα τα έκανα και setup και τρέχουν γρήγορα πλέον!

 

Το πρόγραμμα Εγκατάστασης Αναγραμματισμός

Ο κώδικας του προγράμματος Αναγραμματισμός

 

Το πρόγραμμα Εγκατάστασης ReverseLexarithm

Ο κώδικας του προγράμματος ReverseLexarithm

 

Όποιος δεν τα βρει αν στο μέλλον χαθούν τα λινκς ας επικοινωνήσει μαζί μου με email ή πμ.

Link to comment
Share on other sites

Ωραίος φίλε μου!

Αν και δεν μου χρειάζεται κάτι τέτοιο μου άρεσε πολύ η κινηση σου!

Μπράβο!

Link to comment
Share on other sites

Εν τω μεταξύ, για όσους βαριούνται να εγκαταθιστούν πρόγραμμα, οι αναγραμματισμοί σε javascript. Τρέχει μέσα στον browser. Εννοείται πως πάει σα χελώνα για πάνω από 5 γράμματα.

anagrams.html

Link to comment
Share on other sites

Κοίτα, αν είχα χρόνο αυτό το ΣΚ, θα το έφτιαχνα σε Java.

 

Πάντως το πρόβλημα, ενώ είναι απλό στη σύλληψη, δημιουργεί προβλήματα ανάλογα με τις απαιτήσεις που έχεις από το σχεδιασμό.

 

Π.χ. πως λύνεις το πρόβλημα του να βρεις φράσεις που συμφωνούν με τον αναγραμματισμό; Έχω βρει δυο-τρία προβλήματα που καραδοκούν στην πορεία! :wink:

Link to comment
Share on other sites

φρασεις;

 

Κάτσε αν μιλαμε για φράσεις λογικά θα πρέπει να είναι έτοιμες σαν string κάπου και να συγκρίνεις τα 2 string.

 

εγώ για παράδειγμα έβαλα το λεξικό του apell σε ένα txt και διάβαζα κάθε γραμμή και την σύγκρινα με κάθε αναγραμματισμό.

Αν τα στρινγκς ήταν ίδια τα πρόσθετα στις λέξεις που βρέθηκαν

Edited by dimulator
Link to comment
Share on other sites

Έχεις προχωρήσει. Πρώτα πρέπει να βρούμε τις φράσεις.

 

Ας πούμε το ΑΒΑΠΤΙΣΤΟ αναγραμματίζεται στη φράση ΠΙΤΑ ΒΑΤΟΣ, ΒΙΤΣΑ ΠΑΤΟ κ.α. τέτοια χαριτωμένα. Δεν έχουν νόημα, αλλά ένα πλήρες πρόγραμμα αναγραμματισμών θα τις έβρισκε.

 

Μπορούμε λοιπόν να χρησιμοποιήσουμε τον ίδιο ακριβώς αλγόριθμο, προσθέτοντας ένα κενό στο string αναζήτησης. Βεβαίως, τότε, θα έβγαζε κάθε φράση δύο φορές, αφού άλλο ΠΙΤΑ ΒΑΤΟΣ κι άλλο ΒΑΤΟΣ ΠΙΤΑ. Τι κάνεις εκεί;

 

Πρόσεξε τώρα τι άλλοι πονοκέφαλοι υπάρχουν: η λέξη ΑΒΑΠΤΙΣΤΟ έχει 9 γράμματα, άρα 362,880 αναγραμματισμούς. Αν προσθέσεις ένα γράμμα, δημιουργείς ακόμα 3,628,800 αναγραμματισμούς. Αν θες να δεις φράσεις των τριών λέξεων, δημιουργείς επιπλέον 39,916,800 αναγραμματισμούς, σύνολο κάπου 43 εκατομμύρια. Οι μισοί περίπου από τους 3,628,800 θα είναι άχρηστοι, αφού θα είναι οι ίδιοι με αντιμετάθεση λέξεων, ενώ μόνο το ένα έκτο από τους 39,916,800 θα είναι χρήσιμοι, για τον ίδιο λόγο. Πρόσθεσε τώρα πως, για κάθε αναγραμματισμό, θα πρέπει να «χτυπάς» το aspell για να βρεις αν υπάρχει αυτή η λέξη.

 

Καλός πονοκέφαλος; :)

 

ΔΙΟΡΘΩΣΗ-ΣΥΜΠΛΗΡΩΣΗ: Φαντάσου πως, για τους αναγραμματισμούς των δύο λέξεων, θα πρέπει να «χτυπήσεις» το λεξικό 7,257,600 φορές, ενώ για τους αναγραμματισμούς 3 λέξεων, 119,750,400 φορές! Συνολικά, θα πρέπει να κάνεις πάνω από 126 εκατομμύρια αναζητήσεις στο λεξικό.

 

Ακόμα χειρότερα, από όσο είδα στον κώδικα, κάνεις σειριακή αναζήτηση. Το aspell έχει καταχωρημένες κάπου 400.000 λέξεις. Μέσος όρος, 200.000 αναζητήσεις ανά «χτύπημα» του λεξικού, άρα, το πρόγραμμα θα χρειαστεί να σκανάρει το λεξικό περίπου 25 δισεκατομμύρια φορές!

 

Καλό, ε;

Edited by Τράγου Κέρατο
Link to comment
Share on other sites

Πριτς! Εδώ είναι το ενδιαφέρον!

 

Λοιπόν, βρήκα το χρόνο, έκανα ένα implementation του σε Java και του έβαλα και μερικά metrics. Λείπει η λίστα των λέξεων, αλλά θα μιλήσουμε και γι'αυτήν.

 

Ένα απλό τρέξιμο του προγράμματος με τη λέξη «ΑΒΓΟ» δίνει τα παρακάτω αποτελέσματα:

 

ΑΒΓΟ
ΓΟΒΑ
TimeMillis: 13935
Anagram Iterations: 24
Dictionary Lookups: 8824795

anagrams.zip

Edited by Τράγου Κέρατο
Link to comment
Share on other sites

Πριτς! Εδώ είναι το ενδιαφέρον!

 

Λοιπόν, βρήκα το χρόνο, έκανα ένα implementation του σε Java και του έβαλα και μερικά metrics. Λείπει η λίστα των λέξεων, αλλά θα μιλήσουμε και γι'αυτήν.

 

Ένα απλό τρέξιμο του προγράμματος με τη λέξη «ΑΒΓΟ» δίνει τα παρακάτω αποτελέσματα:

 

ΑΒΓΟ
ΓΟΒΑ
TimeMillis: 13935
Anagram Iterations: 24
Dictionary Lookups: 8824795

 

οκ ολοκλήρωσε το αν θέλεις... την λίστα μπορείς να την κάνεις από το aspell με dump σε txt ή αν θέλεις να χρησιμοποιήσεις κάποια δικιά μου

 

εμένα δεν μου βγάζει αναγραμματισμούς αλλά αυτό όταν το τρέχω από το IDE

run:
TimeMillis: 15
Anagram Iterations: 24
Dictionary Lookups: 0
BUILD SUCCESSFUL (total time: 0 seconds)

 

και αυτο από cmd

c:\java -jar Anagrams.jar
TimeMillis: 15
Anagram Iterations: 24
Dictionary Lookups: 0

oo3.1.1-dic.zip

Edited by dimulator
Link to comment
Share on other sites

ίσως το θέμα του ψαξίματος γίνει εύκολα με ένα grep patern sDictionary

όπου sDictionary μια μεταβλητή που περιέχει όλο το λεξικό.

 

Πώς φαίνεται αυτό?

 

Προσπάθησα να φορτώσω το λεξικό σε μια μεταβλητή στην vb5 αλλά κάτι δεν πάει καλά και δεν ξεκινάει καν.

 

Μετά το φόρτωμα στην μεταβλητή ήθελα να κάνω ένα ψάξιμο με το Like.

Αυτό θα έβρησκε αν μέσα στην μεταβλητή περιέχεται η λέξη.

Αν περιέχεται τότε θα την πρόσθετα στην λίστα.

 

Αλλά δεν μπόρεσα να φτάσω καν στο σημείο αυτό.

 

Από την άλλη έψαχνα τρόπο να συνδέσω την grep με την vb5 αλλά μάταια δεν βρήκα τίποτα.

Link to comment
Share on other sites

  • 2 months later...

Λοιπόν όσοι έχουν Linux έκανα το πρόγραμμα του Αναγραμματισμού στην Gambas.

 

ιδου ο κώδικας

 

' Gambas class file
PUBLIC sFile AS File
PUBLIC sMyFile AS String = "anagram.tmp"    'Set Name for tmp file

PUBLIC SUB Form_Close()

 QUIT 'end application

END


PUBLIC SUB Form_Open()

DIM File AS String

'Clear Combo1
ComboBox1.Clear


 FOR EACH File IN Dir(Application.Path, "*.txt").Sort()
   ComboBox1.Add(File)
 NEXT

END


PUBLIC SUB Button1_Click()

DIM iLen AS Integer                      'Set word length
DIM w AS Float = 0
DIM sArray AS String[] = ["init"] 'Set an array
DIM i AS Integer
DIM hFile AS File
DIM sTmp AS String

sArray.Clear 'clear array from init value

Button1.Enabled = FALSE
FMain.Mouse = Mouse.Wait

iLen = String.Len(TextBox1.Text)
FOR i = 0 TO (iLen - 1)                       'Split word into letters and put every letter in array
sArray.Add(String.Mid(TextBox1.Text, i + 1, 1))
NEXT

TextArea1.Text = ""                         'Reset and clear output textbox to be ready to get new results

IF Exist(Application.Path & "/" & sMyFile) THEN
 KILL Application.Path & "/" & sMyFile
END IF

'Open file for writing
sFile = OPEN (Application.Path & "/" & sMyFile) FOR CREATE 
 anag(0, iLen, sArray.Copy())            'Make anagrams 
CLOSE #sFile

Button1.Enabled = TRUE
FMain.Mouse = Mouse.Default

END

PRIVATE FUNCTION anag(iStart AS Integer, iLen AS Integer, sArray AS String[]) 'vars are ByVal by default
DIM j AS Integer
DIM tmp AS String
DIM word AS String

    IF iStart < iLen THEN
        j = iStart
        WHILE (j < iLen)

            IF (j = iStart OR sArray[j] <> sArray[iStart]) THEN
                tmp = sArray[j]
                sArray[j] = sArray[iStart]
                sArray[iStart] = tmp
                anag((iStart + 1), iLen, sArray.Copy()) 'recursion does not work properly
            END IF

        j = j + 1
        WEND

    ELSE
        word = implode(sArray)
        TextArea1.Text = TextArea1.Text & word & gb.NewLine
        PRINT #sFile, word 'write to anagram.tmp the result
  END IF

END 


PRIVATE FUNCTION implode(sArray AS Array) AS String
'This function makes a string from the elements of a string array
DIM i AS Integer
DIM word AS String

FOR i = 0 TO (sArray.Length - 1)
word = word & sArray[i]
NEXT

RETURN word
END 

PUBLIC SUB Button2_Click()

DIM sCommand AS String

'Clear old text, get ready for new results
TextArea2.Text = ""

'If there is at least one word in Text2 search in dictionary
IF Len(TextArea1.Text) > 0 THEN

   FMain.Mouse = Mouse.Wait
   Button1.Enabled = FALSE
   Button2.Enabled = FALSE
   ComboBox1.Enabled = FALSE
   TextBox1.Enabled = FALSE

   Label5.Text = "Searching..."

'new grep method2 no need sDictionary
   'grep -w -f anagram.tmp dic-merge21.txt
   sCommand = "grep -w -f " & Application.Path & "/" & sMyFile & " " & Application.Path & "/" & ComboBox1.Text
   SHELL sCommand TO TextArea2.Text

   Label5.Text = "Finish searching!"

   FMain.Mouse = Mouse.Default
   Button1.Enabled = TRUE
   Button2.Enabled = TRUE
   ComboBox1.Enabled = TRUE
   TextBox1.Enabled = TRUE

ELSE
   'Inform user that there is nothing to search
   Message.Info("There are no words to search!")
ENDIF

END

 

 

εδώ είναι και το πρόγραμμα για όσους το θέλουν

http://www.mediafire.com/?4jmykdwy31k

Edited by dimulator
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share


×
×
  • Create New...