dimulator Posted November 11, 2009 Author Report Share Posted November 11, 2009 (edited) Έκανα κάποιες αλλαγές στα προγράμματα και τα αφαίρεσα από τα attachments μου για να μην μου ποιάνουν χώρο. Τα νέα προγράμματα είναι αυτά, επιπλέον βάζω και ένα αρχείο zip του λεξικού του OpenOffice3. Μπορείτε να το αποσυμπιέσετε και να τοποθετήσετε το αρχείο oo3.1.1-dic.txt στο φάκελο εγκατάστασης που λογικά αν δεν αλλάξετε τίποτα θα είναι C:\Program Files\Anagramatismos και C:\Program Files\ReverseLexarithm οπότε θα έχετε δύο Ελληνικά λεξικά. Edited November 11, 2009 by dimulator Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 11, 2009 Author Report Share Posted November 11, 2009 παιδιά επειδή τα προγράμματα αργούσαν υπερβολικά και μάλλον ήταν δυσχρειστα τα άλλαξα. Τώρα τα λεξικά φορτώνονται στην μνήμη και η εύρεση γίνεται σε αυτήν αντί σε αρχείο. Πράγμα που σημαίνει ότι η ταχύτητα βελτιώθηκε κατά πάρα πολύ. Αναμένετε την μάλλον τελική έκδοση! Μόλις ανεβάσω τα νέα αρχεία τα παλιά θα τα σβήσω γιατί μου ποιάνουν χώρο στα attachments! Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 11, 2009 Author Report Share Posted November 11, 2009 Λοιπόν τα προγράμματα τα έκανα και setup και τρέχουν γρήγορα πλέον! Το πρόγραμμα Εγκατάστασης Αναγραμματισμός Ο κώδικας του προγράμματος Αναγραμματισμός Το πρόγραμμα Εγκατάστασης ReverseLexarithm Ο κώδικας του προγράμματος ReverseLexarithm Όποιος δεν τα βρει αν στο μέλλον χαθούν τα λινκς ας επικοινωνήσει μαζί μου με email ή πμ. Quote Link to comment Share on other sites More sharing options...
Sucore Posted November 12, 2009 Report Share Posted November 12, 2009 Ωραίος φίλε μου! Αν και δεν μου χρειάζεται κάτι τέτοιο μου άρεσε πολύ η κινηση σου! Μπράβο! Quote Link to comment Share on other sites More sharing options...
Τράγου Κέρατο Posted November 14, 2009 Report Share Posted November 14, 2009 Εν τω μεταξύ, για όσους βαριούνται να εγκαταθιστούν πρόγραμμα, οι αναγραμματισμοί σε javascript. Τρέχει μέσα στον browser. Εννοείται πως πάει σα χελώνα για πάνω από 5 γράμματα. anagrams.html Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 14, 2009 Author Report Share Posted November 14, 2009 καλό!!! Αν και στα 6 γράμματα κολάει ο browser Μπορείς να το κανεις κάτι ως applet ή java jar? Quote Link to comment Share on other sites More sharing options...
Τράγου Κέρατο Posted November 14, 2009 Report Share Posted November 14, 2009 Κοίτα, αν είχα χρόνο αυτό το ΣΚ, θα το έφτιαχνα σε Java. Πάντως το πρόβλημα, ενώ είναι απλό στη σύλληψη, δημιουργεί προβλήματα ανάλογα με τις απαιτήσεις που έχεις από το σχεδιασμό. Π.χ. πως λύνεις το πρόβλημα του να βρεις φράσεις που συμφωνούν με τον αναγραμματισμό; Έχω βρει δυο-τρία προβλήματα που καραδοκούν στην πορεία! :wink: Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 14, 2009 Author Report Share Posted November 14, 2009 (edited) φρασεις; Κάτσε αν μιλαμε για φράσεις λογικά θα πρέπει να είναι έτοιμες σαν string κάπου και να συγκρίνεις τα 2 string. εγώ για παράδειγμα έβαλα το λεξικό του apell σε ένα txt και διάβαζα κάθε γραμμή και την σύγκρινα με κάθε αναγραμματισμό. Αν τα στρινγκς ήταν ίδια τα πρόσθετα στις λέξεις που βρέθηκαν Edited November 14, 2009 by dimulator Quote Link to comment Share on other sites More sharing options...
Τράγου Κέρατο Posted November 14, 2009 Report Share Posted November 14, 2009 (edited) Έχεις προχωρήσει. Πρώτα πρέπει να βρούμε τις φράσεις. Ας πούμε το ΑΒΑΠΤΙΣΤΟ αναγραμματίζεται στη φράση ΠΙΤΑ ΒΑΤΟΣ, ΒΙΤΣΑ ΠΑΤΟ κ.α. τέτοια χαριτωμένα. Δεν έχουν νόημα, αλλά ένα πλήρες πρόγραμμα αναγραμματισμών θα τις έβρισκε. Μπορούμε λοιπόν να χρησιμοποιήσουμε τον ίδιο ακριβώς αλγόριθμο, προσθέτοντας ένα κενό στο 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 November 14, 2009 by Τράγου Κέρατο Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 14, 2009 Author Report Share Posted November 14, 2009 απλό αφού τα νούμερα και οι απαιτήσεις είναι τόσες δεν το κάνεις... Quote Link to comment Share on other sites More sharing options...
Τράγου Κέρατο Posted November 15, 2009 Report Share Posted November 15, 2009 (edited) Πριτς! Εδώ είναι το ενδιαφέρον! Λοιπόν, βρήκα το χρόνο, έκανα ένα implementation του σε Java και του έβαλα και μερικά metrics. Λείπει η λίστα των λέξεων, αλλά θα μιλήσουμε και γι'αυτήν. Ένα απλό τρέξιμο του προγράμματος με τη λέξη «ΑΒΓΟ» δίνει τα παρακάτω αποτελέσματα: ΑΒΓΟ ΓΟΒΑ TimeMillis: 13935 Anagram Iterations: 24 Dictionary Lookups: 8824795 anagrams.zip Edited November 15, 2009 by Τράγου Κέρατο Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 15, 2009 Author Report Share Posted November 15, 2009 (edited) πες ένα καλό Java IDE για να το κάνω compile, δεν το θυμάμαι jboss, ledit ήταν κάτι τετοιο... ok το βρήκα JDK + NetBeans Edited November 15, 2009 by dimulator Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 15, 2009 Author Report Share Posted November 15, 2009 (edited) Πριτς! Εδώ είναι το ενδιαφέρον! Λοιπόν, βρήκα το χρόνο, έκανα ένα 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 November 15, 2009 by dimulator Quote Link to comment Share on other sites More sharing options...
dimulator Posted November 16, 2009 Author Report Share Posted November 16, 2009 ίσως το θέμα του ψαξίματος γίνει εύκολα με ένα grep patern sDictionary όπου sDictionary μια μεταβλητή που περιέχει όλο το λεξικό. Πώς φαίνεται αυτό? Προσπάθησα να φορτώσω το λεξικό σε μια μεταβλητή στην vb5 αλλά κάτι δεν πάει καλά και δεν ξεκινάει καν. Μετά το φόρτωμα στην μεταβλητή ήθελα να κάνω ένα ψάξιμο με το Like. Αυτό θα έβρησκε αν μέσα στην μεταβλητή περιέχεται η λέξη. Αν περιέχεται τότε θα την πρόσθετα στην λίστα. Αλλά δεν μπόρεσα να φτάσω καν στο σημείο αυτό. Από την άλλη έψαχνα τρόπο να συνδέσω την grep με την vb5 αλλά μάταια δεν βρήκα τίποτα. Quote Link to comment Share on other sites More sharing options...
dimulator Posted January 22, 2010 Author Report Share Posted January 22, 2010 (edited) Λοιπόν όσοι έχουν 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 January 22, 2010 by dimulator Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.