Saturday, August 1, 2009

USACO

USACO (http://ace.delos.com/usacogate) е тренинг сајт за програмирање каде секој може да се регистрира и да решава. Според мене, секој кој има елементарни познавања од програмирање и се интересира за решавање на проблеми мора задолжително да го посети сајтот. Вкупно има околу 100 задачи кои се групирани во 6 chapters. Секој chapter се состои од sections. Во секоја секција има околу 3-4 задачи. Убавата и интересната работа е тоа што задачите мора да се решаваат по ред. Не може да се решава задача од некоја повисока секција додека не се решат сите претходни задачи. Во почетокот задачите се лесни, а како се напредува задачите се се потешки. Покрај задачите има и посебни лекции наречени TEXTS. Во секој TEXT е обработена некоја одредена тема од областа на програмирањето и алгоритмите. Сите основни принципи на програмирање и најбитни и најосновни алгоритми се обработени во овој тренинг. Овој тренинг пред се е наменет за средношколци кои се спремаат за натпреварите по информатика, овде пред се мислам на IOI (International Olympiad in Informatics).

На овој тренинг сајт почнав да решавам кон крајот на четврта година средно (пред 2 години) кога се спремав за IOI 2007. Поради обврски кон факултетот пред се, решавав на сајтот со повремени прекини, па така дури денес можам да кажам дека ги решив сите задачи :) Сите задачи се предизвикувачки, но сепак најинтересни ми беа последните три од chapter 6. При решавање се вежба логиката и размислувањето. Некои задачи некогаш и би рекол дека се невозможни на почетокот но кога навистина добро ќе се размисли - за се има решение, само треба да се најде. Начин на решавање на задачите, прво добро да се прочита и да се сфати што е проблемот. Потоа анализа, разгледување на примери, размислување како да се тргне кон решавање. Разгледување на разни начини. Треба да се одбере најлогичниот начин кој претходно треба да е добро анализиран, прво умствено да се изврши па потоа тоа да се преточи во програмски код. Доколку некоја од овие фази се обидете да ја прескокнете или да ја поминете набрзина без добро размислување тоа најчесто се одразува на време и на нерви :) Кога ќе напишете неколку стотина линии код, гледате дека се грешка, па потоа пак од почеток - секако никој не го сака ова. Во кој програмски јазик ќе се програмира мислам дека е најмал проблем иако ова не е баш работа која може да се занемари. Предноста е кај оние кои знаат повеќе програмски јазици бидејќи ги знаат предностите и недостатоците на секој па во дадена ситуација ќе знаат да го искористат најдобриот избор. Во почетокот, кога почнав да навлегувам во водите на програмирањето кодирав во Pascal, тогаш за мене Pascal беше програмски јазик со кој можев буквално се да искодирам :) толку бев уверен и во себе и во моќта на Pascal. Потоа научив C, овој програмски јазик би го споредил во брзината и перформансите со брза спортска кола, но недостатокот е во тешкото управување со воланот :) За попрости проблеми лесно е да се пишува код во C, но кога ќе наидете на посложени проблеми кои бараат користење на посложени структури и кои имаат потреба од готови библиотеки доаѓа потреба од друг програмски јазик кој ќе ги надмине недостатоците на C, а сепак ќе ја задржи брзината. Погодувате, тоа е C++. Немам баш многу искуство во C++ bидејќи брзо мигрирав од C во Java, но тоа е јазикот кој ми беше алтернатива при решавањето доколку наидев на проблем кој го надминува временскиот лимит во Java. Иста програма напишана во Java и C++ не дава иста брзина на извршување. C++ e далеку побрз. Но сепак Java ми е омилен програмски јазик за програмирање пред се заради неговата едноставност и моќ. Во Java може да се напише буквално се и тоа процесот на кодирање е многу побрз затоа што нуди подршка од многу корисни библиотеки и добри IDE како Eclipse


It's time for a new challenge :)