Avatar billede kimg Nybegynder
10. februar 2003 - 23:58 Der er 29 kommentarer og
1 løsning

Noget Random

Hvordan kan jeg f.eks lave generere bankoplader, med 15 forskellige numre i 10,2030. osv.
En der har en ide om hvordan det gøres

Kim
Avatar billede kimg Nybegynder
10. februar 2003 - 23:59 #1
10,2030. osv. = med numre i 10 erne og 20 erne o.s.v

Kim
Avatar billede angam Nybegynder
11. februar 2003 - 00:02 #2
Skal det bare være 15 tilfældige numre fra 1-99, eller skal der være et specielt mønster i dem?
(dvs. max. 3 inden for hver 10'er-gruppe eller noget lignende?)
Avatar billede _darkstar_ Nybegynder
11. februar 2003 - 00:02 #3
10,20,30 eller skal den gå helt op til 2030?
Avatar billede schaefner Juniormester
11. februar 2003 - 00:03 #4
skal der være x-antal af hver. F.eks 3 tal i 30'erne og 3 i 40'erne osv.?
Avatar billede kimg Nybegynder
11. februar 2003 - 00:08 #5
det skal være blandet, der skal være min 1 tal indenfor 10,20 osv. (1-90)
Jeg har lavet en der genere random op til 90.

Kim
Avatar billede angam Nybegynder
11. februar 2003 - 00:09 #6
<?

$numbers = array();
$counter = 0;
while($counter < 15) {
    $number = rand(1, 90);
    for($g=0;$g<sizeof($numbers);$g++) {
        if($numbers[$g] == $number) {
            $number = 0;
            break;
        }
    }

    if($number) $numbers[$counter++] = $number;
}

// Udskriv numre:
for($n=0;$n<sizeof($numbers);$n++) {
    echo("$n. ". $numbers[$n] ."<br>");
}

?>
Avatar billede angam Nybegynder
11. februar 2003 - 00:09 #7
.. det var et svar :-)
Avatar billede kimg Nybegynder
11. februar 2003 - 00:13 #8
Det har jeg prøvet men der er ingen garanti for at der noget tal under 10 og der kan være 5 i 50'erne osv.

Kim
Avatar billede angam Nybegynder
11. februar 2003 - 00:15 #9
ooohh.. ok; ja, det var sådan en begrænsning jeg fiskede efter :-)

Kigger lige på det.
Avatar billede kimg Nybegynder
11. februar 2003 - 00:15 #10
Der må max være 3 tal indenfor f.eks 40'erne
Avatar billede schaefner Juniormester
11. februar 2003 - 00:16 #11
kimg >> hvormange skal der være af hver 3 i 10'erne osv.
Avatar billede kimg Nybegynder
11. februar 2003 - 00:19 #12
nej, blandet jeg skal bruge 15 tal imellem 1-90
min. 1 tal i f.eks. 10'erne 20'erne osv.
men max 3 i f.eks. 10'erne 20'erne osv.

Kim
Avatar billede angam Nybegynder
11. februar 2003 - 00:20 #13
<utestet (min server er nede :-( >
<?

$numbers = array();
$rowarray = array(1,2,3,4,5,6,7,8,9,0,0,0,0,0,0);

$counter = 0;

while($counter < 15) {
    // nummer kan være fra 0-9 (inklusive)
    $number = rand(0, 9);
    // row indeholder hvilken row (talrække) vi skal gemme
    // nummeret i. Hvis 0, skal vi vælge en tilfældig.
    // Row 1 = 10-19, 2=20-29 etc.
    $rownum = $rowarray[$counter];
    if(!$row) $row = rand(1,9);
    // Number er nu vores tilfældige tal.
    $number = $row*10 + $number;
    if($number > 90) $number = 90;

    for($g=0;$g<sizeof($numbers);$g++) {
        if($numbers[$g] == $number) {
            $number = 0;
            break;
        }
    }

    if($number) $numbers[$counter++] = $number;
}

// Udskriv numre:
for($n=0;$n<sizeof($numbers);$n++) {
    echo("$n. ". $numbers[$n] ."<br>");
}

?>
</utestet>

.. men princippet er at rowarray indeholder en række af rows (tal fra 1-9) hvor jeg skal "gemme" et nummer. Row 1 = tallene 1-19, 2=tallene 20-29 etc. - på den måde er jeg sikker på at der kommer mindst een værdi i alle "rows".
Hvis row'en er 0, indsætter jeg tallet i en random row.

Som sagt er det utestet, men prøv det og spørg hvis der er problemer.
Avatar billede angam Nybegynder
11. februar 2003 - 00:22 #14
Første bug:
  $rownum = $rowarray[$counter];
skal være
  $row = $rowarray[$counter];
Avatar billede angam Nybegynder
11. februar 2003 - 00:23 #15
.. hmm - og nu ser jeg at der må være max. tre numre i en serie. Det check skal så lægges ind senere - men få lige det her til at virke først - så er det hele lidt nemmere :-)
Avatar billede kimg Nybegynder
11. februar 2003 - 00:27 #16
Den tager ingen tal under 10
Avatar billede kimg Nybegynder
11. februar 2003 - 00:30 #17
Nu tager den numre under 10:

$numbers = array();
$rowarray = array(1,2,3,4,5,6,7,8,9,0,0,0,0,0,0);

$counter = 0;

while($counter < 15) {
    // nummer kan være fra 0-9 (inklusive)
    $number = rand(0, 9);
    // row indeholder hvilken row (talrække) vi skal gemme
    // nummeret i. Hvis 0, skal vi vælge en tilfældig.
    // Row 1 = 10-19, 2=20-29 etc.
    $row = $rowarray[$counter];
    if(!$row) $row = rand(0,9);
    // Number er nu vores tilfældige tal.
    $number = $row*10 + $number;
    if($number > 90) $number = 90;

    for($g=0;$g<sizeof($numbers);$g++) {
        if($numbers[$g] == $number) {
            $number = 0;
            break;
        }
    }

    if($number) $numbers[$counter++] = $number;
}

// Udskriv numre:
for($n=0;$n<sizeof($numbers);$n++) {
    echo("$n. ". $numbers[$n] ."<br>");
}

?>
Avatar billede _darkstar_ Nybegynder
11. februar 2003 - 00:30 #18
Her er en funktion som laver $number forskellige tal imellem 1 og $size og returnerer dem i et array. Den burde du kunne bruge.

Ikke testet.

function randoms($size,$number) {
  $result = new array();
  if($size < $number) {
      return($result);
  }
  while(count($result) < $number) {
      $j = random(1,$size);
      if(! in_array($j,$result)) {
        array_push($j,$result);
      }
  }
  return($result);
}
Avatar billede angam Nybegynder
11. februar 2003 - 00:31 #19
Nej, skulle den da det? :-)
hmm - så må vi ændre lidt igen:

<utestet>
<?

$numbers = array();
$rowarray = array(1,2,3,4,5,6,7,8,9,10,0,0,0,0,0);
$counter = 0;

while($counter < 15) {
    // nummer kan være fra 0-9 (inklusive)
    $number = rand(0, 9);
    // row indeholder hvilken row (talrække) vi skal gemme
    // nummeret i. Hvis 0, skal vi vælge en tilfældig.
    // Row 1 = 0-9, 2=10-19 etc.
    $row = $rowarray[$counter];
    if(!$row) $row = rand(1,10);
    // Number er nu vores tilfældige tal.
    $number = ($row)*10 + $number;
    if($number > 90) $number = 90;

    for($g=0;$g<sizeof($numbers);$g++) {
        if($numbers[$g] == $number) {
            $number = 0;
            break;
        }
    }

    if($number) $numbers[$counter++] = $number;
}

// Udskriv numre:
for($n=0;$n<sizeof($numbers);$n++) {
    echo("$n. ". $numbers[$n] ."<br>");
}

?>
</utestet>
Avatar billede schaefner Juniormester
11. februar 2003 - 00:31 #20
Virker den her som den skal:
http://www.disneyzone.dk/random.php ?
Avatar billede _darkstar_ Nybegynder
11. februar 2003 - 00:32 #21
For at lave 4 numre imellem 1 og 10 (inklusive) og hælde dem i et array ($a), skriv:

$a = randoms(10,4);
Avatar billede kimg Nybegynder
11. februar 2003 - 00:34 #22
schaefner> der skal ikke være 3 tal i alle rækker, ellers er princippet ok.

Kim
Avatar billede schaefner Juniormester
11. februar 2003 - 00:39 #23
hvad er det højeste antal der må være i hver række?
Avatar billede angam Nybegynder
11. februar 2003 - 00:40 #24
schaefner > Max. tre tal i hver 10'er talrække.

Jeg har lige konfererret med Bingo-eksperten; det er vist 2 i virkelighedens verden :-)
Avatar billede kimg Nybegynder
11. februar 2003 - 00:40 #25
Kommentar: angam 11/02-2003 00:31:05

Den er der næsten, mangler at der er min et tal under 10 hvergang.

Kim
Avatar billede kimg Nybegynder
11. februar 2003 - 00:41 #26
Angarm> Lige præcis ;-)
Avatar billede angam Nybegynder
11. februar 2003 - 00:42 #27
Ja, jeg fik ikke denne rettelse med af en eller anden grund.
  $number = ($row)*10 + $number;
skal være
  $number = ($row-1)*10 + $number;
Avatar billede kimg Nybegynder
11. februar 2003 - 00:52 #28
Det er output, hvordan får jeg den til at starte med tal mellem 1-9

0. 15
1. 28
2. 35
3. 44
4. 59
5. 69
6. 78
7. 84
8. 90
9. 13
10. 20
11. 82
12. 55
13. 87
14. 88
Avatar billede angam Nybegynder
11. februar 2003 - 00:59 #29
Hmm ... denneher bør virke. Min skrivebordstest virker ihvertfald.
Jeg fandt ud af at der er 10% chance for at nummeret er 0 i første løkke. Tallet 0 bliver ikke gemt i array'et, og derfor kommer der intet tal ml. 1 og 9 ud. Det tager jeg nu højde for - jeg ved ikke om det var de 10% du ramte? :-)

<utestet>
<?

$numbers = array();
$rowarray = array(1,2,3,4,5,6,7,8,9,10,0,0,0,0,0);
$counter = 0;

while($counter < 15) {
    $number = rand(0, 9);
    $row = $rowarray[$counter];
    if(!$row) $row = rand(1,10);
    $number = ($row-1)*10 + $number;
    if($number > 90) $number = 90;
    if($number) {  // Number kan være 0 - hop uden om hvis det er tilfældet!
        for($g=0;$g<sizeof($numbers);$g++) {
            if($numbers[$g] == $number) {
                $number = 0;
                break;
            }
        }
    }
    if($number) $numbers[$counter++] = $number;
}

// Udskriv numre:
for($n=0;$n<sizeof($numbers);$n++) {
    echo("$n. ". $numbers[$n] ."<br>");
}

?>
</utestet>
Avatar billede kimg Nybegynder
11. februar 2003 - 01:01 #30
Det virker mange tak for hjælpen.

Kim
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester