Jump to content
BulForum.com

Аде да си ги премерим...


ov3rm4n

Recommended Posts

ov3rm4n, не става така :( , най-малкото трябва да е undef$/;$@a{..., но и в този случай не върви, май няма да стане $_ да се използва за брояч или поне не по този начин.

Файлът ми е доста голям, но ще видя дали не мога да кача нещо такова.

Link to comment
Share on other sites

  • Replies 61
  • Created
  • Last Reply
ov3rm4n, не става така  :( , най-малкото трябва да е undef$/;$@a{..., но и в този случай не върви, май няма да стане $_ да се използва за брояч или поне не по този начин.

Файлът ми е доста голям, но ще видя дали не мога да кача нещо такова.

Е не целия де... Нещо малко - 10 реда от него стигат...

Link to comment
Share on other sites

perl -le 'for(<>){$s{$&}++if/\d+\.\d+\.\d+\.\d+/g}print"$_:$s{$_}"for keys%s' file_to_process

 

Резултат с тестовия пример:

5.50.4133.2400:1
24.172.74.87:1
96.164.178.36:1
192.168.80.5:1
41.190.210.38:1
69.148.51.238:1
24.14.61.179:1
33.131.71.113:1
210.117.100.126:1

 

 

Първия резултат е кофти, но е от реджекса... Много познато ми изглежда на мен кода.... ;) :rolleyes: :D Търся друг вариант в момента с undef$/, но едва ли ще е по-различен...

 

Я - преместили са темата, така както си бях вътре! Благодарско! Дано не съм натежал... :D

Link to comment
Share on other sites

sq 6te mi se spukate ot smqh ama ade nqkoi da prepora4a literatura i software za tezi rabotki.. dale4 sam ot misalta 4e 6te se nau4a nqkoga kato vas da go pravq ama..

Link to comment
Share on other sites

furiozo said : "btw da vzema da te pokanq v #warez.ru @ bgirc, sha mojesh da obsyjdash programistki problemi s TQ_ "

С малко закъснение (2 - 3 месеца)- кой е TQ_ да не е нещо като PD :)

P.S. аз за съжаление съм скаран с perl (aaa pain in the ass:) ) иначе python го уча по малко, та защо тука не ръгнем някоя задачка която да се решава независимо от езика за програмиране?

Link to comment
Share on other sites

Че то това беше идеята - да се "мерим" всеки със езика, който знае. Условието обаче е едно за всички - възможно най-късо парче код... Не цели програми от по 20-1000-10000 реда код. Не знам на Python дали може да се праскат такива one-liner's - ако може, ще се радвам да ме опровергаеш - Godfather е писал по-горе какво се иска от кода да направи, остава ти да ни изненадаш с Python-ски код за решаване на проблема... От самосебе си се разбира, че по обясними причини С++ или друг компилиран код (като Джава примерно) не влиза в категорията... РНР обаче става за целта. Само за протокола да спомена - РНР произлиза от Perl - самото съкращение означава Perl Home Page - първата версия на езика (то даже не е било още език) е служила на автора му да си поддържа сайта и е била чист Perl - после се откъсва от него и разработката преминава в отделен език...

Link to comment
Share on other sites

Нещо се отплеснах по регулярния израз... Бая вариации са възможни се оказва.

perl -le
'for(<>)
{$s{$&}++if
/([01]?\d\d|2[0-4]\d|25[0-5])\.([01]?\d\d|2[0-4]\d|25[0-5])\.([01]?\d\d|2[0-4]\d|25[0-5])\.([01]?\d\d|2[0-4]\d|25[0-5])/g}
print"$_:$s{$_}" for keys%s' file_to_process

^--1

Тоя път реджекс-а се държи сполучливо, но пък става по-длъжко... Разделих го на повече от един ред просто, за да не се скапва изгледа във форума - иначе както си требе - всичко е на един ред. Регулярния израз е от Perl Cookbook[©].

 

perl -le 'for(<>){$s{$&}++if(/(\d+)\.(\d+)\.(\d+)\.(\d+)/and$1<256and$2<256and$3<256and$4<256)}print"$_:$s{$_}"for keys%s' file_to_process

^--2

Маалко по-късичък реджекс, но пак връща само валидните IP-та...

 

perl -le 'for(<>){$s{$&}++if(/(\d+)\.(\d+)\.(\d+)\.(\d+)/&(1|$1|$2|$3|$4)<256)}print"$_:$s{$_}"for keys%s' file_to_process

^--3

Това пък е един малко откачен :wacko: и "мръсен" реджекс, ама пак е стриктен към IP-тата ...

 

perl -le 'for(<>){$s{$&}++if(/@{[q<(\d+)\.>x3]}(\d+)/&(1|$1|$2|$3|$4)<256)}print"$_:$s{$_}"for keys%s' file_to_process

^--4

:wacko: :blink: :wacko: :blink: Най-късия и най-шантавия до сега, и въпреки това пак връща само реални IP-та...

 

Последно:

perl -nle '$s{$&}++if(/@{[q<(\d+)\.>x3]}(\d+)/&(1|$1|$2|$3|$4)<256)END{print"$_:$s{$_}"for keys%s}' file_to_process

^--5

 

bytes count:

--------------

1 - 99: №5

2 - 102: №4

3 - 106: №3

4 - 122: №2

5 - 177: №1

--------------

 

Скрипта, който ги преброи...

 

В преброяването се включва частта "perl -le", тъй като това си е един вид шебанг реда...

Баси и темата се заформи - почна се от скрипт за спамери, а сега вече се борим срещу спамерите :D ...

Link to comment
Share on other sites

Мухаха, ov3rm4n, посред нощите ти идва ищах за Пърл :D

В последния скрипт обаче има една корекцийка: трябва да има ; преди END:

perl -nle '$s{$&}++if(/@{[q<(\d+)\.>x3]}(\d+)/&(1|$1|$2|$3|$4)<256);END{print"$_:$s{$_}"for sort keys%s}' file_to_process

 

Освен това сложих и едно sort - да излизат по-добре :D

Link to comment
Share on other sites

Моля, моля :D !! Не ми увеличавай кода ;) !! Грешката е вярна! При мен на 5.8 си се парсва коректно и без ; - все пак по условие се търси работещ код, не код отговарящ стриктно на документацията и синтаксиса! Иначе сортирането си е на място - опен сорс е все пак, може да се променя :D !

Мда - получи се малко нещо "малка нощна музика" при мен...

Link to comment
Share on other sites

В момента съм на друга машина под Уиндоус, Perl 5.8.0 и наистина не става без ;... Явно съм се обълкал :wacko: , но ще мога да го твърдя със сигурност когато седна пак на машината на която го пробвах първия път. Освен да е някаква стара версия там... Но много добре си спомням, че съзнателно махнах ; от кода и го тествах - за да го сваля под 100. И ако не беше сработило, нямаше да го пусна тук. Както и да е - до утре няма да мога да го проверя. Ако съм се объркал, ще коригирам резултата. Някой да даде ново условие - тъкмо съм набрал скорост...

Link to comment
Share on other sites

ne vyrvi 3ma da si pishem

php ne proizliza ot perl, nito kato ime, nito kato sintaxis, nito kato ideologiq

furiozo, това е много силно казано. Все пак имат имат сериозна връзка, особено в ранния стадий на развитие на PHP (в момента съкращението се развива рекурсивно, аналогично на GNU като "PHP: Hypertext Preprocessor" , но в началото повечето варинати почти винаги първата буква се асоциираше с Perl).

Link to comment
Share on other sites

ne vyrvi 3ma da si pishem

php ne proizliza ot perl, nito kato ime, nito kato sintaxis, nito kato ideologiq

Ами хайде и други да се намесят, де. Знам, че има такива хора тук. За имена няма смисъл да спорим - не името прави човека, дето се вика, а аз добавям - същото важи и за езиците... За компенсация на засегнатите ще приведа една от особено любимите ми дешифровки на Perl, не особено "ласкава", но пък много забавна:

 

Pathologically

Eclectic

Rubbish

Lister

 

:D :D :D

Link to comment
Share on other sites

