KursblockungDynStatistik.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynStatistik = exports.KursblockungDynStatistik = void 0;
  4. const JavaObject_1 = require("../../java/lang/JavaObject");
  5. const Arrays_1 = require("../../java/util/Arrays");
  6. const System_1 = require("../../java/lang/System");
  7. class KursblockungDynStatistik extends JavaObject_1.JavaObject {
  8. matrixFachartPaar = [...Array(0)].map(e => Array(0).fill(0));
  9. bewertungFachartPaar = 0;
  10. bewertungFachartPaarSaveS = 0;
  11. bewertungFachartPaarSaveK = 0;
  12. bewertungNichtwahlen = 0;
  13. bewertungNichtwahlenSaveS = 0;
  14. bewertungNichtwahlenSaveK = 0;
  15. bewertungKursdifferenzen = Array(0).fill(0);
  16. bewertungKursdifferenzenSaveS = Array(0).fill(0);
  17. bewertungKursdifferenzenSaveK = Array(0).fill(0);
  18. bewertungKursdifferenzenMaxIndex = 0;
  19. /**
  20. * Initialisiert alle Attribute mit Dummy-Werten.
  21. */
  22. constructor() {
  23. super();
  24. this.clear();
  25. }
  26. /**
  27. * Initialisiert alle Attribute mit Dummy-Werten. Setzt alle Werte auf 0 und
  28. * initialisiert alle Arrays auf Länge 0.
  29. */
  30. clear() {
  31. this.bewertungFachartPaar = 0;
  32. this.bewertungFachartPaarSaveS = 0;
  33. this.bewertungFachartPaarSaveK = 0;
  34. this.bewertungNichtwahlen = 0;
  35. this.bewertungNichtwahlenSaveS = 0;
  36. this.bewertungNichtwahlenSaveK = 0;
  37. this.matrixFachartPaar = [...Array(0)].map(e => Array(0).fill(0));
  38. this.bewertungKursdifferenzen = Array(0).fill(0);
  39. this.bewertungKursdifferenzenSaveS = Array(0).fill(0);
  40. this.bewertungKursdifferenzenSaveK = Array(0).fill(0);
  41. this.bewertungKursdifferenzenMaxIndex = 0;
  42. }
  43. /**
  44. * Initialisiert dieses Objekt mit den Anfangswerten.
  45. *
  46. * @param pMatrixFachartPaar Das 2D-Array beinhaltet pro Fachart-Paar eine
  47. * Bewertung.
  48. * @param pMaxSchueler Die maximale Anzahl an Schülern.
  49. * @param pMaxFacharten Die maximale Anzahl an Facharten.
  50. */
  51. aktionInitialisiere(pMatrixFachartPaar, pMaxSchueler, pMaxFacharten) {
  52. this.matrixFachartPaar = pMatrixFachartPaar;
  53. this.bewertungKursdifferenzen = Array(pMaxSchueler + 1).fill(0);
  54. this.bewertungKursdifferenzenSaveS = Array(pMaxSchueler + 1).fill(0);
  55. this.bewertungKursdifferenzenSaveK = Array(pMaxSchueler + 1).fill(0);
  56. this.bewertungKursdifferenzen[0] = pMaxFacharten;
  57. this.bewertungKursdifferenzenSaveS[0] = pMaxFacharten;
  58. this.bewertungKursdifferenzenSaveK[0] = pMaxFacharten;
  59. }
  60. /**
  61. * Liefert die aktuelle Fachart-Paar-Bewertung.
  62. *
  63. * @return Die aktuelle Fachart-Paar-Bewertung.
  64. */
  65. gibBewertungFachartPaar() {
  66. return this.bewertungFachartPaar;
  67. }
  68. /**
  69. * Liefert die aktuelle Anzahl an Nichtwahlen. Das ist die Summe aller Kurs, die
  70. * bei Schülern nicht zugeordnet wurden.
  71. *
  72. * @return Die aktuelle Anzahl an Nichtwahlen.
  73. */
  74. gibBewertungNichtwahlen() {
  75. return this.bewertungNichtwahlen;
  76. }
  77. /**
  78. * Liefert die aktuell größte Kursdifferenz (über alle Facharten).
  79. *
  80. * @return Die aktuell größte Kursdifferenz (über alle Facharten).
  81. */
  82. gibBewertungKursdifferenz() {
  83. return this.bewertungKursdifferenzenMaxIndex;
  84. }
  85. /**
  86. * Informiert die Statistik, dass ein Kurs-Paar hinzuzufügen ist.
  87. *
  88. * @param pKurs1 Der 1. Kurs des Kurs-Paares.
  89. * @param pKurs2 Der 2. Kurs des Kurs-Paares.
  90. */
  91. aktionKurspaarInSchieneHinzufuegen(pKurs1, pKurs2) {
  92. let nr1 = pKurs1.gibFachart().gibNr();
  93. let nr2 = pKurs2.gibFachart().gibNr();
  94. this.bewertungFachartPaar += this.matrixFachartPaar[nr1][nr2];
  95. }
  96. /**
  97. * Informiert die Statistik, dass ein Kurs-Paar zu entfernen ist.
  98. *
  99. * @param pKurs1 Der 1. Kurs des Kurs-Paares.
  100. * @param pKurs2 Der 2. Kurs des Kurs-Paares.
  101. */
  102. aktionKurspaarInSchieneEntfernen(pKurs1, pKurs2) {
  103. let nr1 = pKurs1.gibFachart().gibNr();
  104. let nr2 = pKurs2.gibFachart().gibNr();
  105. this.bewertungFachartPaar -= this.matrixFachartPaar[nr1][nr2];
  106. }
  107. /**
  108. * Informiert die Statistik über eine Veränderung der Nichtwahlen.
  109. *
  110. * @param pVeraenderung Die Veränderungen der Nichtwahlen (negative Werte sind
  111. * möglich).
  112. */
  113. aktionNichtwahlenVeraendern(pVeraenderung) {
  114. this.bewertungNichtwahlen += pVeraenderung;
  115. }
  116. /**
  117. * Entfernt eine Kursdifferenz {@code pIndex} aus dem Histogramm
  118. * {@link KursblockungDynStatistik#bewertungKursdifferenzen} aller
  119. * Kursdifferenzen. Der Index des größten Nicht-Null-Wertes
  120. * {@link KursblockungDynStatistik#bewertungKursdifferenzenMaxIndex} wird dabei
  121. * möglicherweise kleiner. <br>
  122. * {@code Beispiel vorher: 5, 0, 6, 0, 0, 1*, 0, 0, 0}<br>
  123. * {@code Beispiel danach: 5, 0, 6*, 0, 0, 0, 0, 0, 0}<br>
  124. *
  125. * @param pIndex Die Kursdifferenz von der es eine weniger geben soll.
  126. */
  127. aktionKursdifferenzEntfernen(pIndex) {
  128. this.bewertungKursdifferenzen[pIndex]--;
  129. if (pIndex === this.bewertungKursdifferenzenMaxIndex) {
  130. while ((this.bewertungKursdifferenzen[this.bewertungKursdifferenzenMaxIndex] === 0) && (this.bewertungKursdifferenzenMaxIndex > 0)) {
  131. this.bewertungKursdifferenzenMaxIndex--;
  132. }
  133. }
  134. }
  135. /**
  136. * Fügt eine Kursdifferenz {@code pIndex} dem Histogramm
  137. * {@link KursblockungDynStatistik#bewertungKursdifferenzen} aller
  138. * Kursdifferenzen hinzu. Der Index des größten Nicht-Null-Wertes
  139. * {@link KursblockungDynStatistik#bewertungKursdifferenzenMaxIndex} wird dabei
  140. * möglicherweise größer. <br>
  141. * {@code Beispiel vorher: 5, 0, 6*, 0, 0, 0, 0, 0, 0}<br>
  142. * {@code Beispiel danach: 5, 0, 6, 0, 0, 1*, 0, 0, 0}<br>
  143. *
  144. * @param pIndex Die Kursdifferenz von der es eine weniger geben soll.
  145. */
  146. aktionKursdifferenzHinzufuegen(pIndex) {
  147. this.bewertungKursdifferenzen[pIndex]++;
  148. if (pIndex > this.bewertungKursdifferenzenMaxIndex) {
  149. this.bewertungKursdifferenzenMaxIndex = pIndex;
  150. }
  151. }
  152. /**
  153. * Ausgabe von Debug-Informationen. Nur für Testzwecke.
  154. */
  155. debug() {
  156. console.log(JSON.stringify("NW = " + this.bewertungNichtwahlen + ", KDs = " + Arrays_1.Arrays.toString(this.bewertungKursdifferenzen).valueOf()));
  157. }
  158. /**
  159. * Speichert die aktuellen Werte (im Zustand S). Die Methoden
  160. * {@link KursblockungDynStatistik#gibBewertung_NW_KD_JetztS} und
  161. * {@link KursblockungDynStatistik#gibBewertungFachartPaarSchlechter} bedienen
  162. * sich dann der ehemaligen Werte um festzustellen, ob es eine Verschlechterung
  163. * gab.
  164. *
  165. */
  166. aktionBewertungSpeichernS() {
  167. this.bewertungNichtwahlenSaveS = this.bewertungNichtwahlen;
  168. this.bewertungFachartPaarSaveS = this.bewertungFachartPaar;
  169. System_1.System.arraycopy(this.bewertungKursdifferenzen, 0, this.bewertungKursdifferenzenSaveS, 0, this.bewertungKursdifferenzen.length);
  170. }
  171. /**
  172. * Speichert die aktuellen Werte (im Zustand K). Die Methoden
  173. * {@link KursblockungDynStatistik#gibBewertung_NW_KD_JetztK()} und
  174. * {@link KursblockungDynStatistik#gibBewertungFachartPaarSchlechter} bedienen
  175. * sich dann der ehemaligen Werte um festzustellen, ob es eine Verschlechterung
  176. * gab.
  177. *
  178. */
  179. aktionBewertungSpeichernK() {
  180. this.bewertungNichtwahlenSaveK = this.bewertungNichtwahlen;
  181. this.bewertungFachartPaarSaveK = this.bewertungFachartPaar;
  182. System_1.System.arraycopy(this.bewertungKursdifferenzen, 0, this.bewertungKursdifferenzenSaveK, 0, this.bewertungKursdifferenzen.length);
  183. }
  184. /**
  185. * Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
  186. * Kursdiffenzen) des Zustandes S sich verschlechtert (-1), sich verbessert (+1)
  187. * hat oder gleichgeblieben (0) ist.
  188. *
  189. * @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
  190. * Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich
  191. * verbessert (+1) hat oder gleichgeblieben (0) ist.
  192. */
  193. gibBewertung_NW_KD_JetztS() {
  194. if (this.bewertungNichtwahlen > this.bewertungNichtwahlenSaveS) {
  195. return -1;
  196. }
  197. if (this.bewertungNichtwahlen < this.bewertungNichtwahlenSaveS) {
  198. return +1;
  199. }
  200. for (let i = this.bewertungKursdifferenzen.length - 1; i >= 0; i--) {
  201. if (this.bewertungKursdifferenzen[i] === this.bewertungKursdifferenzenSaveS[i]) {
  202. continue;
  203. }
  204. if (this.bewertungKursdifferenzen[i] > this.bewertungKursdifferenzenSaveS[i]) {
  205. return -1;
  206. }
  207. if (this.bewertungKursdifferenzen[i] < this.bewertungKursdifferenzenSaveS[i]) {
  208. return +1;
  209. }
  210. }
  211. return 0;
  212. }
  213. /**
  214. * Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
  215. * Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich verbessert (+1)
  216. * hat oder gleichgeblieben (0) ist.
  217. *
  218. * @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
  219. * Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich
  220. * verbessert (+1) hat oder gleichgeblieben (0) ist.
  221. */
  222. gibBewertung_NW_KD_JetztK() {
  223. if (this.bewertungNichtwahlen > this.bewertungNichtwahlenSaveK) {
  224. return -1;
  225. }
  226. if (this.bewertungNichtwahlen < this.bewertungNichtwahlenSaveK) {
  227. return +1;
  228. }
  229. for (let i = this.bewertungKursdifferenzen.length - 1; i >= 0; i--) {
  230. if (this.bewertungKursdifferenzen[i] === this.bewertungKursdifferenzenSaveK[i]) {
  231. continue;
  232. }
  233. if (this.bewertungKursdifferenzen[i] > this.bewertungKursdifferenzenSaveK[i]) {
  234. return -1;
  235. }
  236. if (this.bewertungKursdifferenzen[i] < this.bewertungKursdifferenzenSaveK[i]) {
  237. return +1;
  238. }
  239. }
  240. if (this.bewertungFachartPaar > this.bewertungFachartPaarSaveK) {
  241. return -1;
  242. }
  243. if (this.bewertungFachartPaar < this.bewertungFachartPaarSaveK) {
  244. return +1;
  245. }
  246. return 0;
  247. }
  248. /**
  249. * Liefert den Wert {@code true}, falls die Bewertung (bewertungFachartPaar) des
  250. * Zustandes S sich verschlechtert hat.
  251. *
  252. * @return {@code true}, falls die Bewertung (bewertungFachartPaar) des
  253. * Zustandes S sich verschlechtert hat.
  254. */
  255. gibBewertungFachartPaarSchlechter() {
  256. if (this.bewertungFachartPaar > this.bewertungFachartPaarSaveS) {
  257. return true;
  258. }
  259. if (this.bewertungFachartPaar < this.bewertungFachartPaarSaveS) {
  260. return false;
  261. }
  262. return false;
  263. }
  264. /**
  265. * Liefert den Wert {@code true}, falls die Bewertung (bewertungFachartPaar) des
  266. * Zustandes K sich verschlechtert hat.
  267. *
  268. * @return {@code true}, falls die Bewertung (bewertungFachartPaar) des
  269. * Zustandes K sich verschlechtert hat.
  270. */
  271. gibBewertungFachartPaarSchlechterK() {
  272. if (this.bewertungFachartPaar > this.bewertungFachartPaarSaveK) {
  273. return true;
  274. }
  275. if (this.bewertungFachartPaar < this.bewertungFachartPaarSaveK) {
  276. return false;
  277. }
  278. return false;
  279. }
  280. isTranspiledInstanceOf(name) {
  281. return ['de.nrw.schule.svws.core.kursblockung.KursblockungDynStatistik'].includes(name);
  282. }
  283. }
  284. exports.KursblockungDynStatistik = KursblockungDynStatistik;
  285. function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynStatistik(obj) {
  286. return obj;
  287. }
  288. exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynStatistik = cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynStatistik;
  289. //# sourceMappingURL=KursblockungDynStatistik.js.map