<b>Programátorské cvičení (výsledky)</b>

<HTML>Protoze prace v php je predevsim o psani a opakovani porad stejnych kodu, neni od veci cas od casu procvicit mozek nejakym algoritmem. Jedno takove cviceni ted pro vas mam.

Napiste tridu (php4/5) s nazvem "bruteforce", ktera provadi (jak jeji nazev napovida) kombinace vsech znaku v retezci.

Konstruktor tridy bude mit 4 parametry:
1. retezec (ukazatel na callbackovou funkci)
2. retezec znaku ktere se budou kombinovat (napr. "abcdef12345")
3. cislo urcujici minimalni pocet znaku v kombinovanem retezci
4. cislo urcujici maximalni pocet znaku v kombinovanem retezci

kontruktor sam spusti proces kombinaci a kazdy vysledek posle do uzivatelske funkce (prvni parametr konstruktoru) spolu s poctem jiz probehnutych kombinaci. Vlastni fce. ma tedy parametry:
callback($kombinovany_retezec, $pocet_interakci)

Do tehoz scriptu uvedte pod tridu funkcni ukazku prace tridy.

Vysledek nedavejte sem ale poslete mi ho na email: <b>master@webzdarma.cz</b>, provedu casove mereni rychlosti scriptu a za 14dni umistim vsechny zdroje na svuj web. Vysledky casoveho mereni vlozim sem do threadu naraz.
Nejde o zadnou soutez, ale ocekavam ucast zdejsich stamgastu.
Hodne zdaru</HTML>
takže jestli jsem o pochopil, tak nejrychlejší "vyhrává"?
Vypadlo mi slovo: ... nejrychlejší kód ...
takze to hodit pres SQL, protoze to se zpracuje rychleji nez php :)
<HTML>Nikdo nevyhrava :)
Jde spis o to kdo to zvladne, neni to az tak lehke jak se muze zdat.
Nekdo to udela za par minut, nekdo za den a jiny treba vubec.
Me to trvalo cca 5h nez jsem prisel na spravny postup a to vicemene postupnou dedukci. Logicke mysleni je treba trenovat a ja to posledni dobou zanedbaval :(</HTML>
Tak neco velmi podobneho jako tohle jsem kdysi (asi rok zpatky) psal v Javascriptu :-D (ale bylo to neuveritelne pomale ... JS v prohlizeci nestiha udelat zdaleka tolik oepraci co php ... (navic nemuze vyuzit ani vetsi procentro pameti a procesoru .... )) ... zkusim to najit a prepsat do php :-D
"takze to hodit pres SQL, protoze to se zpracuje rychleji nez php :)"
Tak to sem zvědavej co předvedeš...

"Nikdo nevyhrava :)"
Mě jenom zarazilo to "provedu casove mereni rychlosti scriptu", tak jsem si myslel, že nejrychlejší kód "vyhrává". Vyhrává mám v uvozovkách proto, že jsi psal, že nejde o soutěž, takže už jsem v obraze ;)

Taky jsem tu kdysi dávno něco na tenhle způsob měl. Uvidíme, jestli to najdu ;)
<HTML>>>"takze to hodit pres SQL, protoze to se zpracuje rychleji nez php :)"
>>Tak to sem zvědavej co předvedeš...

Taky ocekavam jaky bude vysledek, nebo jestli to byl jen vystrel do tmy</HTML>
Pro zdejší štamgasty:
Jdete do toho někdo? Já jenom jestli má cenu se do toho pouštět, abych nebyl sám ... :/
<HTML>Kdyby nikdo tak ja to mam hotove tak muzeme porovnat alespon spolu, ale casu dost</HTML>
Ja bych to toho sel, ale jsem ted v obdobi, kdy proste nemam chut neco delat :( Kdyby to byla hodinovka, tak mozna, ale 5 hodin uz je trosku moc.
Tomik: to bude asi infekcni, mam podobny obdobi :)

ja se do toho pustim, nejspis pristi vikend.
Tom: nevím jestli jsem štamgast, ale hlavcičku nad tím chvílema trápit budu :-)

