LINUX.ORG.RU

перлы на perl'е


0

0


я даже не знаю плакать или смеятся, но вот случайно увидел такой вот перл (http://www.selectorweb.com/perl.html):
His code was called SelfGOL, and did one of four things:
1. played the game of life: selfgol -g -x=width -y=height
2. printed itself as output: selfgol -s
3. print a scrolling marquee: selfgol -d="banner"
4. modify a program to print itself as output: selfgol progname

It did this in under 1000 bytes of code: #!/usr/local/bin/perl -sw
$;=$/;seek+DATA,!++$/,!$s;$_=<DATA>;$s&&print||$g&&do{$y=( $x||=20)*($y||8);sub
i{sleep&f}sub'p{print$;x$=,join$;,$b=~/.{$x}/g}$j=$j;sub'f{pop}sub
n{substr($b,&f%$y,3)=~tr,O,O,}sub'g{$f=&f-1;($w,$w,substr($b,&f,1),O )[n($f-$x)+
n($x+$f)-(substr($b,&f,1)eq+O)+n$f]||$w}$w="\40";$b=join'',@ARGV?& lt;>:$_,$w
x$y;$b=~s).)$&=~/\w/?O:$w)ge;substr($b,$y)=q++;$g='$i=0;$i?$b:$c=$b;
substr+$c,$i,1,g$i;$g=~s?\d+?($&+1)%$y?e;$i-$y+1?eval$g:do{$i=-1;$b=$c;p;i
1}';sub'e{eval$g;&e}e}||eval||die+No.$;
__DATA__
if($j){{$^W=$|;*_=sub{$=+s=#([A-z])(.*)#=#$+$1#=g}}
@s=(q[$_=sprintf+pop@s,@s],q[
if($j){{$^W=$|;*_=sub{$=+s=#([A-z])(.*)#=#$+$1#=g}} #_The_Perl_Journal_#
@s=(q[%s],q[%s])x2;%s;print"\n"x&_,$_;i$j;eval}
])x2;$_=sprintf+pop@s,@s;print"\n"x&_,$_;i$j;eval}$/=$y;$"=&q uot;,";print
q<#!/usr/local/bin/perl -sw
if(!$s){>.($_=<>).q<}else{@s=(q[printf+pop@s,@s],q[#!/usr/local/bin/ perl -sw
if(!$s){>.(s$%$%%$g,tr=[=[===tr=]=]=||&d,$_).q<}else{@s=(q[%s],q[%s])x 2;%s}
])x2;printf+pop@s,@s}
>

★★
Ответ на: комментарий от CyberCoder

> если язык позволяет писать нечитаемый код, то это плохо

Не совсем. Практически на любом языке можно написать код, в котором чёрт ногу сломит. Даже на Python, особенно, если сделать obfuscation идентификаторов. Плох тот язык, на котором затруднительно писать читаемые программы.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от CyberCoder

> я хотел сказать, что если язык позволяет писать нечитаемый код,
> то это плохо

теперь-то я понял, почему на этом сайте так много людей,
не способных сформулировать свою мысль, или вопрос! видимо,
это от того, что русский язык никуда не годится.

idle ★★★★★
()
Ответ на: комментарий от idle

>Теперь-то я понял, почему на этом сайте так много людей,
>не способных сформулировать свою мысль, или вопрос! видимо,
>это от того, что русский язык никуда не годится.

Вы что-то не поняли?

CyberCoder
()
Ответ на: комментарий от CyberCoder

> я хотел сказать, что если язык позволяет писать нечитаемый код, то это плохо

назови хоть один существующий язык на котором _невозможно_ написать нечитаемый код? побольше lambda-выражений и даже на питоне получается нечитаемый код.

если же сделать язык слишком строгим, imho, не получит он популярности.

anonymous
()
Ответ на: комментарий от anonymous

иногда только ради исскуства будешь несколько строк страраться до часа времения превратить в одну...

vilfred ☆☆
()
Ответ на: комментарий от anonymous

> побольше lambda-выражений

А что это?

> если же сделать язык слишком строгим, imho, не получит он популярности.

Паскаль?

Правда, часто вещи, решаемые красиво и читабельно одной строкой, в паскале приходится заменять нагромождением строгого кода...

AngryElf ★★★★★
()
Ответ на: комментарий от qqqq

> Нет нечитабельных программ, есть плохие программисты :)

Мда? Т.е. программу в топике ты прочитаешь так же легко, как если бы она была написана с нормальными отступами и именами переменных без использования излишних извратов для экономии 1 байта исходного текста?

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

>Плох тот язык, на котором затруднительно писать читаемые программы. Вобщем, я с этим согласен. Просто не люблю некрасиво написанный код, а многие кодеры злоупотребляют сложными синтаксическими конструкциями. Но язык тут, конечно, не причем.

CyberCoder
()
Ответ на: комментарий от CyberCoder

Tak ona eshe i ne rabotaet:


[lxplus053] ~ > ./selfgol.pl -g -x=width -y=height
syntax error at ./selfgol.pl line 5, near "& lt;"
syntax error at ./selfgol.pl line 8, near "e}"
(Might be a runaway multi-line '' string starting on line 6)
Execution of ./selfgol.pl aborted due to compilation errors.

anonymous
()
Ответ на: комментарий от anonymous

Не один перл такой ;)

========================Start of Chess.C========================
/*
* Вот программа, занявшая в свое вpемя первое место ("Best of Show"). Она
* вызывается с необязательным числовым параметром (по умолчанию 2) и играет
* в шахматы. Параметр определяет глубину просмотра (при глубине большей,
* чем 3, она будет думать очень долго). Ходы задаются двумя восьмеричными
* числами (откуда куда - см. доску в начале игры, например, "e2-e4" нужно
* будет вводить как "64 44"), в приглашении к приему указывается количество
* просмотренных ходов и оценка позиций - своей и противника, т.е. Вас).
*
* Правила игры несколько упрощены - пешки превращаются только в ферзей, нет
* взятия на проходе и длинной рокировки (мне и короткую сделать не удалось),
* а также контроля правил повторения позиций и 50 ходов.
*/

#include <stdio.h>
#include <stdlib.h>

#define m(x)(x<0?-1:!!x)
#define g tj()-J
#define a(x)(x<0?-x:x)
#define h(x)((x)<=K?x:N-(x))
#define f 9999
#define A return
#define H printf(
#define R double
#define U int
#define V for
#define b else
#define u while
#define B if
U v,w,Y= -1,W,J,p,F,o=f,M,N,K,X,YY,_,P[f],s(); typedef U(*L)(); L q[f];
tj(){
U S=m(v)+(m(w)<<K); B(!S)A J; V(v=W+S; v!=J&&!q[v]; v+=S); A v; } k(){ _=K;
A
v?a(v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/
v?a(v)>2))||q[J];
} z(){ _=5; A v*w||g; } e(){ _= -2;
A(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0); } R VR(){ int PZ=0x7fff;
A(R)(rand()&PZ)/(R)PZ; } l(){ _=K+1; A(v*w&&a(v)-a(w))||g; } R UC(){ R
i=0,d;
u((i+=d=VR())<1.0); A d; } c(){ _= -11; A a(v)-a(w)||g; } I(ur,n,x){ W=ur;
J=n; B(P[W]!=Y||P[J]==Y)A J+1; v=(J&N)-(W&N); w=(J>>K)-(W>>K); A
q[W]()||(x&&QL(W,J,s)); } TT(W){ v=w=0; A q[W]()+K; } s(){ U j= -1,i; Y= -Y;
V(i=0; i<M; ++i){ B(j<0&&P[i]== -Y&&TT(i)&&_== -2) { j=i; i= -1; } b
B(j>=0&&!I(i,j,0))A Y= -Y; } A!(Y= -Y); } bb(){ _=1; A a(v*w)-2; } uv(){
V(v=0; v<f; ++v){ B(h(v>>K)==0){ U S=h(v&N);
q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e))); } b B(h(v>>K)==1)q[v]=k; b q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ U G=Y,i; J=0; V(i=0; i<M; ++i){
i%8||H"\n%4o ",i); B((Y=P[i]=m(P[i]))&& TT(i))H"%c ",_+93+Y*16); b H"- "); }
H"\n "); do H"%2d",i++&N); u(i&N); Y=G; H"\n"); } O(W,J){
B((q[J]=q[W])==k&&h(J>>K)==0)q[J]=l; B(q[W]==e)B(J-W==2)O(J+1,J-1); b
B(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { U
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; A YX; } C(){ U i,j,BZ=0; V(i=0; i<M; ++i){ L Z=q[i]; B(Z){ U
r=h(i>>K)+h(i&N),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):
(Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?f-r-r:36+r+r)))); Y=P[i]; V(j=0; j<M;
++j)B(!I(i,j,0))S+=(P[j]?5:1); BZ+=G==Y?S:-S; Y=G; } }
B(!(++X&M-1))write(1,".",1); A BZ; } PX(){ U i,Q=0,XP=0,JZ=M*M,E= -f,t,S=o;
B(!F--)A++F+C(); V(i=0; i<JZ; ++i)B(!I(i>>K+K,i&M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i&M-1,PX); Y= -Y; B(t>E){ ++XP; Q=i; E=t; B(E>=S) A++F,E; } }
B(!XP)E=s()?-f+1:0; p=Q; A++F,E; } RZ(){ U i,j,T=0; V(; ; ){ y(); o=f; do{
H"\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
u(scanf("%o%o",&i,&j)!=2||I(i,j,1)); O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(K<<1); j=p&(M-1); B(I(i,j,1)){ H"Rats!\n"); A; } O(i,j); Y= -Y;
B(T>M*M)H"\nHar har.\n"); } } main(ac,av)char**av; { long
B(T>time(),j=time(&j);
R i=0; srand((U)j); V(M=0; M<=f; ++M)i+=UC(); M=i/100; B(M&3)++M; B(M&1)--M;
V(N=1; N*N<M; ++N); K= --N/2; F=ac>1?atoi(av[1]):2; uv(); RZ(); }
=========================End of Chess.C========================

anonymous
()
Ответ на: комментарий от anonymous

Больше всего меня бесит такой стиль:

int f47(int _a,int _b,int _a1,int _b1,int _aa,int _bb)
{
int a,b,c,d,e,f,g,h,i,k,l,aa,bb,cc,dd,ee,ff,gg,hh,ii,kk,ll,a1,b1,c1,d1,e1,f1,g1,h1,i 1,k1,l1;
//и пошло-поехало...
...
}

CyberCoder
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.