[ chupcko @ 02.02.2004. 21:43 ] @

Malo sam smoren pracenjem ove teme, pa rekoh da malo potaknem razmisljanje.

Nekada davno sam na sed-ovoj strani video gomilu koda u signaturama (o cak je bilo i brainfuck-a).
Motivisan time sam seo i napisao nekoliko svojeg blesavog i cudnog koda, sto u c-u, sto u postscript-u.

Naravno ova tema ima ulogu i da se malo hvalim, ali isto tako i da potaknem malo na neku kretaivnost.

Eto za pocetak jednog malog koda koji realizuje poznatu igricu "15".

Code:

int _[16];m(x,i,f,z){for(f=z=-9,i=0;i<16;i++)f=_[i]==x?i:f,z=_[i]?z:i;i
=abs(f-z);if((i==1&&f/4==z/4)||i==4)i=_[f],_[f]=_[z],_[z]=i;}main(i,j){
srand(time(0));for(i=0;i<9999;i++)i<15?_[i]=i+1:m(rand()%15+1);for(;;){
for(j=i=0;i<16;j+=_[i]==++i)printf(_[i]?"%c%2d":"%c  ",i%4?' ':'\n',_[i
]);if(j>14&&puts("\n\nYou WIN"))break;printf("\n\nMove ? ");scanf("%d",
&i)||scanf("%*[^0-9]");m(i);}} /* http://alas.matf.bg.ac.yu/~chupcko */


Dakle da cujem komentare, ko smatra da je necitko neka koristi indent :). A da ne bi izasli iz teme, zanima me da li neko moze da predlozi heuristiku za pisanje ovakvih programa :).

A ko zeli da uci rekurziju:

Code:

   /**/main(e,c,h,o,_){e?(main(_,1,_,_,/**/
  /**/3),puts("")):_--&&(main(e,c<<_,h/**/
 /**/+3,o,_),putchar(223&2+"nimfs_a"[/**/
/**/(c&2)+h+o]),main(e,c,h,o+1,_));}/**/


Radi samo uz gcc, a ko zeli moze da se prepise varijanta za bilo koji ansi c :).

I najzad, jedan primer iz jedne veoma citirane virtove knjige:

Code:

/d{def}def/t{2 index{neg exch}{exch neg}ifelse}d/n{3 2 r not 3 1 r}d/f{2
copy rlineto}d/p{4 3 r dup 0 ne {1 sub 4 1 r t n p n f n t n p f p n t n
f n p n t 4 3 r 1 add}if 4 1 roll}d/r{roll}d 0.0001 setlinewidth newpath
50 140 moveto 8 true 2 0 p stroke showpage quit% CHUPCKO's Peano Fractal

[ Revisor @ 10.02.2004. 07:44 ] @
Ovo je interesantna tema ali tesko da bih je mogao svrstati u Art of
programming.

Zasto? Moje je misljenje da "Art of programming" predstavlja "Uemtnost
i estetuku u sluzbi programiranja". Dakle, citak (jasan), kod koji uz
to daje i, ako ne apsolutni, a ono bar std. ili relativni maksimum u
performansama; Ili, u duke slucajevima, kada izbacis nov algoritam
koji uz to sto je nov predstavlja i poboljsanje (brze dolazenje do
rezultata) prethodnih stvari na tu temu.

Ova "dela" svakako nisu ni jedno ni drugo, i pre bih ih svrstao u nesto
sa nazivom "Programiranje u sluzbi umetnosti i estetike". Svrha koju im
vidim jeste edukativna jer budi, ako ne i mastu, a ono bar ego bar
jednog (mozda veceg, mozda manjeg) dela programera a ima i cemu da nauci.
Heheh *etide*.

Premda, postoje i laksi nacini da se dodje do znanja potrebnog u praksi.


Ipak, ovo je interesantna tema. Dakle, cemu sluzi ova stvar?

Code:
#define a cout
#include <iostream>
#include <stdlib.h>
using namespace std;

char s[]="000";int t,c=0x400;
ostream&_(int k){return a<<(k
>=c?(_(k/c),t=k%c,a.put(' ')\
<<(t<10?s:t<100?s+1:t<1000?s+
2:s+3),t):k);}void main(int d
,char**b){while(--d)_(atoi(b[
d]))<<endl;}

[ chupcko @ 10.02.2004. 08:46 ] @
Pa da, to je lepo pitanje, da li je umetnost samo ono sto je citko, jednostavno i minimalno (japanska kaligrafija) ili pak moze da bude i nesto sto je prepuno nepotrebnih detalja (kako se bese zvao onaj sto je sebi odsekao uvo, a daaaaaaa van gog :) ).

Dakle dosli smo do tumacenja pojma "umetnost programiranja", ako zadrzimo standradnu definiciju koja je ustaljena jos od knuta, to je bas to: lepota pisanja algoritma.

Ali ja smatram da je nekada i nejasan algoritam lep :), sve zavisi kako definisemo.

Da li je lepo ono sto je jasno, sto je kratko, sto se brzo prevodi, brzo razume ili pak brzo izvrsava.

