Portál AbcLinuxu, 9. května 2025 20:50

Dotaz: php: generator kombinaci s opakovanim

20.1.2006 11:37 Jeason | skóre: 16 | Plzeň
php: generator kombinaci s opakovanim
Přečteno: 3061×
Odpovědět | Admin
snazim se vymyslet jak bych mel napsal script na vygenerovani kombinaci s opakovanim. takze priklad zadam si cisla (abc) (mozno i vice) a udela mi to kombinace aaa,aab,aac,aba .. atak dále.
mel by nekdo nápad jak to rozlousknout?
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.1.2006 13:29 machr
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Odpovědět | | Sbalit | Link | Blokovat | Admin

<?

	$x = "abc";
	$l = strlen($x);
	for($i = 0; $i < $l; $i++) {
		for($j = 0; $j < $l; $j++) {
			for($k = 0; $k < $l; $k++) {
				$kombinace = $x[$i] . $x[$j] . $x[$k];
				print "$kombinace<br>\n";
			}
		}
	}

?>

PS: pokud to chces na nejaky prolamovani hesel, tak PHP neni nejvhodnejsi jazyk a zkouset vsechny kombinace timhle zpusobem neni nejvhodnejsi zpusob :-D
20.1.2006 13:56 Jeason | skóre: 16 | Plzeň
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
to je moc hezky, funguje to ale jen pro 3 znaky :( co kdyz pridam dalsich n znaku? a navic to dela jen n(3) místné kombinace. ale dle matiky v kombinoratice z abc muzeme dat i a,b,c,aa,bb,cc, atd.

to sem zase vymyslel jednou orisek:(
20.1.2006 14:27 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Neříkejte že to neumíte přepsat do php (já to neumím :-), ale jestli vy to neumíte, tak to pište v něčem co umíte).
#!/usr/bin/perl
@pole = ('a', 'b', 'c');

while ($y++ < @pole) {
	undef @indexy;
	while ($x < $y) {
		$x = 0;
		for ($i=0; $i < $y; $i++)  { print $pole[$indexy[$i]] };
		while (++$indexy[$x] >= @pole) { $indexy[$x++] = 0 };
		print "\n";
	}
}

20.1.2006 15:16 machr
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
to ze to ma fungovat pro n znaku sem si vubec nefsim....
<?
	$x = "abcd";
	$l = strlen($x);
	$max = $l;
	for($n = 1; $n <= $l; $n++, $max *= $l) { # 1 - n-clenne kombinace
		for($c = 0; $c < $max; $c++) { # $max je pocet kombinaci dany delky
			$kombinace = ""; # postupuju jako bych prevadel cislo $max no jiny ciselny soustavy
			$d = $c;         # s ciframa $x
			for($i = 0; $i < $n; $i++) {
				$kombinace = $kombinace . $x[$d % $l];
				$d /= $l;
			}
			print "$kombinace<br>";
		}
	}
?>
28.6.2006 22:04 Radek
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Díky,tento script od machra je to co jsem dlouho hledal.Upravil jsem si ho,aby vytvořil soubor ze všech možných kombinací z čísel 0-9 a znaků A-F a výsledný řetězec měl délku 16 znaků.Výsledný soubor by ale byl strašně objemný a ja většinu výsledných kombinací nepotřebuju.Tak se chci zeptat jestli nejde script upravit tak, aby nevypisoval ty kombinace, kde se vyskytují 4 a více po sobě jdoucí stejné znaky kdekoliv ve výsledném řetězci.
Např.
Nemůže být
CCCC5D44D25085BD
(obsahuje 4 x C),
ale ani
CCCC5D44D2508888
(obsahuje 4 x C a ještě k tomu 4 x 8)
29.6.2006 06:48 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
jedno z moznych rieseni:
v php funkcia preg_match, jeden z parametrov v tvare
/(.)\1{3}/
29.6.2006 13:52 Radek
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim

Děkuji za odpověd.Myslím si ale,že by to spíš mohla být funkce preg_replace($re,$replacement,$str),podle http://interval.cz/clanky/perl-compatible-regularni-vyrazy-v-php-subvyrazy-a-zpetna-reference/ ,kde pro $replacement bych použil prázdný řetězec,popř. bych jej odstranil úplně.

P.S.Mohl by jste mi prosím napsat jak tu funkci vložím do tohoto scriptu? Nemůžu na to přijít.

29.6.2006 14:20 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
preg_match len zisti, ci sa v danom retazci nachadzaju 4 rovnake znaky po sebe. php sux, takze bez overenia ...
if (preg_match ('/(.)\1{3}/', $kombinace)) {
  print "$kombinace\n";
}
29.6.2006 14:28 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
hopla, negacia mi utiekla ... if (! preg...
29.6.2006 16:11 Radek
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Tak to je super.Díky moc!!!!!!
29.6.2006 19:45 Radek
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Ještě jedna maličkost...Výstup mám směrovaný do jednoho souboru,ale potřeboval bych,aby mi to tvořilo soubory o velikosti např. 1MB.(kombinace1.txt,kombinace2.txt,......). Děkuji předem.
20.1.2006 13:35 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/usr/bin/perl
@pole = ('a', 'b', 'c');

while ($x < @pole) {
  $x = 0;
  for ($i=0; $i < @pole; $i++)  { print $pole[$indexy[$i]]};
  while (++$indexy[$x] >= @pole) {$indexy[$x++] = 0};
  print "\n";
};

20.1.2006 14:25 #Tom
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Odpovědět | | Sbalit | Link | Blokovat | Admin
To aab,aba ukazuje spíš na variace s opakováním, kde záleží na pořadí prvků. U kombinací na nich nezáleží (aab,aba vyjdou nastejno).
20.1.2006 14:27 Jeason | skóre: 16 | Plzeň
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
ja potrebuju kombinace s opakovanim. tzn. ze u kombinaci neni stejny aab a aba a baa. uz si rozumime?
20.1.2006 14:36 #Tom
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
Já jen říkám, že toto se jmenuje variace s opakováním. Někteří matematici by se zlobili. :-)

P.S.: Variace s opakováním jsou třeba obyčejná čísla. Počet různých variací je dán vztahem n^k, kde n je "nabídka různých prvků", které můžeme k sobě skládat (např. deset číslic 0123456789) a k je počet prvků, které k sobě skládáme (počet číslic). Třeba trojmístných desítkových čísel je 10^3 = 1000 a čtyřmístných šestnáctkových je 16^4 = 65536.
20.1.2006 14:40 Jeason | skóre: 16 | Plzeň
Rozbalit Rozbalit vše Re: php: generator kombinaci s opakovanim
o tom sem slysel ve skole :) tak vime co myslime :))

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.