Versio

Herhaling zoeken

Overzicht Reageren

Pagina: 1 2 volgende »

Sander

Sander

24/11/2005 11:50:00
Quote Anchor link
Ik ben bezig met een programmatje die een herhaling kan zoeken. Dus zoiets als dit

0.237237237237237237237237

herhaling: 237

0.111111111111111111111111

herhaling: 1

enz.

Heeft iemand een idee hoe ik dit kan doen?
 
PHP hulp

PHP hulp

24/05/2012 21:00:09
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Sander

Sander

24/11/2005 16:35:00
Quote Anchor link
Heeft er iemand een idee?

Het lukt me nog steeds niet! :(
Gewijzigd op 24/11/2005 16:36:00 door Sander
 
- SanThe -

- SanThe -

24/11/2005 16:43:00
Quote Anchor link
Er zitten veel meer herhalingen in. Wil je die allemaal hebben? Dus b.v zo?

0.237237237237237237237237

Herhaling: 2, 3, 7, 23, 37, 237, 372, 723 en nog veel meer.
 
Sander

Sander

24/11/2005 17:08:00
Quote Anchor link
De herhaling die uit het grootste aantal tekens bestaat. Dus één van deze 237, 372, 723 (maakt niet uit welke)
 
Jelmer rrrr

Jelmer rrrr

24/11/2005 17:22:00
Quote Anchor link
Dan zou je een algoritme moeten maken dat iedere mogelijkheid geeft van letters die meerdere malen zouden kunnen voorkomen, en dezen tellen met substr_count().

Ik denk dat ik daar eens over na ga denken :)
 
Jelmer rrrr

Jelmer rrrr

24/11/2005 17:46:00
Quote Anchor link
Mijn eerste idee dat in mij op kwam:
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
$string
= 'cgfcgfcgfcgfcgfcgfcgfcgf';

function
match_searchSubstring($string)
{

    $string_length = strlen($string);
    $results = array();
    $k = 0;
    
    for($i = 0; $i < $string_length; $i++)//voor ieder mogelijk begin
    {
        for($j = 2; $j < ($string_length-$j); $j++)
        {

            $results[$k]['substring'] = substr($string, $i, $j);
            $results[$k]['hits'] = substr_count($string, $results[$k]['substring']);
            $k++;
        }
    }

    
    return $results;
}

function
match_getResults($tests)
{

    $tests_length = count($tests);
    $best_test['hits'] = 0;
    $best_test['substring'] = '';
    
    for($i = 0; $i < $tests_length; $i++)
    {

        if($tests[$i]['hits'] > $best_test['hits'])
        {

            $best_test = $tests[$i];
        }

        elseif($tests[$i]['hits'] == $best_test['hits'] && strlen($tests[$i]['substring']) > strlen($best_test['substring']))
        {

            $best_test = $tests[$i];
        }
    }

    
    return $best_test;
}


$results = match_searchSubstring($string);
print_r(match_getResults($results));
?>


Uitkomst was 'Array ( [substring] => cgf [hits] => 8 )'
 
Sander

Sander

24/11/2005 18:05:00
Quote Anchor link
ik ga hem testen maar als die werk ben je GEWELDIG!!!!!
 
Robert Deiman

Robert Deiman

24/11/2005 18:14:00
Quote Anchor link
Mooi script zo jelmer, nu nog zorgen dat die ook van die logische wiskundige reeksen gaat herkennen en zegt wat het volgende getal is :P (zoals dat wel eens gaat bij IQ testen en dergelijke)
 
Sander

Sander

24/11/2005 18:16:00
Quote Anchor link
Hij werkt bijna foutloos, maar als ik bijvoorbeeld

905123451234512345123451234512345123451234512345

invoer, dan zegt hij dat de herhaling '5' is maar dat moet '12345'. Hij moet dus zoeken naar de langste herhaling. Ik ben zelf ook even aan het proberen, maar zou je ook nog even willen kijken?

Alvast bedankt.
 
Jan Koehoorn

Jan Koehoorn

24/11/2005 18:20:00
Quote Anchor link
Inderdaad een zeer mooi script, Jelmer!
Eén opmerking. Als je dit hebt:

$string = 'cgfcgfcgfcgfcgfcgfcgfcgf';

Dan is de langst voorkomende herhaling niet 'cgf'

De string 'cgfcgfcgfcgf' komt twee maal voor en is dus de langste herhaling.
 

24/11/2005 18:30:00
Quote Anchor link
Het kan ook nog de langste herhaling zijn waarbinnen géén herhalingen voorkomen. Dan moet ccgfccgf als uitkomst cgf geven. Pfff, dat is nog niet zo gemakkelijk, maar misschien wel een leuke uitdagin voor het weekend.
 
- SanThe -

- SanThe -

