ov3rm4n Posted November 13, 2003 Share Posted November 13, 2003 Нещо ма наляга скуката, та викам да си спретнем едно състезанийце - награди естествено няма да има - ей тъй от любов към спорта. Става дума за решаване на задачки през Perl или PHP (а що не и Python). Целта е да се напише най-краткия възможен код който да решава поставената задача... Дойде ми на акъла като видях какво съм сътворил преди година и ми се наложи 2 часа да си блъскам главата преди да разбера какво прави и за какво служи собствения ми код... забавно е повярвайте ми. Естествено предлагайте и нови условия (задачи)! Та да открием сезона - Условие 1: Да се напише код, който приема като входни данни текстов файл, разбива гo на отделни думи, подрежда гo по азбучен ред и гo записва отново във файл - т.е. прави речник от подадените файлове. П.С. - нормалните прагми за включване на модули не са нужни - кода се стартира от команден ред, а не от файл - за това и трябва да е възможно най-кратък... Ето го и моя код (само си представете как съм се пулил днеска срещу него): open T,$ARGV[0];for(<T>){$_=lc;y/[a-z]/ /cs;push@l,split}close;@l=sort(split/:/,join"\n:",grep(!$s{$_}++,@l));open T,">dict"; print T for@l;close .... BTW: чудих се чудих се тва за кой подфорум е и реших че е за "Others" formely known as "Bullshits" - щото тва ако не е булшит здраве му кажи... Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 13, 2003 Author Share Posted November 13, 2003 Упс... преди някой да ми е скочил, че кода е ненужно сложен - сложен е щото освен всичко друго и премахва дублиращите се думи. Сега като го гледам и ми идват идеи как да стане по-добре, ама тогава толкова са ми били силиците..... Link to comment Share on other sites More sharing options...
Godfather Posted November 13, 2003 Share Posted November 13, 2003 Bravo be ov3rm4n, napravo izbi ribata btw, coda me nakefi Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 13, 2003 Author Share Posted November 13, 2003 Абе има какво да се желае... ама няма да си кривя душата - и аз си му се кефя (ебаси израза - да живее Бъргарския Език!). Вярвяй ми - 2 часа го разгадавах... Благодаря. Хайде включвайте се де - наистина е забавно да накараш другите да си блъскат главата какво точно прави и как го прави кода ти... Link to comment Share on other sites More sharing options...
Godfather Posted November 13, 2003 Share Posted November 13, 2003 ... Благодаря. Хайде включвайте се де - наистина е забавно да накараш другите да си блъскат главата какво точно прави и как го прави кода ти... Da be - na dve rakii i dve vina , pri tva sam stanal v 6.30 - napravo sha go razbia Perla Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 13, 2003 Author Share Posted November 13, 2003 Ми той Perl си е за хакване - за какво друго Ама си прав - в състоянието дето си по-добре недей - да не пусне някой контестация за дисквалификация поради употреба на забранени стимуланти... Link to comment Share on other sites More sharing options...
furiozo Posted November 14, 2003 Share Posted November 14, 2003 undef$/;@a{split/[^a-z]/,lc<>}=();open F,'>dict';print F join"\n",sort keys%a 77 simvola poqsnenie : <> raboti s $ARGV[0] ili sys STDIN ov3rm4n, tvoq code dava dumi kato [ [] [a z][a .... trqa da ti e y/a-z/ /cs sled korekciqta tvoq i moq kod vryshtat principno identichen rezultat s razlikata che v moq izhodqsht file ima nai otgore >prazna duma<, duma s 0 simvola, ima edin prazen red v nachaloto na file-a, v zavisimost ot glednata tochka i dvete mogat da se priemat za celevi rezultat imash kvo da poorejesh , ade da vidim do kvo sha dobutash spored men obache uslovieto trqa da e da chete ot STDIN i da pishe na STDOUT undef$/;@a{split/[^a-z]/,lc<>}=();print join"\n",sort keys%a 60 simvola Link to comment Share on other sites More sharing options...
aragorn Posted November 14, 2003 Share Posted November 14, 2003 Zalagam za pobeditel na furiozo. Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 16, 2003 Author Share Posted November 16, 2003 furiozo, печелиш - но както казах - това съм го кодирал когато току що бях прочел първата си книжка за Perl и току що си бях инсталирал на бозата ActiveState Perl-a... Не съм си и помислял тогава да се бъзикам с разделителя на записите или други някакви специални променливи... Ти само виж как взимам входния файл - срам, срам, срам... Прав си и за омазването с регулярния израз - трябва да си призная, че и сега все още ми е кошмарна тая тема, макар че вече по-лесно ги чета и конструирам. Само една бележка по кода ти имам, но тя само би го направила по-малък - променяш всички думи от входа в долен регистър, а целта е да се получи на изхода това което е влязло на входа - в смисъл "Door" и "door"да се таксуват като различни думи ... Не мисля и да се опитвам да го правя по-добре. Каквото е такова. Но като победител сега вземи да зададеш ново условие за кодиране! И без тва награди няма - викам това да е наградата - победителя определя новата задачка... Поправките в условията на играта се приемат. @karaman - радвам се, че си се включил с PHP код , за съжаление не отбирам в детайли от него... Не може обаче да няма тука и други дето кодират на PHP - хайде бе! Karaman ли е най-добрия?? Furiozo - давай новото условие, че ме сърбят ръчичките!! Link to comment Share on other sites More sharing options...
azsum Posted November 16, 2003 Share Posted November 16, 2003 tztztztzt tukmo vzex metura da si go mera i ..... Razo4arova me Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 22, 2003 Author Share Posted November 22, 2003 Абе аз съм тъп и упорит бе... Не се отказвам лесно. Ето и новото предложение - 91b - единствената цел в живота на това парченце код е вземе от стандартния вход файлове, съдържащи имейл адреси в себе си (примерно HTML сорс) и да извлече адресите от тях. Да премахне дублиращите се и да изведе на стандартния изход списък с адреси. Т.е. - пръв приятел на спамерчетата ... Идеята е да се приложи върху свалените с lynx примерно сорсове на страниците върнати от Yahoo People Search - или към потока на някоя нюз група.... $"=$/;while(<>){push@i,$& if/\b[\w.-]+\@(?:[\w-]+\.)+\w+\b/}@o=grep(!$s{$_}++,@i);print"@o" Link to comment Share on other sites More sharing options...
furiozo Posted November 22, 2003 Share Posted November 22, 2003 tiq \b ti prrechat, s tqh ne hvashta neshta kato (a@a.a) az bih polzval undef$/;@a{<>=~/([\w._-]+@[\w.-]+)/g}=1;print "$_\n"for keys%a 63 simvola no kakto predloji cade ako izpolzvame command line switches i pishem perl -0 mojem d asi spestim undef$/; i da stane 54 simvola tuk golqmo znachenie bi imalo kolko e precizen regexp-a za email, toi trqa da e ogovoren predvaritelno Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 22, 2003 Author Share Posted November 22, 2003 Е ти ме размаза... Бая хляб има да изям - добре, че не се отчайвам лесно - иначе сега е момента да се откажа от Perl завинаги... Но невежеството ми само може да ме амбицира. Освен да почна да ти плащам за уроците дето ми ги преподаваш всеки път - какво пиеш и къде?! Следващия път ще гледам да се изкажа по-подготвен от първите два ... Link to comment Share on other sites More sharing options...
furiozo Posted November 22, 2003 Share Posted November 22, 2003 gluposti, az nishto ne razbiram, tvoq code mi se vijda ujasno slojen, izobshto ne se opitvam da go razbera inache razbiracha e cade, ama toi ne e tukashen user Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 22, 2003 Author Share Posted November 22, 2003 То и аз нищо не разбирам - даже се пазя да не взема много да разбирам. Ако ме разбираш какво искам да кажа. Там е работата - простото винаги е по-съвършено от сложното. Явно там ми е проблема - трябва да се науча да опростявам нещата... Защото: Съвършено е не когато няма повече какво да се добави, а когато няма какво повече да се отнеме! ..и това не е моя мисъл (от къде у мен такива мисли), а на Екзюпери... Няма какво да се прави - пак ще се помъча да изстискам нещо от постния си мозък - дано да затрудня cade поне малко, поне веднъж... Link to comment Share on other sites More sharing options...
furiozo Posted November 22, 2003 Share Posted November 22, 2003 ama ti da ne si pomisli che tva sa negovi resheniq, moi sa si, ama i s nego komentirahme dnes i reshih da go spomena shtoto toi e mnogo napred s materiala Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 22, 2003 Author Share Posted November 22, 2003 Чудесно - значи предложението за заплащане на уроците остава в сила - ако ти стане досадно да ми ги даваш в кръга на играта от любов към спорта де... Разбрах те, разбира се - имаше предвид, че cade ми разгадава глупостите, а ти си всъщност човека дето ми мачка самочуствието ... А иначе - усложняваш ми задачката още повече... Но аз съм млад човек - все ще успея да се справя и с двамата След два дена ще изляза пак на "ринга" с още някое парче безумно усложнен код, който и двамата да не можете да разгадаете... и ще си помисля дали да обяснявам за какво служи или да ви оставя сами да се досетите... Щото и на вас трябва да ви е интересно все пак, нали? Link to comment Share on other sites More sharing options...
furiozo Posted November 22, 2003 Share Posted November 22, 2003 btw da vzema da te pokanq v #warez.ru @ bgirc, sha mojesh da obsyjdash programistki problemi s TQ_ Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 24, 2003 Author Share Posted November 24, 2003 perl -le 'for(<>){$s{$&}++if/[\w.-]+\@(?:[\w-]+\.)+\w+/}print for keys%s' failove-za-obrabotka Това е. 62 - повече не можах да го сдъвча. Иначе идеята да се премахнат дублажите с един хеш вместо с два масива и един хеш наистина много по-добре стои - и за това най-безсрамно съм я изплагиатствал. Пробвах да използвам -n от командния ред вместо for(<>){}, но не се получава нещо - принтира намереното след всеки подаден ред от входа вместо само накрая и става мазано. След дълго умуване открих и какво ми бодеше очите в твоя код - undef$/... Четеш целия входен поток наведнъж, а това предполага евентуални проблеми с паметта при големи обеми данни... Освен това, не съм сигурен в момента, но дали така ще сработи ако му се подадат повече от един файл на входа примерно?! Трябва да се пробва... Link to comment Share on other sites More sharing options...
furiozo Posted November 24, 2003 Share Posted November 24, 2003 uslovieto beshe da e kratko , ne da harchi malko ram. za kvo ti e '?:' v regexp-a. za da stane s -n trqa printa da go zagradish s END{}: ...;END{print for keys%s} , otnovo po obrazec ot cade. Link to comment Share on other sites More sharing options...
ov3rm4n Posted November 24, 2003 Author Share Posted November 24, 2003 Прав си бе - просто се заяждам ... Регулярния израз не съм го съчинявал аз (и аз ползвам джокери ) - така е даден като пример за парсване на мейл адреси в някаква книга дето съм чел преди сто години. Сега като ми каза за END{} много просто изглежда, ма от де толкова акъл... Хайде пусни нещо от тебе или от него тука, да го поразгледаме - само аз ли ще се излагам? Link to comment Share on other sites More sharing options...
Godfather Posted February 26, 2004 Share Posted February 26, 2004 Хихи, реших да посъживя тази хубава темичка. Идеята ми хрумна, ровейки се в скриптове с подобна функционалност, които ми се видяха доста "раздути" На базата на предишното решение, може лесно да се състави "антиспам" скрипт, който да изважда IP адресите (на потенциалните спамъджии) от файла (обикновено мейлбокс), подаден на стандартния вход: undef$/;@a{<>=~/(\d+\.\d+\.\d+\.\d+)/g}=1;print "$_\n"for keys%a Така, в задачката се пита: как да се вмъкне възможно мининално количество код, който да отпечатва срещу всеки IP адрес броя на повторенията му във файла Допълнителен бонус: Регулярния израз не е 100% коректен, т.е. пропуска стойности, които не са реални IP адрси. Могат да се предложат и идеи за неговото коригиране Link to comment Share on other sites More sharing options...
ov3rm4n Posted February 26, 2004 Author Share Posted February 26, 2004 undef$/;$a{<>=~/(\d+\.\d+\.\d+\.\d+)/g}++;END{print "$_ $a{$_}\n"for keys%a} undef$/;$a{/(\d+\.\d+\.\d+\.\d+)/g}++;END{print "$_ $a{$_}\n"for keys%a} ??? Не е пробвано и не е обмисляно... Просто така ми дойде от вътре. Дай ми някакъв малък файл с данни за тест, че не разполагам на тая машина с подобен... Regex-а май наистина може да се пипне още... но не в посока на "скъсяване". Link to comment Share on other sites More sharing options...
furiozo Posted February 26, 2004 Share Posted February 26, 2004 има ли български форум по-подходящ за такива теми Link to comment Share on other sites More sharing options...
ov3rm4n Posted February 26, 2004 Author Share Posted February 26, 2004 има ли български форум по-подходящ за такива теми Аз поне не знам... Има пощенски списък, но там нещо е умряла работата - никой не поства. Ако знаеш някой давай насам... Но няма да е лошо примерно тук, ако някой премести тая тема в Линукс да речем и я закарфичи отгоре, та да не се губи... Двете вървят заедно. Дали ще стане? Ти няма ли да разбиеш задачката на Godfather?! Не се съмнявам, че пак ще излезете с най-подходящия код ... Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.