Richard: nepamatuju si to ze školy úplně přesně, ale jde ti o kombinace nebo variace? Bruteforce je spíše o variacích, ne?
jenom oznamuju, ze uz jsem svuj kod odeslal, takze ucast uz nejaka je
Tak jak nad tím přemýšlím, tak mám takový pocit, že asi budu mít nejhorší kód ze všech, co to pošlou. Princip je sice celkem jednoduchý, ale převést myšlenku do funkčního skriptu pro mě byl problém. Sice už to tak nějak funguje, ale ještě to musím nějak "ošéfovat", aby se to tak často necyklilo ;)

Non_E: počkej, to chceš říct, že celou dobu pracuju na něčem jiným, než mám?
Pokud budu mít vstupní řetězec 'abcde' a minimální i maximální počet znaků 3, vyjde z toho http://manual.wz.cz/download/brute.php nebo něco jiného?
<HTML>Tom: mas to dobre, tak to ma byt..
btw je zajimave jak vsichni kdo to delame pouzivame prave "abcde" :D
Jinak kdyz jsem porovnal svuj a Tonikuv kod tak pochybuju ze to nekdo udela sloziteji (a pomaleji) nez ja :)</HTML>
Hm... mezi zdejsi stamgasty se urcite nepocitam (jednu dobu jsem sem chodil pravidelne, ale pak prislo vice 'prace' a uz jsem to nestihal:) ale o to nejde:-D )

Kdy je tzv.:uzaverka? protoze jsem se do toho chtel vrhnout, ale jakjsi jsem zjistil ze jedu pryc do nedele :( takze to zkusim jeste zkombinovat dneska :-)
Non_E: tohle dělám taky, to jsou afaik variace (bez opakování).

Richard: tj, zajímavé to je :-) Já ještě pojmenovávám pořadí písmeny řecké abecedy :-) Ale teď vážně: chceš v tom kódu i vstupní kontrolu, kontrolu existence callbackové fce a takové blbosti?
EDIT: sakra, jsem blbej... variace s opakováním.
Tak i já mám svých pár hodin hrůzy za sebou ... :)
... teď čekám jak to zmákne Péťa s tou jeho SQL verzí :D

Non_E: sice nevím, jaký jsi zvolil koncept, ale já osobně jsem to tam dal, protože když to tam nebylo, tak stačila menší chybička v zadání a už se to cyklilo a cyklilo a cyklilo a ... jenom ta existence callbackové fce mě tedy nenapadla - dobrý nápady přijdou vždy pozdě :/
  No a jak jsi přišel s tím kombinace-variace, tak jsem se lekl, že se takovou dobu mořím něčím jiným, než mám. Dokonce jsem gůglil jakej je vlastně rozdíl mezi kombinací a variací. A vzhledem k tomu, že jsem to stejně nepochopil, tak jsem to nechal plavat ;)


Freeze: pokud jsem Richarda dobře pochopil, tak za 14dní po založení vlákna vyhlásí výsledky, takže pokud to stihneš před zveřejněním, tak to třeba Richard ještě stihne zpracovat ...
<HTML>Ja to zpracuju behem minuty ;)</HTML>
Posláno, teď už se nad tím kódem bude bavit někdo jiný, viď Richarde ;-) Docela jsem spokojený, ani jsem nevyrobil takovou čuňárnu, jak jsem myslel.

Tom: mně to necyklí, ale píše nesmysly. Kontrolu jsem stejně zakomentoval, jde o algoritmus :-)

