2013 m. vasario 16 d., šeštadienis

Anarchy golfas - 2

Anarchy golf puslapyje daugiausia žaidžiau su Perl kalba, bet kelis kartus pamėginau ir su FPC, bei su Ruby.
Svetainė tikrai anarchiška, nes net pats pasirodo, galiu joje kurti užduotis. Prieš mėnesį tą ir pradėjau išmėginti.
Sukūriau dvi [1, 2] užduotėles, kurios sulaukė normalaus populiarumo, ir vieną - kuri itin nepopuliari, reiškia - nepatikusi [3].

***
Dar įkelsiu keletą neitin prasmingų mano pasispardymų:

1. Užduotis "alternating case lines": kas antra eilutė verčiama aperkeisu pradedant pirmąja, kitos - lavuerkeisu. Taip kito kodas:



print++$i%2?uc:lc for<>

O štai taip atrodo geriausias sprendimas (žavu!):
print uc,lc<>while<>    # autorius: tanon



2. Užduotis "repeated number". Taip kito kodas:


print((chop||next)x$_,"\n")for 21..89

Ta pati užduotis kaip sekėsi su Ruby:

(21..89).each{|i|i%10!=0&&puts((i%10).to_s*(i/10))}

2013 m. vasario 2 d., šeštadienis

Pusmečio (2012 rudens semestro) apžvalga

Šio semestro medžiaga (dalykai) universitete labai patiko. Kai kurių dalykų net teko anksčiau ar vėliau pasimokyti. Kai kurių ne.

Buvo galimybė mokytis kompiuterinių tinklų. Šį praskipinau.

Ganėtinai stipriai patiko, bei manau, kad buvo man naudingas, dalykas apie naudojimąsi Unix terpe, komandine eilute, rašyti kažkokius skriptukus, naudotis "mikrokalbomis" (awk, sed berods). Dar tame dalyke teko pasimokyti dirbti su Subversija (svn). Bei kurti Makefailus, bei juos naudoti kuriamos programos testavimui, iš kart naudojant keletą testinių failų.
Anksčiau (ir dabar) programas rašydavau taip, kad turėdavau daug jos kopijų, ir versijų. Taip pat retai rašydavau įrašus (log'us) naujoms versijoms, dėl to po kiek laiko atsivertęs - pasimesdavau - kuo viena nuo kitos skiriasi. Beigi būdavo įvairių versijų atšakų. Susipažinimas su SVN buvo naudingas - teko juo naudotis, tačiau "revert'inti" programas teko retai, ir atsikėlinėt senesnes versijas - irgi teko retai.
Subversija veikia taip: yra kažkur nutolęs serveris, kuriame yra sukurta repozitorija. Internetu bendraujama su ta repozitorija, ir į ją "įdedama" saugojimui rašoma programa. Kiti, turintys priėjimą, gali tą programą atsisiųsti ir naudoti, ar net patys ją keisti, plėsti, išsaugoti. Taip sukuriama galimybė nuotoliniam bendradarbiavimui. Tokio išbandyti neteko. Ciklas toks: iš repozitorijos atsisiunčiama programa (jos kopija), ji modifikuojama, ir vėliau commit'inama (nusiunčiama atgal). Kitą kartą vėl ji bus atsisiunčiama (checkout'inama), modifikuojama, commit'inama. Ne tik programa, bet apskritai bet kurie failai ar folderiai. O jeigu norėsis atsisiųsti senesnę failo versiją, tai reikės tiesiog įvesti senesnės revizijos (commit'inimo) numerį (komanda: svn update -r N; N- numeris). Kiekvieną kart commit'inant, SVN'as prašo įvesti log'ą - parašyt, kas naujo prisidėjo naujoje revizijoje, ar kas buvo pakeist, kad po to būtų lengvaiu atsekti. 

Daugiau konkrečiai programavimo dalykų nebuvo, tačiau buvo susijusių dalykų.

Viename buvo mokomasi statistikos ir įvairių testų, bei tam buvo naudojamas MĖ Excelis, bei mokomasi ir naudojamasi R programavimo kalba. Duomenų generavimui, apdorojimui ir atvaizdavimui. Neteko išmokt. O pats R'as patiko. Ir nemokamas, ir gana draugiškas, ir daug modulių jam sukurta.

Kitame teko mokytis visokių kodavimų, ir bereikėjo parašyti kelias programas, kurios atlieka kodavimą ir dekodavimą. Rašiau jas "de novo", bet pačių kodavimo algoritmų gerai neišmaniau, tad naudojausi Wikipedija ir internetais, kad pagal algoritmų iliustruoto veikimo pavyzdžius, parašyčiau programas. Naudojau Perl kalbą. Pavyko parašyti su klaidom, ir neefektyviais algoritmais, bet patiko bent tiek, kiek pavyko.

Dar viename dalyke buvo visokių mokymųsi naudotis jau sukurtomis ir plačiai naudojamomis programomis... Be to reikėjo parašyti ir patiems įvairių užklausų. Tai šitą irgi beveik nepasimokiau.

*****

Be mokomųjų dalykų, sekmadieniais teko dalyvauti OpenCup varžybose (contest'uose), fakultete ar iš namų. Dalyvavau rečiau negu pavasarį. Buvau šį kart vienas komandoje. Tai, kadangi vienas ir nekoks programuotojas, tai isšpresdavau vos po ~1 uždavinį per etapą - nedaug. Kai kada ne visas 5 valandas dalyvaudavau, o kaip išeidavo.
Nespėdavau įsigilinti ar net perskaityti visų sąlygų. Imdavau lengvesniuosius uždavinius. Kelis teko spręsti Pascal'iu, tačiau jau šį semestrą ėmiau naudotis ir Perl'u. Ypač padėjo ten, kur reikėjo apdoroti eilutes.
[Papildau keliais uždavinių sprendimais (įkeliu į Ideone.com svetainę).
* Su išsamesniu kodo pakomentavimu,
* karalium nueit iš vieno langelio į kitą,
* chupakabros eina į vieną pusę, barmolėjai į kitą, ir valgo mažesnius berods (-1 yra tuščias laukas),
apskaičiuoti kiek kurių liks,
* ištrinti bug'ų "žymes" iš kodo (perl'o regexp'ų žavumas)]

Pusmečiui įpusėjus, šiek tiek susidomėjau (gana primityviai) golf'ingu, ir gruodžio-sausio mėn. ėmiau žaisti golf'ą. Rezultatai neįpatingi, bet retkarčiais tiesiog būna įdomu.
O iškart po sesijos - atostoginę savaitę kiek daugiau užsiimiau laiko praleidimu prie programų. Tai buvo golfingas (Perlu), Ruby kalbos pagrindų mokymasis, ir contest'inių programavimo užduočių sprendimas. Contestin'es užduotis pasprendžiau pačias lengviausias, užsiregistravęs į Codeforces ir Timus OJ.
Codeforces labai patiko - viskas puikiai paruošta turnyrui, kurio formatas gana žaismingas. Taip pat neturnyro metu galima žiūrėti dalyvių kodus - kaip jie sprendžia kokias užduotis, kur klysta.