Se întâmplă că în [1], taman în final, am greșit… Greșim adesea, dar de data aceasta n-am observat la timp și revenim acum, chiar dacă în cazul de față greșala este mai degrabă stupidă, decât interesantă. Cică, după [1]:
> orar_prof(9) # Orarul profesorului "Mt9" Lu Ma Mi Jo Vi 1 11A 11A 11A 11A 10C 2 10C 10C 10C - - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - -
Dacă ne uităm în setul Mt al tuturor lecțiilor de "Mate", constatăm că în orarul original alocările pe zile și ore pentru clasele 11A și 10C diferă de cele arătate mai sus:
> Mt %>% filter(cls %in% names(P[P==9])) 1 10C Lu 5 2 10C Ma 3 3 10C Mi 6 4 10C Vi 2 5 11A Lu 2 6 11A Ma 1 7 11A Mi 1 8 11A Jo 4
Zilele s-au păstrat, dar prin funcția orar_prof() orele au fost mutate cumva spre începutul zilelor (iar orarele afișate astfel pentru cei 9 profesori "Mt" au ajuns să fie lipsite complet de ferestre)…
Ziceam în [1]: "Putem adapta orarul_clasei() pentru a formula orarul unui profesor de Mt", iar "adaptarea" făcută păstra secvența:
row <- S %>% arrange(ora) %>% pull(cls) c(row, rep("-", 7-length(row)))
unde S era subsetul lecțiilor de "Mate" dintr-o aceeași zi.
Însă între "actualul" S și cel din orarul_clasei() este o deosebire majoră: pentru clase, câmpul S$ora conține secvența 1:n, unde n este numărul de ore ale clasei din ziua respectivă (iar secvența reprodusă mai sus este corectă); însă pentru "Mt", S$ora indică doar orele profesorului din ziua respectivă (care nu încep neapărat de la prima oră și pot avea ferestre) — de exemplu pentru cazul "Mt9" redat mai sus, pentru ziua Lu în S$ora avem doar valorile 5 și 2, încât prin secvența redată mai sus în "row" se obține (greșit) "11A 10C - - - - -" (înloc de "- 11A - - 10C - -"), fiindcă pull(cls) extrage valorile S$cls fără a ține seama de poziția după câmpul "ora" a acestora.
Rescriem orar_prof(), corijând acum secvența amintită mai sus:
orar_prof <- function(Color) Mt %>% filter(cls %in% names(P[P == Color])) %>% split(.$zl) %>% lapply(., function(S) { row <- rep('-', 7) # șablonul orelor zilei row[S$ora] <- S$cls # înscrie clasa conform orei row }) %>% as.data.frame()
Redăm orarele corectate față de [1]:
or_mt <- lapply(1:9, function(j) orar_prof(j)) %>% setNames(names(pr_mt)) > or_mt[["Mt1"]] Lu Ma Mi Jo Vi 1 12B 12B 5A 12B 12B 2 5A - 12B 5D 12A 3 5D 5A 5D - - 4 12A 5D 12A - 5A 5 - 12A 12A - - 6 - - - - - 7 - - - - - > or_mt[["Mt9"]] Lu Ma Mi Jo Vi 1 - 11A 11A - - 2 11A - - - 10C 3 - 10C - - - 4 - - - 11A - 5 10C - - - - 6 - - 10C - - 7 - - - - - > or_mt[["Mt4"]] Lu Ma Mi Jo Vi 1 8C 12E 12E 6D 8C 2 12E 8C 9A - 6D 3 9A 9A 8C - 6E 4 6E - - 6E 8C 5 - - 6D 9A 12E 6 6D - 6E - - 7 - - - - -
În [1], fiindcă obțineam (greșit) orare compacte (fără ferestre), trăgeam concluzia că graful G (care ne condusese printr-un algoritm de colorare a vârfurilor, la cei 9 profesori "Mt") are numărul cromatic 9; acum vedem că de fapt, orarele respective nu sunt compacte, încât devine clar că pot fi mai puțin de 9 profesori de "Mate", probabil 8 sau chiar numai 7 (în "Orarul general clase" pe care l-am considerat în [1] sunt maximum 7 clase care fac simultan, într-o aceeași zi și oră, "Mate" — deci numărul cromatic al grafului G este cel puțin 7).
vezi Cărţile mele (de programare)