Snad na vyhlášení nezapomenu, je to až za dlouho :-)
Hm, nakonec jsem to dodelal (ale teda vlastne hned 2* :-D ) ... protoze jedna(prvni) verze se sekla na 687 kroku :-D (ani nevim proc, ale proste php vratilo ze nemuze komunikovat :-D )... tak jsem to cele predelaval .... :)
Richard (moderátor)
Tak, ja mam zrovna dovcu, ale v ten ctvrtek jsem se na to koukal. Nejsou mi zcela jasne podminky, co jsi napsal. Kdyztak po dovci bych to resil. (mozna, kdyz se budu moc nudit, tak pristi tyden)
Postup, ktery jsem volil:
1. funkce xxx(str_out,str_chr,i)
kde chr ... pouzite znaky
out ... vystupni kombinace znaku
i ... cislo reseni
+ prislusne andy pro pointry na dane promenne
2. ve funkci jsem mel funkci, ktera vzala posledni znak z retezce out, nasla jej retezci chr a podle toho se rozhodla, zda prida na konec nebo zmeni posledni znak.
Vystup tedy byl out a i, ale potreboval jsem treti promennou, konstantu, coz uz nebylo podle podminek od tebe, kdy chces jen 2. Nebo bych musel pouzite znaky vkladat pres global.
3. uprava 2 tak, aby se nemusela pokazde volat funkce najdi mi znak v retezci chr, ale pak by bylo vytupem jeste cislo, kolikaty znak jsem pouzil. Rychlost by se samozrejme zvysila, ale opet mimo zadani.
4. pak je v zadani, ze vystup ma byt od-do. Tak ted nevim, zda muzu na vstup vnutit prvni 6-ti (od) mistnou kombinaci nebo musim do funkce pridat podminku. Ktera samozrejme celou funkci bude brzdit.

Ale, kdyby to nekdo chtel zkusit, tak:
http://cz.php.net/call-user-func

Mimo to, kecal jsem s brachou a se asi shodneme, ze PHP moc pro rychlost neni.

"Ja to zpracuju behem minuty ;)"
- zalezi na stroji
- jeho zatezi
- poctu znaku, ktere pro algoritmus pouzijes
- delka retezecu pro vystupe

Tom (manual.wz.cz)
Peta si uziva dovci a dava si od programovani klid :) Nektereho, treba zrovna resim osmismerku v JS, script podobny lusk.cz. Ale asi tak 8k ma zdrojak, generovany kod kolem 20-29k, lusk.cz ma 110k (i s reklamami a tak). Ale, myslim, ze bych SQL prinutil vygenerovat ty kombinace, jen nevim, do jake miry je tu dovolene stavet si vlastni funkce v sql a do jake miry to bude mit zrovna na tom serveru, kde to bude testovat. Pak to vrati "" a mne se bude reklamovat chyba, ne?
Pak Peta resil takovouhle peknou hracku z nejakeho serveru:
http://peter-mlich.wz.cz/Jine/hacker-test1/index.htm
Tak se bav :)
peta: nic proti tobě, ale zdá se mi, že jsi na dovolené byl moc dlouho na sluníčku.
"PHP moc pro rychlost neni"
to sice může být pravda, ale ukaž mi POUŽITELNÝ jazyk PRO WEB, který je rychlejší. Hádám, že tvůj oblíbený JS to asi nebude.

No a ten tvůj popis řešení je taky trošku zmatenej (teda aspoň pro mě)
Není potřeba žádné funkce ve funkci, ale stačí tři cykly v sobě a nějaké ty obslužné proměnné a podmínky zamezující cyklení.

"http://cz.php.net/call-user-func"
hm ... už ze zadání vyplývá, že tuhle funkci musíš použít.

"http://peter-mlich.wz.cz/Jine/hacker-test1/index.htm"
a přesně na tohle se dá použít tahle třída. Uživatelskou fci rozšíříš jí o kontrolu hlaviček, které vrací server a pouhou podmínkou typu if($header == 404) brute(); else echo $name; není problém získat seznam všech souborů. Problém je jenom v tom, že WZ je takhle přetížené a tímhle by mu člověk ještě přidal.

"- zalezi na stroji"
nevím jak ty, ale já bych pro testování určitě nechtěl vypsat x-miliónů kombinací, ale spokojil bych se se vstupním řetězcem "abcde" a rozsahem 3 - 5. To vrátí nějakých 3875 kombinací během 0.00nic vteřin.