Table of Contents

Tool zur Planung der Maturaarbeitspräsentationen

  • zip entpacken, Ordner mit VSCode öffnen, index.html mit Live-Server öffnen, Debug-Console im Browser öffnen.
  • Code in planer.js studieren.
  • Code in datahelper.js in der Funktion buggyCSVParser vervollständigen. (CSV ist ein «schlechtes» Format und es ist kompliziert, einen allgemeinen Parser zu schreiben).
  • Folgende Arrays mit Objekten sind zu erstellen (alle Referenzen bestehen aus dem Index im jeweiligen Array):
    • student: Enthält die Infos zu den Schülern (erst mal nur “name”, dann auch Klasse, und eine Referenz auf paper)
    • teacher: Enthält die Infos zu den Betreuern (erst mal nur “code” (Lehrerkürzel), später auch Name, zeitliche Präferenzen etc.)
    • paper: Enthält die Infos zu den Maturaarbeiten:
      • Array mit Referenzen auf student (Autoren)
      • teachers Array mit einem oder mehreren Einträgen, Referenzen auf teacher (Betreuer, sprachl. Betreuer)
    • timeslots: Enthält Infos zu den Zeitangaben (slot, erst mal als String, später wohl Datum/Uhrzeit (Start und Ende?)
    • rooms: Enthält Infos zu den Räumen (name, später auch ein Array mit Referenzen auf die planbaren timeslots
  • Ein Plan wird als Array von Arrays mit 2 Einträgen wie folgt dargestellt:
    • plan[p] = [t,r], wobei $p$ der Index vom paper, $t$ der Index vom timeslot und $r$ der Index vom room ist.
  • Erstellen Sie einen Plan mit folgender Methode:
    • Wählen Sie zufällig ein paper aus und planen Sie es unter Berücksichtigung der Bedingungen möglichst früh im ersten freien Zimmer.

Lösungsvorschläge

Lösungsvorschläge

export function buggyCSVParser(csv) {
    // Return an array of Stings for a csv line: 
    // Assumption: All Strings are quoted with "", Separated by commas.
    function parseLine(line) {
        return JSON.parse("["+line+"]");
    }
    let lines = csv.split("\n");
 
    // Extract header
    let header = parseLine(lines[0]);
 
    // Extract all lines and build objects like
    // {"Name": "Hans Wurst", "Titel": "Bla blah", ...}
    let table = [];
    for (let i=1; i<lines.length; i++) {
        let zeile = parseLine(lines[i]);
        let obj = {};
        for (let j=0; j<header.length; j++) {
            obj[header[j]]=zeile[j];
        }
        table.push(obj);
    }
 
    // Return table in this form
    return table;
}

Daten

Maturaarbeit

Zeitfenster

Räume

Weitere Daten

Plan (Resultat)

Jeder Maturaarbeit wird genau ein Zimmer und Zeitfenster zugewiesen, und zwar so, dass

Ausgegeben wird der Plan in verschiedenen Ansichten: