mirror of
https://github.com/nelsbrock/NateMan.git
synced 2026-08-14 21:36:49 +02:00
Initialisierung: Übertragung aus altem Repository
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
# NateMan – Nachschreibtermin-Manager
|
||||
# assigner.py
|
||||
# Copyright © 2020 Johannes Bingel
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Zuordenen Methode
|
||||
from typing import List
|
||||
|
||||
|
||||
def iscoopLk(kurs: List):
|
||||
for k in kurs:
|
||||
if k.schueler.stammschule is not None:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def zuordnen(k_schueler):
|
||||
# initziert Variablen
|
||||
termin_1_kurse: [int, int] = []
|
||||
termin_2_kurse: [int, int] = []
|
||||
|
||||
probleme_kurse = []
|
||||
|
||||
termin_1_kurse_s = []
|
||||
termin_2_kurse_s = []
|
||||
probleme_kurse_s = []
|
||||
|
||||
if len(k_schueler) != 0:
|
||||
s_list = [[k_schueler.pop(0)]]
|
||||
|
||||
# Ordnet die Schüler den ihren Kursen zu
|
||||
i = 0
|
||||
|
||||
for s in k_schueler:
|
||||
while i < len(s_list):
|
||||
if s.klausur.id == s_list[i][0].klausur.id:
|
||||
s_list[i].append(s)
|
||||
break
|
||||
i += 1
|
||||
else:
|
||||
s_list.append([s])
|
||||
i = 0
|
||||
del i
|
||||
|
||||
# Findet und speichert die Konflikte in ein Dictionary
|
||||
h_list = []
|
||||
|
||||
dic = {}
|
||||
|
||||
i = 0
|
||||
i2 = 0
|
||||
i3 = 0
|
||||
i4 = 0
|
||||
|
||||
while i < len(s_list):
|
||||
while i2 < len(s_list[i]):
|
||||
while i3 < len(s_list):
|
||||
while i4 < len(s_list[i3]):
|
||||
if s_list[i][i2].schueler == s_list[i3][i4].schueler and i != i3 and str(i3) not in h_list:
|
||||
h_list.append(str(i3))
|
||||
i4 += 1
|
||||
i3 += 1
|
||||
i4 = 0
|
||||
i2 += 1
|
||||
i3 = 0
|
||||
if h_list:
|
||||
dic[str(i)] = h_list
|
||||
h_list = []
|
||||
i += 1
|
||||
i2 = 0
|
||||
|
||||
del i
|
||||
del i2
|
||||
del i3
|
||||
del i4
|
||||
|
||||
if dic != {}:
|
||||
|
||||
# Fügt die LKs Termin 1 zu
|
||||
i = 0
|
||||
|
||||
while i < len(s_list):
|
||||
if iscoopLk(s_list[i]) and str(i) in dic:
|
||||
termin_1_kurse.append(str(i))
|
||||
i += 1
|
||||
|
||||
while i < len(s_list):
|
||||
if s_list[i][0].klausur.kursname[-2] == "L" and str(i) not in termin_1_kurse and str(i) in dic:
|
||||
termin_1_kurse.append(str(i))
|
||||
i += 1
|
||||
|
||||
del i
|
||||
|
||||
# Ordnet die LKs Fest ein
|
||||
i = 0
|
||||
|
||||
while i < len(termin_1_kurse):
|
||||
if str(i) not in termin_2_kurse:
|
||||
for kurs in dic[termin_1_kurse[i]]:
|
||||
if not (kurs in termin_2_kurse):
|
||||
termin_2_kurse.append(kurs)
|
||||
i += 1
|
||||
else:
|
||||
termin_1_kurse.remove(str(i))
|
||||
|
||||
i2 = 0
|
||||
|
||||
if not termin_1_kurse:
|
||||
for d in dic:
|
||||
termin_1_kurse.append(d)
|
||||
break
|
||||
|
||||
# Füllt die Termine
|
||||
finished = False
|
||||
while not finished:
|
||||
while not (i >= len(termin_1_kurse) and i2 >= len(termin_2_kurse)):
|
||||
if i < len(termin_1_kurse):
|
||||
for kurs in dic[termin_1_kurse[i]]:
|
||||
if kurs in termin_1_kurse[:i]:
|
||||
probleme_kurse.append(termin_1_kurse.pop(i))
|
||||
break
|
||||
else:
|
||||
for kurs in dic[termin_1_kurse[i]]:
|
||||
if not (kurs in termin_2_kurse):
|
||||
termin_2_kurse.append(kurs)
|
||||
i += 1
|
||||
|
||||
if i2 < len(termin_2_kurse):
|
||||
for kurs in dic[termin_2_kurse[i2]]:
|
||||
if kurs in termin_2_kurse[:i2]:
|
||||
probleme_kurse.append(termin_2_kurse.pop(i2))
|
||||
break
|
||||
else:
|
||||
for kurs in dic[termin_2_kurse[i2]]:
|
||||
if not (kurs in termin_1_kurse):
|
||||
termin_1_kurse.append(kurs)
|
||||
i2 += 1
|
||||
probleme_kurse = list(set(probleme_kurse))
|
||||
|
||||
for kurs in dic:
|
||||
if kurs not in termin_1_kurse and kurs not in termin_2_kurse \
|
||||
and kurs not in probleme_kurse:
|
||||
termin_2_kurse.append(kurs)
|
||||
break
|
||||
else:
|
||||
finished = True
|
||||
|
||||
# Ordnet die nicht problematischen Kurse zu
|
||||
|
||||
i = 0
|
||||
while i < len(s_list):
|
||||
if str(i) not in termin_1_kurse and str(i) not in termin_2_kurse and str(i) not in probleme_kurse:
|
||||
termin_1_kurse.append(str(i))
|
||||
i += 1
|
||||
|
||||
for kurs in termin_1_kurse:
|
||||
for s in s_list[int(kurs)]:
|
||||
termin_1_kurse_s.append(s)
|
||||
|
||||
for kurs in termin_2_kurse:
|
||||
for s in s_list[int(kurs)]:
|
||||
termin_2_kurse_s.append(s)
|
||||
|
||||
for kurs in probleme_kurse:
|
||||
for s in s_list[int(kurs)]:
|
||||
probleme_kurse_s.append(s)
|
||||
|
||||
k_schueler.insert(0, s_list[0][0])
|
||||
|
||||
# Ruft die Methode rekursiv auf bis keine Problemkurse vorhanden sind
|
||||
if not probleme_kurse_s:
|
||||
return [termin_1_kurse_s, termin_2_kurse_s]
|
||||
else:
|
||||
return [termin_1_kurse_s] + [termin_2_kurse_s] + zuordnen(probleme_kurse_s)
|
||||
Reference in New Issue
Block a user