Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Mahdollisten yhdistelmien läpikäynti

sutinaseppo [21.08.2013 22:13:23]

#

Kuinka olisi mahdollista toteuttaa PHP:llä koodi joka käy kaikki mahdolliset numero ja koodi yhdistelmät? Itse olen vasta aloittelija joten en keksi miten tämän voisi toteuttaa.

Metabolix [21.08.2013 22:30:30]

#

En tiedä, mitä ovat ”numero ja koodi yhdistelmät” ja mitkä ovat mielestäsi ”kaikki mahdolliset”, joten yritä jatkossa kysyä täsmällisemmin.

Jos tarkoitat kaikkien tietyn mittaisten numerosarjojen muodostamista, kysymykseen on valmis vastaus rekursio-oppaassa, jonka olisit löytänyt hakemalla sanalla yhdistelmät. Aivan vastaava koodi sopii myös silloin, kun numeroiden sijaan tai lisäksi käytetään kirjaimia tai ylipäänsä tekstiä.

<?php
function yhdistelmat($pituus, $osat, $alku = "") {
	if ($pituus <= 0) {
		return array($alku);
	}
	$tulos = array();
	foreach ($osat as $jatko) {
		$tulos = array_merge($tulos, yhdistelmat($pituus - 1, $osat, $alku.$jatko));
	}
	return $tulos;
}

// Esimerkki:
header("Content-Type: text/plain");
$kaikki = yhdistelmat(3, array("1", "2", "3"));
foreach ($kaikki as $yhdistelma) {
	echo $yhdistelma, "\n";
}

Jos taas tarkoitit, että sinulla on vaikkapa yhdessä taulukossa numeroita ja toisessa koodeja, voit muodostaa niistä kaikki yhdistelmät yksinkertaisesti kahdella sisäkkäisellä foreach-silmukalla.

<?php
header("Content-Type: text/plain");
$numerot = array(1, 2, 3);
$koodit = array("IDDQD", "there is no cow level");
foreach ($numerot as $numero) {
	foreach ($koodit as $koodi) {
		echo "$numero: $koodi\n";
	}
}

Ariel [21.08.2013 23:38:39]

#

sutinaseppo kirjoitti:

Kuinka olisi mahdollista toteuttaa PHP:llä koodi joka käy kaikki mahdolliset numero ja koodi yhdistelmät? Itse olen vasta aloittelija joten en keksi miten tämän voisi toteuttaa.

Kysymys on mieletön.

Grez [22.08.2013 01:33:21]

#

Kysymys on tosiaan mieletön, jos yhdistelmille ei aseteta rajoituksia. Jos taas halutaan käydä esimerkiksi kaikki 4 merkkiä pitkät numero- ja koodiyhdistelmät, niin homma muuttuu triviaaliksi.

qeijo [22.08.2013 12:07:53]

#

sutinaseppo kirjoitti:

.. kaikki mahdolliset numero ja koodi yhdistelmät ..

Eli siis numerot ja koodi yhdistelmät ... Dodii..

Yucca [23.08.2013 08:02:58]

#

Grez kirjoitti:

Kysymys on tosiaan mieletön, jos yhdistelmille ei aseteta rajoituksia.

Ei varsinaisesti. Kysymys on varsin epämääräinen, mutta kyllä siihen voi vastailla; vastauksissa pitää tosin tulkita tai arvata, mitä ”numero ja koodiyhdistelmät” tarkoittaa. Ja jos ei esimerkiksi aseteta pituusrajoitusta, niin oikea vastaus olisi PHP:n osalta ”ei mitenkään”, koska päättymättömän PHP-ohjelman ei kai voi tulkita tuottavan mitään.

lainaus:

Jos taas halutaan käydä esimerkiksi kaikki 4 merkkiä pitkät numero- ja koodiyhdistelmät, niin homma muuttuu triviaaliksi.

Silloinkin olisi ratkaistava, mitä ”numero ja koodiyhdistelmät” tarkoittaa. Oletettavasti ”numero” tarkoittaa Ascii-numeroita 0–9 (eikä esimerkiksi kaikkia Unicode-merkkejä, joiden kategoria on Number), mutta mitä ovat ”koodit”? Jos tarkoitetaan kirjaimia, miksi kysymyksessä ei lue ”kirjaimet”? Ja ”kirjain” olisi oikeasti tulkinnanvaraista. (Onko Ä kirjain? É? Ш?) Vaikka tähän saataisiin jokin yksiselitteinen vastaus, tehtävässä on epätriviaaleja osia, kuten se, onko tehokkuudella väliä, ja se, missä järjestyksessä yhdistelmät halutaan (tai kelpaako mikä vain järjestys).

feenix [23.08.2013 08:27:56]

#

Yucca kirjoitti:

Ei varsinaisesti. Kysymys on varsin epämääräinen, mutta kyllä siihen voi vastailla; vastauksissa pitää tosin tulkita tai arvata, mitä ”numero ja koodiyhdistelmät” tarkoittaa. Ja jos ei esimerkiksi aseteta pituusrajoitusta, niin oikea vastaus olisi PHP:n osalta ”ei mitenkään”, koska päättymättömän PHP-ohjelman ei kai voi tulkita tuottavan mitään.

Millä periaatteella päättymätön PHP-ohjelma on erilainen kuin päättymätön muulla kielellä tehty ohjelma? Jos päättymätön PHP-ohjelma tulostaa jatkuvasti kombinaatioita, se ei silti "tuota mitään" koska se on PHP-ohjelma?

Hieman taas logiikka ontuu, mutta se ei ole uutta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta