Structura de memorie adecvată generării unui orar fără ferestre
Avem de pus la dispoziţia unei subrutine în limbaj de asamblare un fişier binar conţinând într-un format unitar cât se poate de compact, datele necesare constituirii orarului pe o zi - rangul profesorului în fişierul text iniţial şi clasele la care trebuie să-i aşezăm orele în acea zi - împreună cu o anumită gamă de octeţi care trebuie astfel gândită încât să ne servească pentru a modela cât mai eficient (folosind direct instrucţiunile microprocesorului) mecanismul bactracking prin care subrutina respectivă să producă un orar fără ferestre.
Actualizarea unui program de elaborare a orarului şcolar
M-am ocupat mult timp (dar acum vreo 20 de ani) de orarul şcolii, folosind un program propriu. Acest program avea două părţi: mai întâi se obţinea o "schemă" de repartizare a orelor pe zilele săptămânii; apoi - după definitivarea manuală a acestei scheme - se obţineau orarele zilnice.
În ultima versiune (prin anul 2002), obţineam schema de repartizare folosind Perl (beneficiind astfel de "expresii regulate" şi de "tablouri asociative"), sub Linux; dar pentru orarele zilnice foloseam Borland C++3.1 şi o subrutină scrisă în Turbo Assembler - sub DOS/Windows, cu I-486. Astăzi îmi dau seama că această manieră neortodoxă de lucru este "culmea" principiului separării lucrurilor.
Determinarea numărului de ferestre dintr-un orar
/…/ construieşte o expresie regulată (instanţă de obiect javaScript RegExp()), la fel cum "…" construieşte un şir de caractere (instanţă de obiect javaScript String()). Şablonul /\w[-~]\w/ se potriveşte de exemplu cu "C-1" (o potrivire = o fereastră), iar /\w[-~]{2}\w/ s-ar potrivi cu "C-~1" (când o potrivire = două ferestre); modificatorul /…/g ("global") asigură identificarea tuturor potrivirilor (nu numai a primeia), în cadrul şirului respectiv.
O chestiune de organizare a codului
Avem de organizat şi poate de reformulat codul Python respectiv, pentru a simplifica lucrurile (de exemplu, să fie de lansat un singur script în loc de cinci). Poate fi tentantă complicarea lucrurilor, concepând întâi nişte modele de bază "profesor", "disciplină", "clasă", etc.; dar nu prea este cazul, fiindcă noi preluăm doar formularea finală a orarului (nu avem de "introdus" şi de gândit datele pe baza cărora s-a generat orarul).
Cel mai simplu este să concatenăm într-un singur fişier scripturile respective; iar astfel, fişierele JSON (folosite iniţial pentru a transfera structuri de date de la un script la altul) devin inutile.
Reducerea numărului de ferestre pe orarul şcolar al unei zile
Avem obiceiul de a revizui - şi povesti - aplicaţiile pe care le-am realizat.
Foarte bun obicei!… te ajută să o iei de la capăt.
Revizuim şi elaborăm o aplicaţie (sau poate… numai un joc) Ajustarea orarului care poate servi pentru ajustarea interactivă a orarului şcolar al unei zile, în scopul firesc de a reduce cât mai mult numărul de ferestre.
vezi Cărţile mele (de programare)