24/11/2005 19:34: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
<?php
$test
="0.237237237237237237237237";
$hlen=strlen($test);
$len=$hlen-1;
for($i=0; $i<$len; $i++)
{

    for($j=$hlen-$i; $j>$i; $j--)
    {

        $cnt=substr_count($test, substr($test, $i, $j));
        if($cnt>1)
        {

            exit("De grootste substring komt " . $cnt . " keer voor: " . substr($test, $i, $j) . "<br />");
        }
    }
}

?>


Edit: Testspul verwijderd
Gewijzigd op 24/11/2005 19:42:00 door - SanThe -
 
Jelmer rrrr

Jelmer rrrr

24/11/2005 20:05:00
Quote Anchor link
@Jan: Mijn idee was de langst mogelijke string die het vaakstg voorkomt, waar hoe vaker hij voorkomt belangrijker is dan de lengte.

Bij die van SanThe is dat zo te zien net andersom :)
 
Robert Deiman

Robert Deiman

24/11/2005 20:07:00
Quote Anchor link
Jelmer:
@Jan: Mijn idee was de langst mogelijke string die het vaakstg voorkomt, waar hoe vaker hij voorkomt belangrijker is dan de lengte.

Bij die van SanThe is dat zo te zien net andersom :)


Dat klopt ja.. je moet dit script niet gebruiken met een zin. Dan telt die de letter die het vaakst voorkomt!!!
 
Jelmer rrrr

Jelmer rrrr

24/11/2005 20:15:00
Quote Anchor link
Robert:
Jelmer:
(hier mijn lap tekst)


Dat klopt ja.. je moet dit script niet gebruiken met een zin. Dan telt die de letter die het vaakst voorkomt!!!


Daar had ik dat minimum van 2 voor bedacht. maar ik denk dat je dat wat moet opvoeren naar minimaal 3 in dat geval.
 
Jan Koehoorn

Jan Koehoorn

24/11/2005 20:35:00
Quote Anchor link
SanThe:
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
<?php
$test
="0.237237237237237237237237";
$hlen=strlen($test);
$len=$hlen-1;
for($i=0; $i<$len; $i++)
{

    for($j=$hlen-$i; $j>$i; $j--)
    {

        $cnt=substr_count($test, substr($test, $i, $j));
        if($cnt>1)
        {

            exit("De grootste substring komt " . $cnt . " keer voor: " . substr($test, $i, $j) . "<br />");
        }
    }
}

?>


Edit: Testspul verwijderd


Ook een mooi script SanThe! Ik snap de benadering ook, maar ik heb net even zitten testen ...

Stel ik vul als teststring in:

$test="abcabcdefgdefg";

dan lijkt mij dat er uit moet rollen 'defg', maar het script levert bij mij als resultaat 'abc'.
 
- SanThe -

- SanThe -

24/11/2005 20:44:00
Quote Anchor link
Jelmer:
Bij die van SanThe is dat zo te zien net andersom :)


Klopt, ben bezig het foutje er uit te halen.
 
- SanThe -

- SanThe -

24/11/2005 23:09:00
Quote Anchor link
Okee, wat minder mooi...

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
$test
="abcabcdefgdefg";
$hlen=strlen($test);
$len=$hlen-1;
$mx=1;
$ln=0;
$lnh=0;
$tel=0;
$res="";
$gn=0;
for($i=1;$i<=$hlen;$i++)
{

    $gn=$gn+$i;
}
function
x($x)
{

    global $test,$hlen,$len,$mx,$ln,$lnh,$res,$tel,$gn;
    for($i=$x; $i<$hlen; $i++)
    {

        for($j=$i+1; $j<=$hlen; $j++)
        {

            $tel++;
            if($tel>$gn)
            {

                return;
            }

            $cnt=substr_count($test, substr($test, $i, $hlen-$j+1));
            $lnh=strlen(substr($test, $i, $hlen-$j+1));
            if((($cnt>$mx) and ($lnh==$ln)) or (($lnh>$ln) and ($cnt>1)))
            {

                $res=substr($test, $i, $hlen-$j+1);
                $mx=$cnt;
                $ln=$lnh;
            }
        }

        if($tel<=$gn)
        {

            $k=$i+1;
            x($k);
        }
    }
}

x(0);
echo "De grootste substring komt " . $mx . " keer voor: " . $res . "<br />";
?>
 
Jan Koehoorn

Jan Koehoorn

24/11/2005 23:15:00
Quote Anchor link
@ SanThe: die levert inderdaad de goede uitkomst. Knap gedaan!
 
Jan Koehoorn

Jan Koehoorn

24/11/2005 23:17:00
Quote Anchor link
Ik heb hem net even getest met 'abcabcdefgdefgcdefgdefg' en dan geeft hij ook de goede uitkomst (cdefgdefg).
 
Jan Koehoorn

Jan Koehoorn

24/11/2005 23:20:00
Quote Anchor link
Wat ook goed is: als ik hem test met

'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'

geeft hij twee keer de helft van die string. En dat klopt, want als hij de hele string terug zou geven, was er geen sprake van een patroon. Petje af, SanThe :-)
 

Pagina: 1 2 volgende »



Overzicht Reageren

Get Adobe Flash player