unieke code op basis van ascii codes.
Dit is nogal lang als eerste post maar ik hoop dat toch iemand een antwoord vindt =)
Ik zoek al een paar dagen naar een stukje code dat voor een woord een unieke cijfercode maakt op basis van elke letter in dat woord.
Ik maak een programma dat met behulp van een woordenlijst(.txt) , van door elkaar gehaalde woorden het originele woord kan geven.
vb : couprmte als input geeft computer(staat in de woordenlijst).
Om het juiste woord te vinden dacht ik er aan een cijfercode te laten maken voor zowel de input als de woordenlijst op basis van de ascii code van alle letters.
Ik had dit bedacht:
van elke letter uit het inputwoord wordt de ascii code genomen, deze worden opgeteld bij een variabele. Hetzelfde voor elk woord in de woordenlijst. Daarna wordt vergeleken. Als de 2 codes hetzelfde zijn is het woord gelijk:
voorbeeld:
couprmte : c(99) + o(111) + u(117) + p(112) + r(114) + m(109) + t(116) + e(101) = 879
van elk woord uit de woordenlijst wordt nu de 'code' berekend.
Nu vindt het programma dus: computer
maar.. het programma vindt ook tal van andere woorden die blijkbaar ook net uitkomen op 879 -_-
Weet iemand een wijziging in mijn uitrekencode waardoor elk woord als letterreeks echt uniek zou zijn? (ik heb al geprobeerd te vermenigvuldigen met de lengte van het woord maar ook dat geeft nog dubbels ^^).
PS. Ik hoop dat iemand ook maar iets snapt van wat ik allemaal probeer uit te leggen ^^
Alvast bedankt
~Geoffrey
Letter1 and Letter2 and Letter3 ..... dat wordt toch steeds hoger.
Letter1 xor Letter2 xor Letter3 ..... gaat denk ik beter.
Het is maar een gedachte.
Edit: Typo.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
en volgens mij geeft die xor methode een andere code voor computer en couprmte, deze twee woorden zouden dan weer wel dezelfde code moeten hebben.
mijn stukje code is nu gewoon:
Geoffrey schreef op 07.09.2007 19:59:
computer en couprmte
Dit geeft hetzelfde totaal en dezelfde code.
Edit: @Peter Dorn: Dat ziet er ook slim uit. Fantastisch.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
dus je bedoelt de letters van het woord alfabetisch laten zetten en dan de 2 nieuwe woorden vergelijken?
Daar had ik nog niet aan gedacht ^^
Toch zou ik ook een oplossing voor het 'unieke code systeem' willen weten =D ik denk er namelijk al een paar dagen over en hoop dat het met wat aanpassingen ook zo werkt.
Maar toch enorm bedankt want met die sorteermethode zou het inderdaad lukken!
voorbeeld:
a = 1
b = 2
c = 3
d = 4
e = 5
abba = 1221
De kans dat je dan een uniek woord tegen komt is nog steeds aanwezig, maar wel aanzienlijk kleiner.
Edit: dit getal vermenigvuldigen met de lengte van het woord maakt de kans nihil
Gewijzigd op 01/01/1970 01:00:00 door Peter Dorn
Ik heb ondertussen jouw code geprobeerd en het werkt trouwens perfect :)
Owja, niet aan gedacht :)
De unieke code is niet uniek ^^
De code voor Computer is bv dezelfde als die voor abcdef
Misschien kan ik nu het totaal vermenigvuldigen met $excl, ik denk dat dat wel een uniek getal geeft.. even proberen
EDIT: nog steeds niet, nu is het wel bijna uniek.
de code voor Flyers is nu hetzelfde als die van silver -_-
Gewijzigd op 01/01/1970 01:00:00 door Geoffrey
Geoffrey schreef op 07.09.2007 20:24:
@SanThe
De unieke code is niet uniek ^^
De code voor Computer is bv dezelfde als die voor abcdef
Misschien kan ik nu het totaal vermenigvuldigen met $excl, ik denk dat dat wel een uniek getal geeft.. even proberen
EDIT: nog steeds niet, nu is het wel bijna uniek.
de code voor Flyers is nu hetzelfde als die van silver -_-
De unieke code is niet uniek ^^
De code voor Computer is bv dezelfde als die voor abcdef
Misschien kan ik nu het totaal vermenigvuldigen met $excl, ik denk dat dat wel een uniek getal geeft.. even proberen
EDIT: nog steeds niet, nu is het wel bijna uniek.
de code voor Flyers is nu hetzelfde als die van silver -_-
Ja, maar dan is het totaal weer niet hetzelfde. Je moet ze wel beiden gebruiken. Die code heeft max maar 256 waarden. Anders zou dat het max aantal woorden zijn.
Edit: Je checkt eerst op het totaal. Is dat hetzelfde dan check je op de code.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
wat moet ik er dan mee doen? met $totaal en $excl
Totaal: 661 Code: 232 -- silver
Echt niet hetzelfde dus.
if($totaalzoekwoord == $totaalwoordenboekwoord and $codezoekwoord == $codewoordenboekwoord)
{
// hetzelfde
}
$var = silver
: Totaal: 661 Code: 232
$var = flyers
: Totaal: 661 Code: 232
Ik denk dat ik nu wel een 'bijna unieke code kan maken door bv' de som van totaal en code te vermenigvuldigen met de lengte van het woord ofzo.
EDIT: Verkeerd gedacht =/
Gewijzigd op 01/01/1970 01:00:00 door Geoffrey
Geoffrey schreef op 07.09.2007 20:46:
$var = silver
: Totaal: 661 Code: 232
$var = flyers
: Totaal: 661 Code: 232
: Totaal: 661 Code: 232
$var = flyers
: Totaal: 661 Code: 232
Ja, je hebt gelijk.