Programmētāja prāta asināšanai
- 2011. gada 17. aprīlī, plkst. 23:50
- 27 komentāri

Vai tu esi piedalījies informātikas olimpiādēs? Informātikas olimpiādes man ir bijušas sava veida nākamais solis pēc matemātikas olimpiādēm. Problēmas vairs nebija tikai matemātiskas, bet gan arī algoritmiskas. Es pats diezgan veiksmīgi pirmajā matenes olimpiādē norāvu pirmo vietu, otrajā otro, trešajā jau trešo, bet pēc tam tālāk par atzinības rakstu neesmu ticis. Līdzīgi gāja arī ar informātikas olimpiādēm. Ja neņem vērā to, ka tajās man ir tikai viena pati bronzas medaļiņa. Neskatoties uz neveiksmēm, visi tie NEKOREKTI IEVADDATI
man uzdzen siltas atmiņas.
Augot lielākam, pār mani nāca nevāja apgaismība – tos uzdevumus, kurus šķīlu bērnībā, tagad vairs nespēju. Tāpēc pirms dažiem gadiem nolēmu, ka tam ir jāpieliek punkts. Un kā punktu var pielikt? Risinot problēmas. Tad, nu, padalīšos ar kaudzīti resursu, kuros vēl aizvien laiku pa laikam iegriežos, lai paprovētu pierādīt sev, ka nav vēl viss pulveris tutū.
Šādi prāta un spēju asināšanas uzdevumi nereti noder jaunu valodu apguvē. Teiksim, ja esi nolēmis beidzot apgūt paitonu, tad ir vērts parisināt dažādas interesantas problēmas izvēlētajā valodā.
- Project Euler
- Uzdevumi ir biežāk matemātiskas dabas, kas atgādina olimpiādes. Aizraujoši paliek tad, kad saproti, ka pilnā pārlase vairs nedarbojas.
- Facebook: Engineering Puzzles
- Daži aizraujoši uzdevumi, kurus risināt varētu būt interesanti. Ja esi pārliecināts par savām spējām un vēlies strādāt feisbukā, vari savus variantus nosūtīt viņiem. Risinājumiem ieteiktu pieiet radoši :)
- Google Code Jam
- Protams, kā gan bez šī. Ikgadējais gūgles konkurss ar nopietnām balvām, nopietniem uzdevumiem un vēl nopietnāku konkurenci. Ir arī uzdevumu archivs.
- TopCoder
- Pirms gūgles koda vasaras šīs bija vienas no nopietnākajām tiešsaistes programmēšanas sacīkstēm. Tagad tādas rīko kurš katrs, bet topkoderis ir un paliek vērtība.
- Programming Praxis
- Detalizēti paskaidroti uzdevumi. Uzdevumi lielākoties ir triviāli.
- phpGolf
- Kad palūdzu atgādināt šī projekta nosaukumu vienam puisim skaipā, viņš piebilda bolditalikanderlainā vārdu
vājprātīgais
. Vairākkārtīgi. Faktiski tas attiecas uz tiem gadījumiem, kad vēlies būt topā. Tur tu netiksi. Nekad. Ja tiksi, uzsaukšu alu. Ne vienu vien. Tur tiek programmēts ar PHP kļūdu un nedokumentēto iespēju palīdzību. - Code Golf, anarchy golf
- Līdzīgi projekti. Pirmais ir nopietnāks, otrais ir savādāks.
- Sphere Online Judge (SPOJ)
- Simtiem problēmu, kuras, visticamākais, ja ne visas, tad liela daļa būs atrodama pārējās lapās.
Ja nu es kādu esmu piemirsis, bet tu atcerējies, papildini.
Labi. Padomāju un nolēmu, ka atzīšos. Ierakstu lika uzrakstīt viens nesens atgadījums. Pirms kāda laika vienam pazīstamam kantorītim palīdzēju intervēt PHP programmētājus. Aldziņa maziņa, programmētāji knapiņi. Taču, viena lieta mani samulsināja. Es ceru, ka tagad nevienu neaizvainošu.
Kā praktiskais uz vietas risināmais uzdevums tika dots FizzBuzz
. Programmai nepieciešams izdrukāt skaitļus no 1 līdz 100. Ja skaitlis dalās ar trīs, tā vietā jāraksta Fizz
. Ja tas dalās ar pieci, tad Buzz
. Ja dalās gan ar trīs, gan ar pieci, tad rakstam nevis skaitli, bet gan FizzBuzz
. Kā jau minēju – uzdevums jāatrisina uz vietas. Kandidātam priekšā ir dators ar atvērtu teksta redaktoru un PHP interpretatoru. Internets nav pieejams. Laiks – 15 minūtes vai mazāk. Neviens uz pirkstiem neskatās.
3 (trīs!!!) no pieciem to neizdarīja arī 20 minūtēs. Labi, trešais to izdarīja, bet kļūdaini. Attiecīgi – divi no viņiem uzrakstīja ātri, un bez kļūdām. Viens no viņiem to veica ļoti labi un smuki (ja šos vārdus var attiecināt uz tik triviālu uzdevumu). Taču trīs. TRĪS!
Tad, nu, lūdzu. Atrotam piedurknes un risinām, domājam, mēģinām. Savādāk no jums sanāks vien tie paši vecie labie script-kiddies. Ja neizdodas atrisināt, pamēģinam pasēdēt pāris stundas gūglē. Pameklējam piegājienus. Algoritmus. Atceramies skolas matemātikas un ģeometrijas vielu. Tu atceries, kas ir LKD? Kā to atrod? Neatceries? Ej, un uzmeklē.
Šie ir tie 27 komentāri (pievienot savu)
hmz, cik vēl vienkāršāk un smukāk var uzrakstīt?
http://paste.php.lv/eae4a979370e2061f660ac37550190...
piu, daži komentāri.
a) Tu neesi uzmanīgi izlasījis uzdevuma nosacījumus. “Aizvietot ar”, nevis pierakstīt klāt.
b) Piemēram, šādi: http://paste.php.lv/f240d041c6216b546cabf1d005def4...
Mēs darbā laiku palaikam padarbojamies ar http://www.hacker.org/ – Challenges. Daži citi tur arī labi, piemēram, Mortal Coil.
tie phpGolf kadri tiešām ir slimi!
<?=$r;
ar slimi (par phpGold) es domaaju – uzdevums atrast iisaako celju no A liidz Z kartee kuraa ir skjeerslji kas jaapiet .. manas domas ir uzreiz paaris lapas gars kods … vinju pirmaas domas ir 200 simbolu gars kods … kas beigu beigaas tiek saiisinaats liidz 140 simboliem, principaa divaam rindinaam koda
Fizbazs phpgolf.org stilā būs kas šāds, http://paste.php.lv/b3a2add72885a3d6e5b7e4edaef50e... — bet pirmās vietas vienalga būtu kādus 10-20 baitus īsākas.
http://www.lio.lv/olimps/ !!!!!!!!!
Radījums mūsu dzimtajā valodā tak!!!
Par informātikas olimpiādēm labas atmiņas. 1998. gadā vēl pirmkodus nepārbaudīja. Tad nu nepaspējis uzrakstīt pēdējo programmu, kurai jārēķina un jāatbild ar JĀ vai NĒ, “aiz ekrāna malas” paslēpu random. Rezultātā paveicās un dabūju pirmo vietu rajonā…
spicausi – uzreiz biju iedomājies ko līdzīgu tevis dotajam kodam un apkritu gandrīz kad ieraudzīju piu kodu :)
Izlasīju tavu rakstu, iekšēji nedaudz sabijos, fiksi uzrakstīju pirmo ideju kas ir galvā un atviegloti nopūtos :) Palasīju komentārus un pasmaidīju – izrādās mana rezerves plāna doma ar bija pareiza. Tātad neesmu vēl norakstāms :)
P.S. fizzbuzz phpgolf.org stilā iespārda. Atceros, ka Kirils (kirils.com) savulaik ar k-ko līdzīgu aizrāvās – visu uzrakstīt maksimāli īsi.
uzzini, kas tas par lietotāju “spicausis” tajā phpgolf un viņam vari uzsaukt aliņu :D
Ivar, ar spicausi ir gana daudz alus (un ne tikai) izdzerts :)
The Python Challenge: http://www.pythonchallenge.com/
Uzdevumaa nav teikts, ka string “FizzBuzz” ir vienkaarshi kaut kaads string, vai tas ir divu ieprieksh mineeto stringu salikums. Uzdevumaa runa ir par 3 stringiem (neatkariigiem, jo nav noraadiits savaadaak), taadejaadi, nav atljauts sakrustot pirmos divus mainiigos (kaa laacz piedaavaatajaa algoritmaa), lai ieguutu tresho, tikai taapeec, ka taa vizuaali izskatas pareizi.
Neesmu īsts programmētājs, bet šādu uzdevumu varētu 2 minūtēs risināt (garajā variantā). Kas tad bija tie 3 džeki?
Par matemātikas olimpiādēm? Nebiju tas, kurš braukāja jaunākajās klasēs uz olimpiādēm. Piedalījos tikai 2 reizes (11. un 12. klase). 12. klasē norāvu rajonā 2. vietu. Neviens neticēja! :D
ACM ICPC ir studentu analogs skolimpiādēm. http://acm.pku.edu.cn un milzums citu treniņlapu
http://ipsc.ksp.sk ikgadējs tāds ar patīkami “ārpus kastes” uzdevumiem
http://codeforces.com, http://codechef.com attiecīgi krievu un indiešu Web 2.0 kloni TopCoder
http://challenge24.org kaujies ar miegu
http://icfpcontest.org uz funkcionālo programmēšanu orientēts, ir bijis aizraujošs, ir nebijis
Vēl katra Indijas universitāte rīko festu ar programmēšanas sacensībām, citu par citu haotiskāku, bet ar balvām http://www.google.lv/search?q=iit+programming+cont...
Ā, vēl pie skolēnu/studentu darāmā http://ace.delos.com/usacogate (mans pirmais, ar labiem tutoriāļiem), http://www.hsin.hr/coci/ (nezinu, bet inteliģence lieto), http://opencup.ru/ (logs uz Krievijas ACM ICPC treniņsacensību kultūru, pieteikties http://www.lu.lv/dn/darbinieki/arnicansguntis.html)
http://www.rubyquiz.com/ ;)
Lietotājs piu saņemtu + pie vēlmes nākt darbā par jaunāko programmētāju.
Lietotāju spicausis es, droši vien, darbā paņemtu kā normālu vai vecāko programmētāju, atkarībā no apstākļiem, bet ir iespēja, ka pāŗbaudes laiku viņš neizturētu – komandas darba apstākļos koda optimizēšana stipri traucē nodot darba vienības uzturēšanā vājākiem izstrādātājiem, viņi smadzenes izmežģīs mēģinot kautko pamainīt. Savukārt, labu koderi turēt uz uzturēšanu parasti nerentējas. Tipiska “frīlanceru” iesaistīšanas problēma ;)
<?php for ($i=1;$i<=100;$i++) {if ($i%15==0) echo 'FizzBuzz'; else if ($i%3==0) echo 'Fizz'; else if ($i==5) echo 'Buzz'; else echo $i; echo '’.PHP_EOL;}
Pirmais, kas iešāvās prātā un rakstīšanas ātrumā.
Ups, typo, $i%5==0, nevis $i==0.
Kas attiecas uz vājajām zināšanām. Ne jau cilvēki ir vainojami pie tā, ka viņi nezin. Vide.. vide ir tāda, ka ļoti, ļoti maz cilvēku iespringst uz tādām lietām un .. vai viņiem tas ir nepieciešams?
Mazliet atraktīvāks variants.
<?php for ($i=1;$i
Mazliet atraktīvāks variants.
http://paste.php.lv/d04c729584d9f6976cf859f81a24f4...
Atvainojos par piesārņošanu.
Ir kāds, kam izdevās fizzbuzz dabūt zem 59 baitiem?
jaaatziist, ka spicausha #6 kods iraid labaak saprotams par Laacza #2 kodu, jo nenodarbojs ar visaad mainiigo izvadi, kuriem kodaa pirms tam jaameklee, kaads iist veertiibs tiek pieskirts, un vadoties peec kaa.
nesaku, ka #6 idej iraid slikt. taa vnk neir tik uzskataam, un nodarbojs ar liekaam darbiibaam (tuksu rindu saturosa mainiigaa izvadi).
err, #2 idej es nolik.