Portál AbcLinuxu, 12. května 2025 05:47

Dotaz: Perl a generator nahodnych cis

23.6.2003 11:58 lazyboy | skóre: 13
Perl a generator nahodnych cis
Přečteno: 94×
Odpovědět | Admin
Ahoj chlapi, mám problem a nemůžu to za živýho boha dát dohromady. Mam níže popsanej skript,kterej generuje nahodne 4 cisla z dvaceti, ale potřebuju aby se tam cisla neopakovala. #!/usr/bin/perl -w

srand; $cislo=4; $maximum=20; $generuj=0; sub generace { while($generuj<$cislo) { $mojecislo=int(rand($maximum)); $generuj++;

push(@pole,$mojecislo); } }

sub vypis { for ($i=0;$i<@pole;$i++) { print "$pole[$i] "; } }

&generace; &vypis; print "\n";

Diky s pomoci
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.6.2003 13:52 Jáchym Čepický | skóre: 29 | blog: U_Jachyma
Rozbalit Rozbalit vše Perl a generator nahodnych cis
Odpovědět | | Sbalit | Link | Blokovat | Admin
určitě to jde elegantnějc... doufám, že to takhle funguje


srand;
$min=4;
$maximum=20;
$generuj=0;
my @pole = ();
my $tmp = 0;

sub generace {
        while($generuj<$min) {
          $mojecislo=int(rand($maximum));
          foreach $cislo (@pole){
              $cislo == $mojecislo ?  $tmp = 1 : $tmp = $tmp;
              }
          if($tmp == 0){
              $generuj += 1;
              push(@pole,$mojecislo);
              }
          }
}
sub vypis {
        for ($i=0;$i<@pole;$i++) {
                        print "$pole[$i] ";
                            }
}

&generace;
&vypis;
print "\n";
23.6.2003 14:40 ivok
Rozbalit Rozbalit vše Perl a generator nahodnych cis
Odpovědět | | Sbalit | Link | Blokovat | Admin
Efektivni to asi moc neni... ale kratsi uz to neumim :-)
#!/usr/bin/perl -w
srand;
my %tmp;
for (1..4) {
  $tmp{int(rand(20))}++ and redo;
}
print scalar (join ' ', keys %tmp), "\n";
23.6.2003 15:17 lazyboy | skóre: 13
Rozbalit Rozbalit vše Perl a generator nahodnych cis
Díky moc :-)
24.6.2003 08:09 ivok
Rozbalit Rozbalit vše Perl a generator nahodnych cis
Ten muj prigramek sice funguje, ale jenom, pokud chcete 4 cisla z 20 a nezalezi vam na jejich poradi. Pokud na poradi zalezi, tak treba takhle (neni to tak pekny, ale ...)
#!/usr/bin/perl -w
srand;
my @tmp;
while (scalar @tmp < 4) {
  (grep $tmp[0] == $_, @tmp = (int(rand(20)), @tmp)) - 1 and shift @tmp;
}
print scalar (join ' ', @tmp), "\n";
24.6.2003 10:37 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Perl a generator nahodnych cis
A nebo
#!/usr/bin/perl
srand;
my (%h, @l);
while (scalar @l < 4) {
  $j = int(rand(20)) + 1;
  if (!defined $h[$j]) {
    $h[$j] = 1;
    push @l, $j;
  }
}
$, = " ";
$\ = "\n";
print @l;
24.6.2003 11:26 ivok
Rozbalit Rozbalit vše Perl a generator nahodnych cis
To je moc citelny, to umi napsat kazdej :-) Navic je tam moc zavorek a "$" a ma to moc radku ... :-)
24.6.2003 11:43 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Perl a generator nahodnych cis
Chtěl jsem původně to tělo cyklu napsat
$h[$j]=$l[$#l+1]=$j if $j=int(rand(20))+1 and !defined $h[$j];
ale rozhodl jsem se dneska pro čitelnost ;-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.