Sto je quock sort lepsi od insertion sorta ?

Dakle ajde malo da se zapitamo, sta je to lepota u programiranju, svakako necu da dopustim da je to nesto sto pojedinac kaze da je lepo i da svi ostali moramo to da usvojimo :).

A i nekako smatram jednu cinjenicu za tacnom: ko uspe da pise ovakve kodove, znace da pise i one jasne, ili kako neko kaze: umetnicke.

Uzgred ajde da pisemo malo u urm-u ili u rekurzivnim funkcijama, tek ce tu lepota da dodje do izrazaja :).

Inace onaj tvoj kod bi ja napisao ovako:

Code:

_(a){a>=1024&&(_(a/1024),putchar(' '));pri\
ntf("%04d",a%1024);}main(int d,char**b){wh\
ile(*++b&&_(atoi(*b)))puts("");}/*chupcko*/


Ne znam za vas, ali ja vidim lepotu u samom poigravanju kodom.
[ Revisor @ 10.02.2004. 13:35 ] @
Huh, jeste teska tema (u smislu sporazumevanja), i ocigledno moram da joj posvetim vise vremena. Ok.

===============================

Prvo, strana *pragmaticne umetnosti* programiranja tj. Umetnosti u sluzbi progrmiranja:

Umetnost. Staviti je u sluzbu programiranja znaci: u mnogome joj poseci krila. Jer pravilo poredjenja vise nije apstraktno vec egzaktno. E, a sad na citiranje:

Citat:
Chupcko: A i nekako smatram jednu cinjenicu za tacnom: ko uspe da pise ovakve kodove, znace da pise i one jasne, ili kako neko kaze: umetnicke.
Citat:
Chupcko: Ali ja smatram da je nekada i nejasan algoritam lep :), sve zavisi kako definisemo.


Ja nicim nisam rekao da kodovi poput

Code:
_(a){a>=1024&&(_(a/1024),putchar(' '));pri\
ntf("%04d",a%1024);}main(int d,char**b){wh\
ile(*++b&&_(atoi(*b)))puts("");}/*chupcko*/


ne mogu biti umetnicka dela (u pragmaticnom smislu). Naprotiv. Samo ih treba praviti onda kada za to ima razloga. ;)

Ono sto sam hteo reci (ili sam i rekao) jeste da je vecina kodova koje si postovao bezrazlozno zamazana (posmatrano iz perspektive umetnosti u sluzbi programiranja) i da je primarna, ako ne i jedina racionalna svrha koju im vidim (pored primitivnog kriptovanja lozinki) - edukativna (nikako mala, naravno).

Citat:
Rev: Svrha koju im vidim jeste edukativna jer budi, ako ne i mastu, a ono bar ego bar jednog (mozda veceg, mozda manjeg) dela programera a ima i cemu da nauci. Heheh *etide*.
Citat:
Chupcko: A i nekako smatram jednu cinjenicu za tacnom: ko uspe da pise ovakve kodove, znace da pise i one jasne, ili kako neko kaze: umetnicke.


Samo se ponavljamo...

===============================

Sada, strana niti (mrzi me da akcentujem) umetnosti provucenih kroz dusu programera

Nisam porekao umetnicku vrednost ... (prihvatam predloge) kodova. Oni svakako imaju svoje mesto u smislu raznovrsnih enigmi, mozda *dela* koje ne moze pisati svako podjednako {(nerazumljivo|alusticno|duhovito|...)} i problema koji samo mogu da prekale ili zabave pravu programersku dusu (ako smem da se tako izrazim).

Dakle, to je opravdanje sto sam ih nazvao simbolicno - *etide*.

===============================

Sada,

Ovakvi kodovi jesu umetnicka dela - umetnicka dela programera, ali najcesce ne i umetnost u sluzbi programiranja ;) . (to u stvari bese poenta mog prethodnog posta s tim sto nisam odao *duzno* priznanje i drugoj strani)

===============================

Heheh, igra pojmova. U muzici, jednoj od klasicnih umetnosti, etide predstavljaju dela pre svega edukativnog karaktera i vecina njih uopste nije interesantna naspram *pravih* dela.

U programiranju su, ocigledno *etide* vecinom zanimljivije od ostatka posla.

===============================

Citat:
Chupcko:
Code:
_(a){a>=1024&&(_(a/1024),putchar(' '));pri\
ntf("%04d",a%1024);}main(int d,char**b){wh\
ile(*++b&&_(atoi(*b)))puts("");}/*chupcko*/


Moj code mozes napisati tako ali onda cu ja reci da taj code ne radi isto
sto i moj. Ne treba mu mnogo, ali to jos nije to. ;)

===============================

Nisam posvetio previse koncentracije prilikom pisanja posta ali mislim da sam sada stvar rekao malo jasnije.
[ chupcko @ 10.02.2004. 14:49 ] @
Mislio sam da ce neko da se seti da "art of programming" prevede sa umesnost programiranja, a ne umetnost programiranja.

Moje pitanje i dalje nije usmereno ka tome da li su oni moji kodovi umetnost ili umesnost, ja sam ih pisao kao vezbu za ioccc :)

Ali ono sto me zanima: zasto se pisanje lepih (sta su to lepi) programa naziva umetnost, da li su lepi programii u brainfucku ? Zatim koji su kriterijumi kojim se odredjuje sta je to lepo a sta nije, da li je uopste taj postupak odluciv ili nije (obrati paznju na tezu churca ?).

Moj cilj je jednostavan, da pokazem kako sam ja pametan :)))) i da vidim da li imam drugih sagovornika koji su u stanju da pisu isto tako. Ako ih nema (onda tragam dalje) ako ih ima, cekam da se jave :).

evo jos malo koda:

Code:

main(c,h,p){p=15e4;while((c=getchar())>0){for(h=0;h<29&&h["ETINAMSDRG"
"UKWOHBLZFCP\0VX\0Q\0YJ"]!=(c&223);h++);if(h<29)for(h+=2;h>1;h/=2){c=h
&1;puts(c++?"\033[11;225]\a":"\033[11;75]\a");usleep(p*c);}else usleep
(p*2);usleep(p*2);}} /* echo CHUPCKO morse | ./a.out > /dev/console */


Uzgred za svaki moj ovako blesavi kod, postoji veliki dokument koji objasnjava kako se doslo do njega, to ce jednog dana da bude objavljeno, kada ga uoblicim u nesto malo ozbiljnijije.
[ -zombie- @ 11.02.2004. 05:37 ] @
Citat:
chupcko:
i da vidim da li imam drugih sagovornika koji su u stanju da pisu isto tako.


može neko biti sposoban da piše/čita takav kod, ali mu može biti nezanimljivo (tj možda je tu fazu prerastao. ;)

ovo kažem polušaljivo, ali stvarno sam se nekad palio da pišem ovakve kodove, i razne druge stvari, ali u poslednje vreme sve više volim čistoću i jednostavnost. mora da starim. :-P


btw, evo ti domaćeg zadatka da otkriješ šta radi ovaj regex (neću da stavim u code tag, jer ovo sve treba u jednom redu)..

Citat:
[^<]+|<(!(--([^-]*-([^-][^-]*-)*->?)?|\[CDATA\[([^]]*]([^]]+])*]+([^]>][^]]*]([^]]+])*]+)*>)?|DOCTYPE([ \n\t\r]+([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*([ \n\t\r]+(([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*|"[^"]*"|'[^']*'))*([ \n\t\r]+)?(\[(<(!(--[^-]*-([^-][^-]*-)*->|[^-]([^]"'><]+|"[^"]*"|'[^']*')*>)|\?([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*(\?>|[\n\r\t ][^?]*\?+([^>?][^?]*\?+)*>))|%([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*;|[ \n\t\r]+)*]([ \n\t\r]+)?)?>?)?)?|\?(([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*(\?>|[\n\r\t ][^?]*\?+([^>?][^?]*\?+)*>)?)?|/(([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*([ \n\t\r]+)?>?)?|(([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*([ \n\t\r]+([A-Za-z_:]|[^\x00-\x7F])([A-Za-z0-9_:.-]|[^\x00-\x7F])*([ \n\t\r]+)?=([ \n\t\r]+)?("[^<"]*"|'[^<']*'))*([ \n\t\r]+)?/?>?)?)


:-P
[ chupcko @ 11.02.2004. 09:08 ] @
Citat:
-zombie-:
može neko biti sposoban da piše/čita takav kod, ali mu može biti nezanimljivo (tj možda je tu fazu prerastao. ;)

ovo kažem polušaljivo, ali stvarno sam se nekad palio da pišem ovakve kodove, i razne druge stvari, ali u poslednje vreme sve više volim čistoću i jednostavnost. mora da starim. :-P


Pa da i to je lep odgovor. Naravno sve je pitanje korisnosti i po malo licne sujete. Da je ovo nekome nezanimljivo, mozda, ali onda taj sigurno se ne bavi programiranjem dublje, nego nesto tipa: ajde da napisemo program da uzmemo pare :). Ja se donekle rukovodim kineskom kaligrafijom. Ljudi godinama vezbaju da bi mogli pred smrt u jednom potezu da napisu jednu rec.

Sto se tice jednostavnosti, ja sam donekle dostigao da mi je onaj moj kod jednostavan :) i cist, sve je to stvar sposobnosti mozga da shvati (vidim ja da niko ne razmislja o tome da moze da poveca svoje sposobnosti :) )

E super, ti si pisao takve kodove, pa podeli ih sa nama :), cisto da i mi ostali malo ucimo.

Sto se tice regexpa, ja nisam mozda dobar covek za to :), posto sam jos 95-e pisao svoju verziju lex-a, a i svoju verziju yacc-a :). Ali cu da pogledam, mozda naidjem na nesto sto mi deluje zanimljivo :).

http://alas.matf.bg.ac.yu/~chupcko/archive/agjp.tar.gz
[ jablan @ 11.02.2004. 09:45 ] @
Citat:

Pa da i to je lep odgovor. Naravno sve je pitanje korisnosti i po malo licne
sujete. Da je ovo nekome nezanimljivo, mozda, ali onda taj sigurno se ne
bavi programiranjem dublje, nego nesto tipa: ajde da napisemo program da
uzmemo pare :). Ja se donekle rukovodim kineskom kaligrafijom. Ljudi
godinama vezbaju da bi mogli pred smrt u jednom potezu da napisu jednu rec.


Kineski kaligrafi su verovatno imali svoje robove koji su umesto njih brali
pirinac pa su mogli da se zamajavaju savrsenim slovima. Sve zavisi od toga
da li ti je programiranje hobi ili profesija. Ako je profesija (zivis
prevashodno od programiranja), nekako si uslovljen da ti sav kood bude
koristan (isplativ). Ako je hobi (imas druge izvore prihoda), svakako mozes
da si priustis programerski larpurlartizam poput najnejasnijeg c programa.

[ chupcko @ 11.02.2004. 10:28 ] @
Pa sve to zavisi, nekada se moras zrtvovati za umetnost.
E sada zasto mislis da neko ko se profesionalno bavi programiranjem, ne moze u slobodno vreme da se igra malo. Jel to ono ja sam muzicar i sviram narodnjake 8 sati, a kada dodjem kuci ne pada mi na pamet da sviram jazz.

Uostalom ja smatram da profesionalci moraju da mogu ponekada da pisu i takav kod, to jest pravi profesionalac nece da se limitira samo na jednu tehnologiju.

Doduse moram priznati da sam i ja prvi put kada sam video ioccc rekao: ja sam ozbiljan programer, sta oni meni tu takve gluposti, to je za decu, ali isto tako i za vrhunskog atleticara ja kazem: ma sta on tu trci, to je glupost, a sve to zato sto ja to ne mogu :).

E pa sada sam video da mogu, sada sam i zvanicno geek :).
[ leka @ 11.02.2004. 10:31 ] @
-zombie- u potpunosti delim tvoje misljenje.
[ jablan @ 11.02.2004. 11:01 ] @
Citat:
chupcko:
Pa sve to zavisi, nekada se moras zrtvovati za umetnost.
E sada zasto mislis da neko ko se profesionalno bavi programiranjem, ne moze u slobodno vreme da se igra malo. Jel to ono ja sam muzicar i sviram narodnjake 8 sati, a kada dodjem kuci ne pada mi na pamet da sviram jazz.


Pa mislim da većina profesionalnih programera provodi slobodno vreme na sledeće načine:

1) Provodi vreme sa svojim bližnjima
2) Bavi se hobijem (recimo sviranjem narodnjaka i/ili džeza)
3) Uči nove tehnologije kako ga ne bi odnela IT matica