:D поразгледах темата, и ми се струва, че по-подходящо заглавие за нея е например "най-късия и неразбираем ред от знаци, генерирани от реда с цифровите клавиши, комбинирани с Shift" :D :D

Не, сериозно, аз не разбирам от Perl ни най-малко, макар че схващам регулярните ви изрази.

Това да се направи на PHP е възможно, но по дължина не може да се мери със синтаксиса на Пърл. Затова и няма да се опитвам да го правя, понеже 50-60 знака е почти непосилно за ПХП.

Link to comment
Share on other sites

Това да се направи на PHP е възможно, но по дължина не може да се мери със синтаксиса на Пърл. Затова и няма да се опитвам да го правя, понеже 50-60 знака е почти непосилно за ПХП.

Мдам, това е една от отличителните черти на Perl и бих казал дори "очарованието" на Perl :D

Link to comment
Share on other sites

Ovrman аз ще се поръчкам с тоя python ама нямам много свободно време:( толкова работа имам че няправо свят ми се завива :wacko: Но и на мен ми стана интересно дали наистина на python може да се напише програма която да е толкова къса (силно се съмнявам).

Link to comment
Share on other sites

furiozo, това е много силно казано. Все пак имат имат сериозна връзка, ...

nope

ne vijdam nikakva vryzka po syshtestvo mejdu tqh.

originalnoto php e Personal Home Page, ako nqkoi e tvyrdql che ima perl v php neshto se e zamotal, ne che tolkva sym zapoznat no prosto nqma nachin, ne mislq che nqkoi koito e zapoznat za kvo staa duma bi tvyrdql che dvata ezika sa shodni

Link to comment
Share on other sites

Не искам да разваляме хубавата тема с подобни спорове. Но историята си е история. По същество днес двата езика са си съвсем отделни и с много малко общо по между им. Не така е било през 1995. Поради което и никъде няма да намериш PHP version 1 - започва направо от 2. PHP 1 е пакет Perl скриптове, работещи на домашната страница на Размус през 1995. Една корекция и за мен - наистина не е Perl Home Page, а Personal Home Page.

 

History of PHP

 

PHP/FI

PHP succeeds an older product, named PHP/FI. PHP/FI was created by Rasmus Lerdorf in 1995, initially as a simple set of Perl scripts for tracking accesses to his online resume. He named this set of scripts 'Personal Home Page Tools'. As more functionality was required, Rasmus wrote a much larger C implementation, which was able to communicate with databases, and enabled users to develop simple dynamic Web applications. Rasmus chose to release the source code for PHP/FI for everybody to see, so that anybody can use it, as well as fix bugs in it and improve the code.

 

PHP/FI, which stood for Personal Home Page / Forms Interpreter, included some of the basic functionality of PHP as we know it today. It had Perl-like variables, automatic inDerpretation of form variables and HTML embedded syntax. The syntax itself was similar to that of Perl, albeit much more limited, simple, and somewhat inconsistent.

 

http://www.zend.com/zend/hof/rasmus.php

 

С какво ще се главоблъскаме днес? Никой ли няма идея?

:( :( :(

 

Godfather, не може да не ти трябва някое малко туул-че в системната поддръжка, не бъди егоист - дай и на нас малко да си почешем мозъците!

Link to comment
Share on other sites

hi,

 

tova ne e uchastie v igrata a dokolkoto znam tq e i prikliuchila :)

shte mi se da izbegna standartnata situaciq tipichna za golf konkurs

a imenno: 2 dni entusiazym posledvan ot mrachen mesec v opiti da se

izpermutirat 5 dumi v poveche ot 120 varianta! :) i zatova dolniq

tekst e samo primer za variant, nishto poveche.

 

vzeh posledniq (kakto uspqh da razbera nai--kys) variant na programata za

proverka na ip-ta. kakto razbrah ot implementaciqta o otkyslechnite zabelejki

vhoda e spisyk s ip-ta po edno na red i izhodniq format ne e zadyljitelen.

 

razbira se ima osobenosti kym smqtaneto na strokes v golf-ovete no az

izbrah tozi:

 

cip1.pl
---begin---
#!/usr/bin/perl -nl
$s{$&}++if(/@{[q<(\d+)\.>x3]}(\d+)/&(1|$1|$2|$3|$4)<256);END{print"$_:$s{$_}"for keys%s}
---end---
109 bytes.

 

vidno e che nqma mnogo mqsto za myrdane, vse pak trqbva da proverim chislata no

na men mnogo mi se shteshe da mahna tezi or's. drugoto koeto makar zabavno syshto

strqska osobeno neopitnite e interpoliraneto na regexp-a. polzvaneto na END i

razpechatvane na hash vinagi sa bili tromavi (no pyk horata sporeqt za END-a).

 

za da mahna END se nalaga da mahna i `-n' ot komandnata liniq, koeto se okazva

syshto tolkova dylgo:

 

-nEND{};
for(<>){}

 

(9 bukvi)

 

i az predpochetoh for-a. kolkoto do otpechatvaneto na hash-a poshikalkavih s

uslovieto, sorry, no izhoda e kakto se iziskva: ip+count :)

 

eto kakvo se poluchi:

 

cip2.pl
---begin---
#!/usr/bin/perl
for(<>){$&>255?$_=0:0while/\d+/g;$s{$&}++if/((\d+)\.?){4}/}print join"\n",%s
---end---
93 bytes.

 

i v kraina smetka 16 baita po-malko (kak iskam da mahna tezi 10 strokes: ` join"\n",':))

(testovite danni si gi pravih sam, dano ne sym propusnal sluchai)

 

just for the record. later...

 

ps: netroot shte ti skysam ushite! poharchih blizo 2 chasa :)

Link to comment
Share on other sites

Е най-накрая! Защо да не е участие? Срок не е имало поставен. Радвам се че се намеси!

За броенето ако държим да е голф и да го обърнем на турнирче, викам да ползваме това... Взел съм го от сайт с основните правила на голфа. Но тая тема аз поне я почнах просто с идеята да си правим фън - не точно като голф турнир, за това и няма срокове и такива работи. Пък и наистина сме малко за сега за турнир. А и честно казано не ми харесват много условията на задачките по тия турнири - иска ми се кода да има все пак някакво практическо приложение, не просто да е сам за себе си...

 

Както и можеше да се предполага, ти направо ме размаза :D иначе... Честно казано опитах се и аз да вкарам ?: в употреба, но така и не стигнах до работещ вариант - оказва се като гледам твоя код, че съвсем в погрешна посока съм вървял... Нищо. Надявам се следващия път да се стегна. Като казах следващ път - давйте нещо де!

Link to comment
Share on other sites

opendir D,".";while($_=readdir D){if(~!/^\.\.?$/){$n=$_;$n=~s/\W+|_+/\./g;rename($_,$n)}}

 

89: wur.plx

 

Преименува всички файлове в директорията на скрипта, така че имената да отговарят на ъплоад правилата в уарез.ру - интервали, подчертавки и други не-буквено-цифрени знаци се заменят с точка. Работи под Уин и под *nix (в зависимост от разрешенията!!). Преименува и поддиректориите, но не работи рекурсивно и в тях.

 

НЕ РАБОТИ - ПОРАДИ НЕКАДЪРНОСТ НА АВТОРА!!

Би могло да се направи да работи и в директории различни от тази на скрипта, но с малко повече байтове:

$d=shift;opendir D,"$d";while($_=readdir D){if(~!/^\.\.?$/){$n=$_;$n=~s/\W+|_+/\./g;rename($_,$n)}}

 

99: wur1.plx

 

В тоя случай се очаква да се подаде като аргумент пълен път до директорията в която са файловете за преименуване.

 

 

Вариант има и с извикване на -МCwd от командния ред, без подаване на аргумент:

 

perl -MCwd 'opendir D,cwd();while($_=readdir D){if(~!/^\.\.?$/){$n=$_;$n=~s/\W+|_+/\./g;rename($_,$n)}}'

 

104: wur2.plx (броено с "perl -MCwd")

91: wur2.plx (броено без "perl -MCwd", не сме се уточнили още :confused ...)

 

Дали може да се ореже още повече? А да се включи и рекурсивно обработване на поддиректориите??

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...