KursblockungStatic.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { JavaObject, cast_java_lang_Object } from '../../java/lang/JavaObject';
  2. import { KursblockungInputKurs, cast_de_nrw_schule_svws_core_data_kursblockung_KursblockungInputKurs } from '../../core/data/kursblockung/KursblockungInputKurs';
  3. import { KursblockungInput, cast_de_nrw_schule_svws_core_data_kursblockung_KursblockungInput } from '../../core/data/kursblockung/KursblockungInput';
  4. import { KursblockungInputKursart, cast_de_nrw_schule_svws_core_data_kursblockung_KursblockungInputKursart } from '../../core/data/kursblockung/KursblockungInputKursart';
  5. import { KursblockungInputRegel, cast_de_nrw_schule_svws_core_data_kursblockung_KursblockungInputRegel } from '../../core/data/kursblockung/KursblockungInputRegel';
  6. import { JavaLong, cast_java_lang_Long } from '../../java/lang/JavaLong';
  7. import { JavaString, cast_java_lang_String } from '../../java/lang/JavaString';
  8. export class KursblockungStatic extends JavaObject {
  9. public constructor() {
  10. super();
  11. }
  12. /**
  13. * Erzeugt ein Array der Größe {@code n}, füllt es mit den Zahlen
  14. * {@code 0 bis n-1} und permutiert das Array dann zufällig.
  15. *
  16. * @param n Die Größe des Arrays.
  17. * @return Eine Array-Referenz.
  18. */
  19. public static gibPermutation(n : number) : Array<number> {
  20. let temp : Array<number> = Array(n).fill(0);
  21. for (let i : number = 0; i < n; i++){
  22. temp[i] = i;
  23. }
  24. KursblockungStatic.aktionPermutiere(temp);
  25. return temp;
  26. }
  27. /**
  28. * Permutiert das Array {@code perm} zufällig.
  29. *
  30. * @param perm Das zu permutierende Array.
  31. */
  32. public static aktionPermutiere(perm : Array<number>) : void {
  33. let n : number = perm.length;
  34. for (let i1 : number = 0; i1 < n; i1++){
  35. let i2 : number = (Math.random() * n) as number;
  36. let s1 : number = perm[i1];
  37. let s2 : number = perm[i2];
  38. perm[i1] = s2;
  39. perm[i2] = s1;
  40. }
  41. }
  42. /**
  43. * Erweitert die Eingabedaten {@link KursblockungInput} um eine Regel, welche
  44. * bestimmte Schienen für bestimmte Kursarten sperrt.
  45. *
  46. * @param pInput Das Eingabeojekt, welchem eine neue Regel hinzugefügt wird.
  47. * @param pKursart Eine String-Darstellung der Kursart.
  48. * @param pVon Sperrung aller Schienen von (inklusive, 0-indiziert).
  49. * @param pBis Sperrung aller Schienen bis (inklusive, 0-indiziert).
  50. */
  51. public static aktionSperreSchieneFuerKursart(pInput : KursblockungInput, pKursart : String, pVon : number, pBis : number) : void {
  52. for (let i : number = 0; i < pInput.kursarten.size(); i++){
  53. let kursart : KursblockungInputKursart | null = pInput.kursarten.get(i);
  54. if (JavaObject.equalsTranspiler(kursart.representation, (pKursart))) {
  55. let r : KursblockungInputRegel | null = new KursblockungInputRegel();
  56. r.id = 1;
  57. r.daten = [kursart.id, pVon as number, pBis as number];
  58. pInput.regeln.add(r);
  59. }
  60. }
  61. }
  62. /**
  63. * Erweitert die Eingabedaten {@link KursblockungInput} um Regeln, die bestimmte
  64. * Kurse in einer Schiene fixieren, andere Kurse die Schiene verbieten.
  65. *
  66. * @param pInput Das Eingabeojekt, welchem eine neue Regel hinzugefügt wird.
  67. * @param pKursnamen Die zu fixierenden Kursnamen
  68. * @param pSchiene Die Schiene in der die Kurse (und nur diese) liegen sollen.
  69. */
  70. public static aktionFixiereKurseInSchieneSonstNichts(pInput : KursblockungInput, pKursnamen : Array<String>, pSchiene : number) : void {
  71. for (let i : number = 0; i < pInput.kurse.size(); i++){
  72. let kurs : KursblockungInputKurs | null = pInput.kurse.get(i);
  73. let gefunden : boolean = false;
  74. for (let j : number = 0; j < pKursnamen.length; j++){
  75. if (JavaObject.equalsTranspiler(kurs.representation, (pKursnamen[j]))) {
  76. gefunden = true;
  77. }
  78. }
  79. let r : KursblockungInputRegel = new KursblockungInputRegel();
  80. if (gefunden) {
  81. r.id = 2;
  82. r.daten = [kurs.id, pSchiene as number];
  83. } else {
  84. r.id = 3;
  85. r.daten = [kurs.id, pSchiene as number];
  86. }
  87. pInput.regeln.add(r);
  88. }
  89. }
  90. isTranspiledInstanceOf(name : string): boolean {
  91. return ['de.nrw.schule.svws.core.kursblockung.KursblockungStatic'].includes(name);
  92. }
  93. }
  94. export function cast_de_nrw_schule_svws_core_kursblockung_KursblockungStatic(obj : unknown) : KursblockungStatic {
  95. return obj as KursblockungStatic;
  96. }