B7ackAnge7z Posted November 4, 2012 Report Posted November 4, 2012 V?zând c? nu este nici un post despre aplica?ia Blockly, am hot?rât s? repar aceast? gre?eal?. Deci, Blockly este o aplica?ie WEB ce reprezint? un editor grafic de programare. Pentru a crea o aplica?ie, utilizatorul nu prea va avea nevoie de tastatur?, ci mai mult de un mouse cu care s? mi?te ?i s? aranjeze „blocurile” cu instruc?iuni logice, condi?ionale sau repetitive.Foarte interesant? ?i util? este posibilitatea de a exporta blocurile în JavaScript, Dart sau Python. De exemplu, urm?toarea construc?ie:exportat? în JavaScript, v-a ar?ta a?a:var msg;var Letters;var i;msg = '';Letters = ['R','S','T'].join('');for (var i_index in Letters) { i = Letters[i_index]; msg = msg + i;}window.alert(msg);iar în Python, a?a:msg = NoneLetters = Nonei = Nonemsg = ''Letters = ''.join([str(temp_value) for temp_value in ['R', 'S', 'T']])for i in Letters: msg = msg + iprint(msg)Cei ce cunosc Python sau/?i JavaScript — v? rog s? nu analiza?i exemplele de mai sus.Dup? cum v? da?i bine seama, Blockly nu e tocmai reu?it pentru a sparge o parol? Yahoo sau pentru a g?si vulnerabilit??i în serverele NASA. Pe de alt? parte, de exemplu, Blockly e o aplica?ie perfect? pentru dezvolta logica de programator sau pentru a fi folosit? de c?tre profesori (?i nu numai) pentru a preda programarea.La final v? propun Blockly Maze — ie?i?i din labirint într-un mod cât mai eficient (rapid ?i folosind cât mai pu?ine instruc?iuni logice). R?spunsurile le posta?i în comentarii ad?ugând screenshot-ul rezolv?rii. Dac? ob?ine?i mai mult de 12 blocuri — pute?i seta screenshot-ul ca background pe desktop (?i desigur, f?r? a mai publica r?spunsul aici). Quote
Genius++ Posted November 4, 2012 Report Posted November 4, 2012 Destul de interesant topic-ul tau dar totusi mi se pare ca lipseste ceva Quote
cemama Posted November 4, 2012 Report Posted November 4, 2012 ^lipsesc comentarii de 2 bani , asteptam sa se trezeasca spiritele sa vezi ce se umple topicuon : bine lucrat Quote
B7ackAnge7z Posted November 4, 2012 Author Report Posted November 4, 2012 Eu cred c? lipsesc comentariile celor ce pot ie?i din labirint.?i ca s? nu spun? lumea c? mesajul meu nu are nici o „valoare” — v? recomand dou? jocuri (online ?i gratuite): LightBot ?i LightBot2. Quote
SilviuSDS Posted November 4, 2012 Report Posted November 4, 2012 Eu nu inteleg de ce m-as chinui sa horocaiesc prin nu stiu ce optiuni si dandanale in nu stiu ce aplicatie web in loc sa imi deschid notepad-ul si sa incep sa lucrez, sa scriu cateva randuri de cod si gata treaba.Si inca ceva, daca cunosc cele 2 limbaje de ce nu am voie sa ma uit pe snippet-uri? Da, observ ca in loc de foreach scrie for, nu este chiar ca in intefata grafica, variabila i e inutila, codul trebuie scris eficient pentru a micsora timpul de executie. Eu ramand la al meu Notepad++ si tastatura. Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 Eu nu inteleg de ce m-as chinui sa horocaiesc prin nu stiu ce optiuni si dandanale in nu stiu ce aplicatie web in loc sa imi deschid notepad-ul si sa incep sa lucrez, sa scriu cateva randuri de cod si gata treaba.Îmi pare nespus de r?u dac? citind postul meu ai în?eles c? Blockly e folosit, ?i trebuie folosit pentru a dezvolta aplica?ii propriu-zise. Defapt, penultimul alineat trebuia s? explice acest lucru.Si inca ceva, daca cunosc cele 2 limbaje de ce nu am voie sa ma uit pe snippet-uri?Dat fiind faptul c? Blockly a fost dezvoltat pentru „a preda programarea”, codul generat arat? foarte r?u. De exemplu, pentru JavaScript trebuia s? fie a?a (cel pu?in a?a cred eu):var Letters = ['R', 'S', 'T'];var msg = '';for (var i in Letters) { msg += Letters[i];}alert(msg);iar pentru Python a?a:Letters = ['R', 'S', 'T']msg = ''for i in Letters: msg += iprint(msg)Desigur, JavaScript guru v-a scrie a?a: alert(Letters.join('')), iar Python guru a?a: print(''.join(Letters))Da, observ ca in loc de foreach scrie forTe referi la foreach pentru Python sau JavaScript? <sarcasm>Zvonurile precum c? Blockly a fost folosit pentru a dezvolta Facebook-ul s-au dovedit a fi false. Totu?i, îndoielile persist?.</sarcasm> Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 (edited) Nu stiu daca e cea mai eficienta rezolvare ca rapiditate, cred ca e eficienta ca nr mic de blocuri. E genul in care parcurg labirinturile prin jocuri in ideea de a trece prin toate locurile. In alt gen de labirinturi pot fi si situatii de bucla infinita dar nu aici.ImageShack? - Online Photo and Video HostingEDIT Mda, acum am vazut ca aveam conditie si wall on left - revinImi place si e educativ, nu ca sa inveti programare avansata si optimizari gen += etc dar pentru a introduce pe cineva in programare, pentru a-i face creierul sa gandeasca logic un algoritm in loc de a invata instructiuni babeste. Si asa cunosc persoane care s-au plans ca nu pricepeau schemele logice, de fapt cred ca uitau unde sa deseneze un romb, etc.EDIT: solutia eficienta:ImageShack? - Online Photo and Video Hosting Edited November 5, 2012 by loki Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 (edited) @loki,M? bucur c? ai postat rezolvarea. Abia acum am v?zut c? au ad?ugat ?i condi?ia „repeat until finished” (ini?ial aceasta nu era).Cât despre solu?ia ta, pot s? spun c? mai este loc pentru optimizare (while poate fi eliminat)upd: Ha! Acum a mai ap?rut ?i butonul „Randomize Maze”. Cine face ?i o schem? universal?? Edited November 5, 2012 by B7ackAnge7z Quote
begood Posted November 5, 2012 Report Posted November 5, 2012 (edited) daca pui if in loc de while merge, dar mai da "cu capul" de peretiLATER EDIT )))))))))))))))))))ea: l-am facut iterativ se pune?begood: daca functioneaza begood: pe mai multe mazeuri randombegood: iabegood: fa un screenshotea: eh.. cacatea: nubegood: kaybegood: fa screen ca ti-a ajuns omuletubegood: atunciea has canceled the file transfer.ea: staiYou have received 1 photo from ea.Untitled.jpgOpen (Alt+Shift+O) 34 Share http://imgur.com/Qf1Ejea: told ya.. it's idioticbegood: ahahahahahahahahahah Edited November 5, 2012 by begood Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 (edited) Nici unul din exemplele de mai jos nu d? cu capul de pere?i:Logic? de programator = onLogic? de programator = offAcum r?mâne de f?cut o schem? universal? care s? nu dea cu capul de pere?i. Revin cu un update. Edited November 5, 2012 by B7ackAnge7z Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 (edited) pai daca omuletul incepe din dreapta sus se blocheaza in partea de sus - cazul "logica de programator" Ideea e ca lipseste intoarcerea la 180 de grade.Testeaza pe randomize.Orice utilizare move forward fara conditie poate crea posibilitatea de a da un cap de un perete.La mine in ultimul exemplu nu mai da cu capul ci se roteste. In schimb al tau a mers simpatic neparcurgand tot labirintul (intamplare?...)Exemplul programator off: tu ai aproximat traseul. In alte cazuri random da cu capul de pereti.La optimizare te refereai cumva sa parcurga distanta minima? In acest caz si pe un singur labirint da, e o alta logica si chiar exemplul programator off e gandit bine Edited November 5, 2012 by loki Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 @loki,problema e c? ambele exemple postate de mine au fost f?cute doar pentru prima variant? (nu pentru random), atunci înc? nu v?zusem c? este ?i randomize.Pentru randomize îns?, propun exemplul de mai jos, care trece orice labirint f?r? a da cu capul de pere?i:Pentru a ob?ine acest rezultat, am folosit regula mâinii drepte (în principiu se poate ?i regula mâinii stângi). Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 tu eviti repeat-ul si pui if. Totusi repeat se executa de maxim 2 ori (intoarcere la 180 grade). Ziceai sa aiba maxim 12 instructiuni? Hai ca testez si exemplul tau. Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 tu eviti repeat-ul si pui if. Totusi repeat se executa de maxim 2 ori (intoarcere la 180 grade).P?i ca regula mâinii drepte s? func?ioneze corect, trebuie s? verific la fiecare pas dac? se îndeplinesc cele 3 condi?ii. Poate îmi scap? mie ceva?!Ziceai sa aiba maxim 12 instructiuni????... aceasta condi?ie era valabil? doar pentru prima variat? a labirintului Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 uite optimizarea mea cu regula celor 2 maini stangi ale mele (nu mai stiu regula mainii drepte) http://imageshack.us/scaled/landing/692/capturetyrb.png (ma omoara atasamentele astea)Ca sa nu mai folosesc repeat pentru intoarcere atat timp cat verificarea unei conditii de 2 ori e destul. Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 (edited) si acum optimizarea optimizarii: prin else-if uri elimin verificarile inutile (in exemplul meu de mai sus aparea o astfel de situatie)Aici e cazul cel mai nefavorabil cand parcurge intregul labirint. 11 blocks. Edited November 5, 2012 by loki Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 uite optimizarea mea cu regula celor 2 maini stangi ale mele (nu mai stiu regula mainii drepte) Nu e bine. În primul rând la fiecare pas se întoarce în stânga ?i abia apoi merge înainte. Iar în al doilea rând, la aceast? variant? a labirintului intr? în ciclu infinit. Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 (edited) e tot un fel de regula mainii stangi, acu am vazut. Pai cauta intai iesiri in stanga ca sa tina directia. Cele 2 conditii sunt pentru a se intoarce la 180 de gradeApoi nu stiu de ce dar varianta ta nu imi intra in ciclu infinit. Conteaza directia in care se uita omuletul? ca asta e mai greu de nimeritPoti incerca sa muti conditia sa arate ca in exemplul anterior? poate imi scapa ceva la optimizarea optimizarii dar nu gasesc situatii de blocajam inteles: al meu se intreaba prea des daca sa o ia la stanga. Exemplul tau respecta metoda, o micuta optimizare: pune al doilea IF ca elseIF la primul, ca sa eviti sa pui o conditie de 2 ori. Edited November 5, 2012 by loki Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 Se pare c? ”optimizarea optimizarii” este cea mai bun? variant?. La mine (când am testat varianta ta) se bloca deoarece în loc de ”if not wall to left” eu am pus ”if not wall ahead”. Deci, varianta ta e ok >< Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 culmea ca am citit rand cu rand da nu am observat nu stiu daca e iluzie optica dar a ta parca se misca mai repede. Pacat ca nu au introdus si un calcul de executie, etc, ar fi fost frumos. Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 culmea ca am citit rand cu rand da nu am observat nu stiu daca e iluzie optica dar a ta parca se misca mai repede. Pacat ca nu au introdus si un calcul de executie, etc, ar fi fost frumos.O mare importan?? o are ?i varianta labirintului. De exemplu, în varianta implicit?, al t?u câ?tig? cu ~3 secunde.Pentru a afla în cât timp a fost parcurs labirintul, execut? urm?torul con în consola browserului înainte de a ap?sa pe ”Run program”:Maze.runButtonClick = function (fn) { return function () { console.log('start'); return fn.call(this); };} (Maze.runButtonClick);Maze.scheduleFinish = function (fn) { return function () { console.log('finish'); return fn.call(this); };} (Maze.scheduleFinish);Ceea ce cu adev?rat lipse?te, este importarea ?i exportarea exemplului, pentru ca s? nu aranjezi (tu sau cel care dore?te s? execute exemplul t?u) de fiecare dat? blocurile. Quote
loki Posted November 5, 2012 Report Posted November 5, 2012 mai e o faza: algoritmul meu ia stanga, al tau dreapta. Poti face un test modificand directia unuia dintre algoritmi. Cat de cat sa aiba traseul apropiat. Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 Am modificat algoritmul meu ca s? mearg? la stânga ?i face exact acela?i traseu ca ?i al t?u — totu?i, al t?u ajunge primul cu o diferen?? de ~2 secunde. Aceasta e o dovad? clar?, c? fiecare if() conteaz? Quote
B7ackAnge7z Posted November 5, 2012 Author Report Posted November 5, 2012 @sharkyz,Cred c? cu pu?in noroc, ceva timp ?i cu capu' spart, omule?ul v-a ajunge pe la jum?tatea labirintului. Quote