Isto tako mislim da se narodnjaku (programeru), kad dođe kući sa višednevne svadbe (posla), smuči sama pomisao na svoj instrument (komp) i da se odmah svali u krevet, do sledeće tezge. Toliko o umetnosti.
[ chupcko @ 11.02.2004. 14:25 ] @
Citat:
jablan:
Pa mislim da većina profesionalnih programera provodi slobodno vreme na sledeće načine:

1) Provodi vreme sa svojim bližnjima
2) Bavi se hobijem (recimo sviranjem narodnjaka i/ili džeza)
3) Uči nove tehnologije kako ga ne bi odnela IT matica

Isto tako mislim da se narodnjaku (programeru), kad dođe kući sa višednevne svadbe (posla), smuči sama pomisao na svoj instrument (komp) i da se odmah svali u krevet, do sledeće tezge. Toliko o umetnosti. :)


Aham, a koliko ti znas profesionalnih programera ?
Uostalom onaj profi programer koji nije spreman da nauci nesto novo sto mozda i nije IT tehnologija (ili jeste ?, ali ne donosi pare) i nije neki bas :).

Dakle da rezimiram, svi vi mislite da je ovo sto ja radim glupost i da to pravi profi programeri nikada ne bi radili ?

Pa oki, ja kada malo bolje razmislim i nisam profi programer ;), ali ipak se nadam da jesam programer.

Ajde cisto da malo zainteresujemo buduce narastaje koji bi da ipak aktiviraju mozak, bez obzira da li su programeri ili nisu: treba napisati, recimo u c-u program koji ce izvrsavanjem da ispise svoj kod.

Naravno sva resenja su dobro dosla, ali treba napisati resenje koje ne zavisi od puno uslova :).

Ajde svi vi profi programeri koji pravite jednostavan kod (bez googlanja i seracha po es-u) napisite svoju verziju, cisto da dokazete nama koji nismo profi programeri kako se to radi jednostavno i elegatno :).

Sto se mene tice, ja cu u slobodno vreme da umesto gledanja u jednu tacku da i dalje pisem po koji kratki kod, i razuemcu vas koji ne mozete da ga razumete :).
[ jablan @ 11.02.2004. 14:58 ] @
Citat:
chupcko:
Aham, a koliko ti znas profesionalnih programera ?

