unieke code op basis van ascii codes.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Geoffrey

Geoffrey

07/09/2007 19:39:00
Quote Anchor link
Hej

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
 
PHP hulp

PHP hulp

29/04/2024 10:26:52
 
- SanThe -

- SanThe -

07/09/2007 19:47:00
Quote Anchor link
Bijvoorbeeld

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 -
 
Peter Dorn

Peter Dorn

07/09/2007 19:56:00
Quote Anchor link
Wat je kan proberen is de input en de resultaten sorteren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$input = str_split( $input ); asort( $input );

foreach ( $results as $result )
{
    $result = str_split( $result ); asort( $result );
    if ( $result == $input ) // Match!
}
 
Geoffrey

Geoffrey

07/09/2007 19:59:00
Quote Anchor link
Ik weet niet direct hoe ik dit kan doen in mijn code.

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
for( enzovoort) // loopt alle letters af
{
$curchar = $inputlist[$i]{$i2};
$curchar = ord($curchar); // verkrijg de ascii    
$total = $total + $curchar;//tel de ascii code op bij het totaal
 
- SanThe -

- SanThe -

07/09/2007 20:03:00
Quote Anchor link
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 -
 
Geoffrey

Geoffrey

07/09/2007 20:04:00
Quote Anchor link
@ Peter Dorn

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!
 
Peter Dorn

Peter Dorn

07/09/2007 20:09:00
Quote Anchor link
Wat je zou kunnen proberen is ipv alles op te tellen aan elkaar vast te plakken.

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
 
- SanThe -

- SanThe -

07/09/2007 20:10:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

$var = 'computer';

$totaal = 0;
$excl = 255;

for($i=0; $i<strlen($var); $i++)
{

    $totaal += ord($var[$i]);
    $excl ^= ord($var[$i]);
}


echo 'Totaal: ' . $totaal . ' Code: ' . $excl;
?>
 
Geoffrey

Geoffrey

07/09/2007 20:10:00
Quote Anchor link
ja maar dit zou niet meer dezelfde cijferreeks geven bij het doorheen gehaalde en het originele woord denk ik? of ben ik mis.

Ik heb ondertussen jouw code geprobeerd en het werkt trouwens perfect :)
 
Peter Dorn

Peter Dorn

07/09/2007 20:12:00
Quote Anchor link
Owja, niet aan gedacht :)
 
Geoffrey

Geoffrey

07/09/2007 20:24:00
Quote Anchor link
@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 -_-
Gewijzigd op 01/01/1970 01:00:00 door Geoffrey
 
- SanThe -

- SanThe -

07/09/2007 20:31:00
Quote Anchor link
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 -_-

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 -
 
Geoffrey

Geoffrey

07/09/2007 20:34:00
Quote Anchor link
"Je moet ze wel beiden gebruiken"

wat moet ik er dan mee doen? met $totaal en $excl
 
- SanThe -

- SanThe -

07/09/2007 20:38:00
Quote Anchor link
Totaal: 629 Code: 200 -- Flyers
Totaal: 661 Code: 232 -- silver

Echt niet hetzelfde dus.

if($totaalzoekwoord == $totaalwoordenboekwoord and $codezoekwoord == $codewoordenboekwoord)
{
// hetzelfde
}
 
Geoffrey

Geoffrey

07/09/2007 20:46:00
Quote Anchor link
sorry, het woord was flyers zonder hoofdletter. Als ik jouw code uitvoer, krijg ik bij allebei de woorden hetzelfde totaal + dezelfde code.

$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
 
- SanThe -

- SanThe -

07/09/2007 21:06:00
Quote Anchor link
Geoffrey schreef op 07.09.2007 20:46:
$var = silver

: Totaal: 661 Code: 232

$var = flyers

: Totaal: 661 Code: 232

Ja, je hebt gelijk.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.