Jump to content

Recommended Posts

Posted

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:

wliQ4.png?1

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 = None
Letters = None
i = None

msg = ''
Letters = ''.join([str(temp_value) for temp_value in ['R', 'S', 'T']])
for i in Letters:
msg = msg + i
print(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).

Posted

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.

Posted
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 += i
print(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 for

Te 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>

Posted (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 Hosting

EDIT Mda, acum am vazut ca aveam conditie si wall on left - revin

Imi 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

post-6862-14519442517225_thumb.png

post-6862-14519442517433_thumb.png

Edited by loki
Posted (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 by B7ackAnge7z
Posted (edited)

daca pui if in loc de while merge, dar mai da "cu capul" de pereti

LATER EDIT =)))))))))))))))))))))

ea: l-am facut iterativ se pune?

begood: daca functioneaza

begood: pe mai multe mazeuri random

begood: ia

begood: fa un screenshot

ea: eh.. cacat

ea: nu

begood: kay

begood: fa screen ca ti-a ajuns omuletu

begood: atunci

ea has canceled the file transfer.

ea: stai

You have received 1 photo from ea.

Untitled.jpg

Open (Alt+Shift+O)

34 Share

http://imgur.com/Qf1Ej

ea: told ya.. it's idiotic

begood: ahahahahahahahahahah

Edited by begood
Posted (edited)

Nici unul din exemplele de mai jos nu d? cu capul de pere?i:

Logic? de programator = on

PqngB.png

Logic? de programator = off

GQIt8.png

Acum r?mâne de f?cut o schem? universal? care s? nu dea cu capul de pere?i. Revin cu un update.

Edited by B7ackAnge7z
Posted (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 by loki
Posted

@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:

yvf7C.png

Pentru a ob?ine acest rezultat, am folosit regula mâinii drepte (în principiu se poate ?i regula mâinii stângi).

Posted

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.

Posted
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 :)

Posted (edited)

si acum optimizarea optimizarii: prin else-if uri elimin verificarile inutile (in exemplul meu de mai sus aparea o astfel de situatie)

captureczn.png

Aici e cazul cel mai nefavorabil cand parcurge intregul labirint. 11 blocks.

Edited by loki
Posted (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 grade

Apoi 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 nimerit

Poti incerca sa muti conditia sa arate ca in exemplul anterior? poate imi scapa ceva la optimizarea optimizarii dar nu gasesc situatii de blocaj

am 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 by loki
Posted

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 >:D<

Posted

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.

Posted
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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...