Pa oki, ja kada malo bolje razmislim i nisam profi programer , ali ipak se nadam da jesam programer.

Ajde svi vi profi programeri koji pravite jednostavan kod (bez googlanja i seracha po es-u) napisite svoju verziju, cisto da dokazete nama koji nismo profi programeri kako se to radi jednostavno i elegatno .


Bojim se da si me pogrešno razumeo. Pojam profesionalnog programera treba razlikovati od pojma dobrog programera (i ta razlika je jako bitna; što bi jedan drugar rekao razlika je toliko bitna da slobodno možemo reći da je bajtna). Vrlo je verovatno, sudeći po tvojim porukama, da si ti, kao ne-profi programer, bolji programer od većine profi programera. Nadam se da se sad razumemo.

Da odgovorim na pitanje: znam sigurno preko 50 profi programera, sa preko desetak njih komuniciram on a daily basis.

A da rešavam postavljeni zadatak ne bih baš, jer bih ga rešio na svoj način, koji verovatno ne bi naišao na odobravanje kaligrafskog dela es-populacije: starim dobrim Google-ovim algoritmom.

Pozdrav!
[ jablan @ 11.02.2004. 15:09 ] @
Citat:
chupcko:
Pa sve to zavisi, nekada se moras zrtvovati za umetnost.
E sada zasto mislis da neko ko se profesionalno bavi programiranjem, ne moze u slobodno vreme da se igra malo. Jel to ono ja sam muzicar i sviram narodnjake 8 sati, a kada dodjem kuci ne pada mi na pamet da sviram jazz.


Izvini narode za ovoliki broj poruka, ali mi je palo na pamet jedno još bolje poređenje kada je reč o profi i hobi programerima:

Profi programeri su kao fizikalci na visokogradnji: svakodnevno nose džakove i cigle sa jednog mesta na drugo i ne pada im na pamet da, kad se vrate kući odu u teretanu i rade na oblikovanju svog tela. Stalo im je samo da na što lakši način zarade dnevnicu (a da se pritom kuća ne sruši, da se razumemo).

Hobi programeri su ljudi koji svesno rade na svom organu (hm, mozgu), sistematično i bez obaveze da nešto završe do nekog roka, slično kao što momci koji se bave nekim sedećim poslom popodne idu u teretanu i vajaju svoje telo.

I vrlo je verovatno da bilder može da digne veći teret od zidara. Ali bilder će teško napraviti zid, a o kući da ne govorim.

Nadam se da sam izgurao poentu na videlo.
[ leka @ 11.02.2004. 16:05 ] @
Na tu temu se vec diskutovalo na C/C++ diskusionoj grupi. Uz malo
pretrazivanja ES-a mozes doci do tekstova koje su ljudi slali...
Citat:
Ajde cisto da malo zainteresujemo buduce narastaje koji bi da
ipak aktiviraju mozak, bez obzira da li su programeri ili nisu: treba
napisati, recimo u c-u program koji ce izvrsavanjem da ispise svoj
kod.
[ leka @ 11.02.2004. 16:06 ] @
Bravo jablane, ljudi zapravo cesto ne razmisljaju na ovaj nacin. U
potpunosti se slazem sa tobom u vezi ovoga.
Citat:
Pojam _profesionalnog_ programera treba razlikovati od pojma
_dobrog_ programera
[ chupcko @ 11.02.2004. 20:51 ] @
Sta drugo da kazem nego da se slazem sa vama.

Da, ti kratki programi se zovu "quine", vise o njima na
http://www.nyx.net/~gthompso/quine.htm

Najbolje da i dalje sve definicije ostanu iste, glupo je da menjamo ista.
Vazno je poznavati profesionalne ili dobre programere, a ko zeli da uci ...

Odoh da ucim taj c, bicu i ja jednom dobar profesionalni geek programer :)
[ zi:: @ 12.02.2004. 07:00 ] @
Ne bih ove kratke programčiće nazvao Artom, ali da je blizu, blizu je.

Obavezno pogledajte: http://www.ioccc.org/ i pobednike ...
http://www.ioccc.org/years-spoiler.html

Tu se stvarno može naći svašta, Tetris kod koji stane u 80x24 terminal, a da ima i high score.
Probajte kompajlirati ... jednostavno radi.

Problem programa koji ispisuje sam sebe sam prvi put video u knjizi Goedel Escher Bach, i nije me posebno oduševio. Jeste interesantno, ali ne interesantnije od Escherovih grafika i npr. Bachove kompozicije koja se isto svira ako se note okrenu naopako.

Meni su prava umetnost algoritmi koji optimalno rešavaju neki problem, kao što je Dijkstrin algoritam za najkraće puteve, i algoritmi koji nisu optimalni na prvi pogled, ali su itekako brži ako se izvršavaju na specijalnim arhitekturama (npr. multiprocesorskim).

E sada, koliko profesionalni programeri imaju prilike da koriste te algoritme, to je drugo pitanje. Slažem se sa gore navedenim stvarima.
[ leka @ 12.02.2004. 09:06 ] @
Normalan narod uglavnom ne zeli da postane "geek". No, svako je krojac
svoje sudbine...

Citat:
Odoh da ucim taj c, bicu i ja jednom dobar profesionalni geek
programer :)
[ Ivan Dimkovic @ 12.02.2004. 09:42 ] @
Citat:

Problem programa koji ispisuje sam sebe sam prvi put video u knjizi Goedel Escher Bach, i nije me posebno oduševio. Jeste interesantno, ali ne interesantnije od Escherovih grafika i npr. Bachove kompozicije koja se isto svira ako se note okrenu naopako.


Knjiga je masterpiece :) A Bach je svakako bio dobar programer :)

Citat:

E sada, koliko profesionalni programeri imaju prilike da koriste te algoritme, to je drugo pitanje. Slažem se sa gore navedenim stvarima.


Hmm.. kako gde - tj. zavisi u kakvom okruzenju radis.. u firmama i institutima sa kojim ja imam kontakte se ljudi koji rade na razvoju dele na, grubo, dve grupe

- Problem solvere (ljudi koji smiljaju neke algoritme, nove metode .. kako da budes bolji od konkurencije)

- Implementatore (tj... ljude koji implementiraju ono sto im se kaze), manje vise "fizicki" posao.

Jedno i drugo moze da se preplice, ali obicno "problem solvera" nemas bas puno, a i nema svaka firma potrebe za takvim ljudima.

Ako radis na necemu potpuno novom, problem solveri mogu da ti donesu znacajnu prednost - i tu znanje svih mogucih tehnika optimizacije bas zna da pomogne.
[ chupcko @ 12.02.2004. 10:04 ] @
Eh, znao sam da ce da se vrati do "GEB"-a, moram priznati da sam za quine cuo prvi put od dejana ristanovica u klubu programera, nekada davno dok je to bilo lepo mesto za zezanje.

Sto se tice toga da neko zeli da bude geek, cini mi se da mi koji smo smeli da ostanemo u srbiji se i dalje ponosimo da smo na taj nacin drugaciji, dok oni koji su u svedskoj recimo, zele da se uklope nekako u sredinu :).

Nu da se vratimo na kratke forme, slazemo se svi da nisu umetnost (a sta je to umetnost uopste), e sada da li se slazemo sa tim da je lako ili tesko pisati takve kodove ? Isto tako da li takev kodove pisu programeri ili ne, i pak ako su vec programeri da li su dobri ili prosecni, ili pak profesionalni ili neprofesionalni :).

IOCCC sam spomenuo, naravno, sve ovo sto radim je samo moja priprema za IOCCC, moj prvi kod za ioccc je:
Code:

main(c,v){return c?c*main(c-1,v):1;}


Cisto sam krenuo u drugom pravcu, da istrazim malo ono cime se bavim i na kraju sam napisao sledeci kod:

Code:

#define m(x,y,z) main(){x##puts(y);##z}
#define p m(char c[80];if(gets(c)){main();,c,})
p
#define p m(,"Hello world!",)
#define m(x,y,z) main(){x##puts(y);##z}


E ovo je definitno bilo inspirisano bach-om, moj prvi program koji se moze kompajlirati u oba smera:
hint: make a.c; cat a.c | ./a > b.c; make b; ./b

Ajde kada sam pretvorio ovu temu u servis licnog hvaljenja (da imam posle link koji da ubacim u cv):

Code:

/* CHUPCKO */

#include <stdio.h>

void main(void)
{
  char b='\\';
  char c='\'';
  char s='\"';
  char n='\n';
  char *f="/* CHUPCKO */%c%c#include <stdio.h>%c%cvoid main(void)%c{%c  char b=%c%c%c%c;%c  char c=%c%c%c%c;%c  char s=%c%c%c%c;%c  char n=%c%cn%c;%c  char *f=%c%s%c;%c  printf(f,n,n,n,n,n,n,c,b,b,c,n,c,b,c,c,n,c,b,s,c,n,c,b,c,n,s,f,s,n,n,n);%c}%c";
  printf(f,n,n,n,n,n,n,c,b,b,c,n,c,b,c,c,n,c,b,s,c,n,c,b,c,n,s,f,s,n,n,n);
}


P.S. Ajde vi profi programeri koji vec citate es, potrosite koji minut i napisite nesto slatko i postujte, ima nas koji cemo da se radujemo :).
[ leka @ 12.02.2004. 10:25 ] @
Niko nije pobegao u Svedsku, veruj mi na rec. To je zemlja koja moze bez
problema da sluzi za primer (a i sluzi, jer malo-malo pa citam kako neka
druga zemlja koristi proverene svedske sisteme - konkretan primer je
socijalno osiguranje, Svedjani su tu No1, ali to nije tema za ovu
diskusiju...).

Ponositi se time sto si "drugaciji" i pomiriti se sa cinjenicom da nemas
nimalo zivota (iako naravno osobe koje NEMAJU zivot uvek TVRDE kako ga
imaju) moze samo budala.

Oni koji kako ti rece "zele da se uklope nekako u sredinu" su samo
prosto izabrali drugu, prirodniju opciju - da zive normalnim zivotom, da
se zezaju, provode, muvaju, planinare, pecaju, dzogiraju - sve ono sto
ti dragi chp mozes samo da sanjas (bar za sada - imas jos vremena da
dodjes k sebi).

Citat:
Sto se tice toga da neko zeli da bude geek, cini mi se da mi koji
smo smeli da
ostanemo u srbiji se i dalje ponosimo da smo na taj nacin drugaciji, dok
oni koji su u
svedskoj recimo, zele da se uklope nekako u sredinu :).
[ Ivan Dimkovic @ 12.02.2004. 11:32 ] @
Molim ucesnike rasprave da se vrate na temu, rasprave ciji je stil zivota normalniji, prirodniji ili bolji nisu za ovaj forum - after all, svako ima pravo da zivi kako on smatra da je OK.

Tema je "art of programming" - pa makar neko ziveo i u buretu.
[ chupcko @ 12.02.2004. 13:11 ] @
E sada, da li nekog zanima da isto se bavi pisanjem cuda za IOCCC ili pak za domacu varinajtu IOCCC-a?

Dosli smo do onoga sta sam zeleo, naravno usput smo kosntaotvali i da pravi programer mora da ...

Dakle da li ima bar nekoliko zainteresovanih za pisanje ovakih programa i odredjenu prezentaciju, mozda kao neko predavanje, mozda kao demostracija, a mozda kao takmicenje :).

Recimo na zadatu temu :), ili kako vec.

Sto se mene tice, ja imam nekoliko diploma da sam programer, koliko sam dobar, a koliko profesionalan, a koliko lep, sta znam vise. Valjda se za koju godinu javi neko ko se ne zadovoljava kopiranjem koda, nego i pisanjem :).

Toliko od mene u ovoj temi :).
[ leka @ 12.02.2004. 18:46 ] @
Ovo je takodje dobra tema za posebno diskutovanje - ja sam siguran da ce
se veliki broj programera sloziti sa mojim misljenjem da je bolje
kopirati kod koji ima smisla, od koga se moze nesto novo nauciti, ili
zaraditi - nego pisati besmisleni...

Citat:
Valjda se za koju godinu javi neko ko se ne zadovoljava
kopiranjem koda, nego i pisanjem :).
[ sallle @ 13.02.2004. 02:04 ] @
void pitanje {cout<<"sta je IOCCC?"}
[ caboom @ 13.02.2004. 07:19 ] @
kratak odgovor bi bio: http://www.ioccc.org/
[ Revisor @ 15.04.2004. 03:08 ] @
Ah, doso' je red na mene.
Pa, moracu da zvocam. Ako neko zeli da obrise, neka prvo procita ceo topic, pa neka jos jednom razmisli o toj ideji.

Citat:
Chupcko: Naravno sve je pitanje korisnosti i po malo licne sujete. Da je ovo nekome nezanimljivo, mozda, ali onda taj sigurno se ne bavi programiranjem dublje, nego nesto tipa: ajde da napisemo program da uzmemo pare


Chupcko, razumem tvoje odusevljenje sa ioccc ali zaista ga ne delim sa tobom. Postoje mnoge druge ravni kreativnosti. Jedna od njih:

Zamisli da ti podje za rukom da napravis trigonometriju 4-40x brzu od sistemske (Ovolike varijacije zbog raznih konfiguracija, debug verzija itd.), implementiras je u real-time render nove generacije, koji prevazilazi mogucnosti OpenGL 3D ili D3D9, u smislu realisticnosti geometrije prikaza, za pocetak. Za mene je to kreativnost, i nesto cemu treba posvetiti vreme. Uz to, SIGURNO nije radjeno zbog novca jer NI JEDNA firma koja se danas bavi proizvodnjom odgovarajuce opreme nece sada baciti gomilu novca koja je vec ulozena u izradu *novih sistema*, koji samo staro pakuju tako da radi brze i nabudzenije.


Citat:
Chupcko: Doduse moram priznati da sam i ja prvi put kada sam video ioccc rekao: ja sam ozbiljan programer, sta oni meni tu takve gluposti, to je za decu, ali isto tako i za vrhunskog atleticara ja kazem: ma sta on tu trci, to je glupost, a sve to zato sto ja to ne mogu :).


Ni ovo nije tacno. Otvoreno: sto se mene tice, ovde se radi samo o tome da si otkrio ioccc i sada zelis (ili si zeleo) druge da masiras sa time. Trebao si da ovaj topic nazoves ioccc ovo, ioccc ono i nikad ne bih imao razloga da ti pisem ove redove.


Citat:
Revisor: Ja nicim nisam rekao da kodovi poput ... ne mogu biti umetnicka dela (u pragmaticnom smislu). Naprotiv. Samo ih treba praviti onda kada za to ima razloga. ;)

Citat:
Chupcko: Uostalom ja smatram da profesionalci moraju da mogu ponekada da pisu i takav kod, to jest pravi profesionalac nece da se limitira samo na jednu tehnologiju.


Uz to, stalno se ponavljas, a nekad ponavljas i smisao tudjih postova. Nije ti prvi put, i zamolicu te da pratis sta drugi pricaju pre nego sto nesto kazes.

Citat:
Chupcko: Dakle da rezimiram, svi vi mislite da je ovo sto ja radim glupost i da to pravi profi programeri nikada ne bi radili ?


... Kao sto rekoh ... . Moj odgovor je bio negativan pre nego sto si postavio pitanje.


Citat:
Moj cilj je jednostavan, da pokazem kako sam ja pametan :)))


Pa, nikad nije kasno. Cekam... (ozbiljno) 0;)


Citat:
Chupcko: Ajde cisto da malo zainteresujemo buduce narastaje koji bi da ipak aktiviraju mozak, bez obzira da li su programeri ili nisu: treba napisati, recimo u c-u program koji ce izvrsavanjem da ispise svoj kod.

Naravno sva resenja su dobro dosla, ali treba napisati resenje koje ne zavisi od puno uslova :).

Ajde svi vi profi programeri koji pravite jednostavan kod (bez googlanja i seracha po es-u) napisite svoju verziju, cisto da dokazete nama koji nismo profi programeri kako se to radi jednostavno i elegatno :).
Citat:
A da re?avam postavljeni zadatak ne bih ba?, jer bih ga re?io na svoj nacin, koji verovatno ne bi nai?ao na odobravanje kaligrafskog dela es-populacije: starim dobrim Google-ovim algoritmom.


Bah, mojih 5c:

Napisi kod pre-kompajlera koji u kod koji priprema za kompajliranje (koristi temp. fajl) dopisuje jednostavnu liniju koda koja flushuje sve sto je u source-u, a onda ga kompajlira sa bcc32 npr. Kompajliraj ga jednom, a onda ga, ako bas zelis, izvrsi i na njemu samom (source-u). Tada pocni da kompajliras sa njim. Mislim da ce te rezultati zadovoljiti.

-----------

Citat:
zi:: : ... Bachove kompozicije koja se isto svira ako se note okrenu naopako.


Nista posebno, ako je to ono sto si napisao. Bach ima mnogo impresivnijih dela. BTW, stil mi ne lici na Bach-a, pre na nekoga iz doba Arnolda Senberga.

-----------

Jos jedan. Cuveni mystery.c sveden na drugu ravan posmatranja:

http://alas.matf.bg.ac.yu/~mr02117/wega.php?dl=mystery.c
http://alas.matf.bg.ac.yu/~mr02117/wega.php?dl=demystery.cpp
[ chupcko @ 15.04.2004. 12:31 ] @
:), meni je post obavio ono sto mi je trebao, a to je da objavim moje zezalice :). I da se lepo zaposlim (menjao sam posao). E sada, kada razmislim bolje, mislim da si u pravu, mada mi nije jasno sto si i ti krenuo da pises cudan kod :).

Uzgred lep je ono kod :).

Revisor bice da nisi shvatio celu pricu :), nisam rekao da se ovakav kod ugradjuje u ono ozbiljno sto radim, a radim nesto ozbiljno. Ovo je igra, poigravanje, zongliranje.

Sto se mene tice, nisam naisia na ljude koji bi da se igraju, sto mi samo govori o kolicini foliraze ljudi koji su kao fol IT strucnjaci :).

A sto se tice pameti, uf, jel moze clanska karta mense, ili moze diploma fakulteta :). Mada evo upravo sam sebe demantovao da sam pametan, cim imam potrebe da se dokazujem da sam pametan onda sam glup, ... ops, ali cim sam to shvatio opet sam pametan, o ne, opet glup, pametan, glup, pametan, glup, .... PROSECAN.
[ -zombie- @ 15.04.2004. 17:51 ] @
Citat:
chupcko:
Sto se mene tice, nisam naisia na ljude koji bi da se igraju, sto mi samo govori o kolicini foliraze ljudi koji su kao fol IT strucnjaci :).


nemoj da si smešan.. to što neko nema vremena da se zamlaćuje ovakvim glupostima, a ti imaš (blago tebi) nema veze sa životom..

a i drugo, ioccc nije nešto preterano kreativno. to je najviše zajebana (obscure, obfuscated) sintaxa. pravi kreativni i zanimljivi algoritmi (čime se ja igram kada nađem vremena) su algoritmi za grafove, drveta, dinamičko programiranje, greedy algoritmi, string matching, geometriski problemi (i u stvari sve iz TAOCP)..


i daj batali malo sa tim samo-hvalospevima.. od poslednjih 30tak tvojih poruka na forumima ESa, 26 su ti u fazonu "ja pametan", "ja mnogo važan", "ja radio ovo", "ja direktor", "ja se bavio time još 1914", "ja član mense" i slično..

znamo svi da su te skoro pustili sa lanca (aka ugovora o zabrani pisanja na forumima), i da se tvoj enormni super-ego gomilao u tebi svih ovih godina, pa je sada bujica morala da pokulja, ali čak isa tim opravdanjem, ti ga brate pretera..