From e0edb2637b3a5f09a4925ee05bc8258c99f738aa Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 30 Aug 2024 01:09:09 +0200
Subject: [PATCH] =?UTF-8?q?Inicializace=20ro=C4=8Dn=C3=ADku=20nastavuje=20?=
 =?UTF-8?q?term=C3=ADny,=20t=C5=99=C3=ADdy=20a=20tex=5Fhacks?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Viz #404, #402, #405, #383, #381.
---
 bin/init-year | 181 ++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 161 insertions(+), 20 deletions(-)

diff --git a/bin/init-year b/bin/init-year
index 2283b2bd..0c571ad6 100755
--- a/bin/init-year
+++ b/bin/init-year
@@ -7,44 +7,137 @@ if [ $# != 1 ] ; then
 fi
 
 YEAR=$1
+YY1=$((1950+$YEAR))
+YY2=$((1951+$YEAR))
+
+# Datum konání
+declare -A D
+D[START]=$YY1-09-01
+D[Z5_DOMACI]=$YY2-01-05
+D[Z5_OKRESNI]=$YY2-01-05
+D[Z6_DOMACI]=$YY2-03-01
+D[Z6_OKRESNI]=$YY2-04-03
+D[Z7_DOMACI]=${D[Z6_DOMACI]}
+D[Z7_OKRESNI]=${D[Z6_OKRESNI]}
+D[Z8_DOMACI]=${D[Z6_DOMACI]}
+D[Z8_OKRESNI]=${D[Z6_OKRESNI]}
+D[Z9_DOMACI]=${D[Z5_DOMACI]}
+D[Z9_OKRESNI]=${D[Z5_OKRESNI]}
+D[Z9_KRAJSKE]=$YY2-03-26
+D[A_DOMACI]=$YY1-12-03
+D[A_SKOLNI]=$YY1-12-10
+D[A_KRAJSKE]=$YY2-01-14
+D[B_DOMACI]=$YY2-01-21
+D[B_SKOLNI]=$YY2-01-28
+D[B_KRAJSKE]=$YY2-04-01
+D[C_DOMACI]=${D[B_DOMACI]}
+D[C_SKOLNI]=${D[B_SKOLNI]}
+D[C_KRAJSKE]=${D[B_KRAJSKE]}
+D[P_DOMACI]=$YY1-11-15
+D[P_KRAJSKE]=$YY2-01-23
+D[USTREDNI_PONDELI]=$YY2-03-16
+
+# Délka soutěže v minutách
+declare -A L
+L[Z5_OKRESNI]=90
+L[Z6_OKRESNI]=120
+L[Z7_OKRESNI]=120
+L[Z8_OKRESNI]=120
+L[Z9_OKRESNI]=240
+L[Z9_KRAJSKE]=240
+
+# Hacky do výsledkovek
+KDE_USTREDNI="Plzeň"
+HACK_A_USTREDNI="podhlavicka={$KDE_USTREDNI 16.--18. března $YY2}"
+HACK_P_USTREDNI="podhlavicka={$KDE_USTREDNI 18.--20. března $YY2}"
+
+dd()
+{
+	date -d "$1" -Idate
+}
+
+dt()
+{
+	date -d "$1" -Iminutes
+}
 
 create_ss()
 {
 	local CAT=$1
 	local ADV="$2"
+	local MIN_GRADE="$3"
+	local MAX_GRADE="$4"
+
+	local D_START=${D[START]}
+	local D_DOMACI=${D[${CAT}_DOMACI]}
+	local D_SKOLNI=${D[${CAT}_SKOLNI]}
+	local D_OKRESNI=${D[${CAT}_OKRESNI]}
+	local D_KRAJSKE=${D[${CAT}_KRAJSKE]}
+	local D_ENROLL=$(dd "+2 days $D_DOMACI")
+
 	bin/create-round --year $YEAR --cat $CAT --seq 1 \
 		--level 4 \
 		--type domaci --name 'Domácí kolo' \
-		--enroll-mode register --enroll-advert "$ADV"
+		--enroll-mode register --enroll-advert "$ADV" \
+		--min-rec-grade $MIN_GRADE --max-rec-grade $MAX_GRADE \
+		--ct-tasks-start $D_START \
+		--ct-submit-end "$D_DOMACI 23:59" \
+		--pr-tasks-start $D_START \
+		--pr-submit-end "$D_DOMACI 23:59" \
+		--enroll-deadline "$D_ENROLL 23:59" \
+		--switch-to-grading $(dd "+1 day $D_DOMACI") \
+		--score-successful-limit 20 --score-advance-limit 20
 	bin/create-tasks --round $YEAR-$CAT-1 --code $CAT-I-1 \
 		--name 'Úloha 1' --points 6 --count 6
 
 	bin/create-round --year $YEAR --cat $CAT --seq 2 \
 		--level 4 \
-		--type skolni --name 'Školní kolo'
+		--type skolni --name 'Školní kolo' \
+		--ct-tasks-start "$D_SKOLNI 10:00" \
+		--ct-submit-end "$D_SKOLNI 14:20" \
+		--pr-tasks-start $(dt "-1 day $D_SKOLNI 7:00") \
+		--pr-submit-end "$D_SKOLNI 18:00" \
+		--switch-to-grading "$D_SKOLNI 19:00" \
+		--score-successful-limit 10
 	bin/create-tasks --round $YEAR-$CAT-2 --code $CAT-II-1 \
 		--name 'Úloha 1' --points 6 --count 3
 
 	bin/create-round --year $YEAR --cat $CAT --seq 3 \
 		--level 1 \
 		--type krajske --name 'Krajské kolo' \
+		--ct-tasks-start "$D_KRAJSKE 10:00" \
+		--ct-submit-end "$D_KRAJSKE 14:20" \
+		--pr-tasks-start $(dt "-1 day $D_KRAJSKE 7:00") \
+		--pr-submit-end "$D_KRAJSKE 18:00" \
+		--switch-to-grading "$D_KRAJSKE 19:00" \
 		--publish-score
 	bin/create-tasks --round $YEAR-$CAT-3 --code $CAT-III-1 \
 		--name 'Úloha 1' --points 6 --count 4
 	bin/create-contests $YEAR-$CAT-3
 
 	if [ $CAT = A ] ; then
+		local D_USTREDNI_DEN1=${D[USTREDNI_PONDELI]}
 		bin/create-round --year $YEAR --cat $CAT --seq 4 --part 1 \
 			--level 0 \
 			--type ustredni --name 'Ústřední kolo (1. den)' \
+			--ct-tasks-start "$D_USTREDNI_DEN1 13:00" \
+			--ct-submit-end "$D_USTREDNI_DEN1 13:00" \
+			--pr-tasks-start "$D_USTREDNI_DEN1 13:00" \
+			--pr-submit-end "$D_USTREDNI_DEN1 13:00" \
 			--publish-score
 		bin/create-tasks --round $YEAR-$CAT-4a --code $CAT-IV-1 \
 			--name 'Úloha 1' --points 7 --count 3
-		bin/create-contests $YEAR-$CAT-4a
+		bin/create-contests $YEAR-$CAT-4a \
+			--tex-hacks "$HACK_A_USTREDNI"
 
+		local D_USTREDNI_DEN2=$(dd "+1 days ${D[USTREDNI_PONDELI]}")
 		bin/create-round --year $YEAR --cat $CAT --seq 4 --part 2 \
 			--level 0 \
-			--type ustredni --name 'Ústřední kolo (2. den)'
+			--type ustredni --name 'Ústřední kolo (2. den)' \
+			--ct-tasks-start "$D_USTREDNI_DEN2 13:00" \
+			--ct-submit-end "$D_USTREDNI_DEN2 13:00" \
+			--pr-tasks-start "$D_USTREDNI_DEN2 13:00" \
+			--pr-submit-end "$D_USTREDNI_DEN2 13:00"
 		bin/create-tasks --round $YEAR-$CAT-4b --code $CAT-IV-4 \
 			--name 'Úloha 4' --points 7 --count 3
 		bin/create-contests $YEAR-$CAT-4b
@@ -53,28 +146,53 @@ create_ss()
 
 create_zs()
 {
-	local CAT=$1
-	local ADV="$2"
+	local GRADE=$1
+	local CAT=Z$GRADE
+	local D_START=${D[START]}
+	local D_DOMACI=${D[${CAT}_DOMACI]}
+	local D_OKRESNI=${D[${CAT}_OKRESNI]}
+	local D_ENROLL=$(dd "+7 days $D_DOMACI")
+	local L_OKRESNI=${L[${CAT}_OKRESNI]}
 
 	bin/create-round --year $YEAR --cat $CAT --seq 1 \
 		--level 4 \
 		--type domaci --name 'Domácí kolo' \
-		--enroll-mode register --enroll-advert "$ADV"
+		--enroll-mode register --enroll-advert "$GRADE. ročník ZŠ" \
+		--min-rec-grade $GRADE --max-rec-grade $GRADE \
+		--ct-tasks-start $D_START \
+		--ct-submit-end "$D_DOMACI 23:59" \
+		--enroll-deadline "$D_ENROLL 23:59" \
+		--switch-to-grading $(dd "+1 day $D_DOMACI") \
+		--score-successful-limit 20 --score-advance-limit 20
 	bin/create-tasks --round $YEAR-$CAT-1 --code $CAT-I-1 \
 		--name 'Úloha 1' --points 6 --count 6
 
 	bin/create-round --year $YEAR --cat $CAT --seq 2 \
 		--level 2 \
 		--type okresni --name 'Okresní kolo' \
+		--ct-tasks-start "$D_OKRESNI 10:00" \
+		--ct-submit-end $(dt "$L_OKRESNI minutes $D_OKRESNI 10:20") \
+		--pr-tasks-start "$D_OKRESNI 10:00" \
+		--pr-submit-end "$D_OKRESNI 18:00" \
+		--switch-to-grading "$D_OKRESNI 19:00" \
+		--score-successful-limit $(if [ $CAT = Z9 ] ; then echo 12 ; else echo 9 ; fi) \
 		--publish-score
 	bin/create-tasks --round $YEAR-$CAT-2 --code $CAT-II-1 \
 		--name 'Úloha 1' --points 6 --count $(if [ $CAT = Z9 ] ; then echo 4 ; else echo 3 ; fi)
 	bin/create-contests $YEAR-$CAT-2
 
 	if [ $CAT = Z9 ] ; then
+		local D_KRAJSKE=${D[${CAT}_KRAJSKE]}
+		local L_KRAJSKE=${L[${CAT}_KRAJSKE]}
 		bin/create-round --year $YEAR --cat $CAT --seq 3 \
 			--level 1 \
 			--type krajske --name 'Krajské kolo' \
+			--ct-tasks-start "$D_KRAJSKE 10:00" \
+			--ct-submit-end $(dt "$L_KRAJSKE minutes $D_KRAJSKE 10:20") \
+			--pr-tasks-start "$D_KRAJSKE 10:00" \
+			--pr-submit-end "$D_KRAJSKE 18:00" \
+			--switch-to-grading "$D_KRAJSKE 19:00" \
+			--score-successful-limit 12 \
 			--publish-score
 		bin/create-tasks --round $YEAR-$CAT-3 --code $CAT-III-1 \
 			--name 'Úloha 1' --points 6 --count 4
@@ -84,10 +202,17 @@ create_zs()
 
 create_p()
 {
+	local D_START=${D[START]}
+	local D_DOMACI=${D[P_DOMACI]}
+	local D_KRAJSKE=${D[P_KRAJSKE]}
+
 	bin/create-round --year $YEAR --cat P --seq 1 \
-		--level 0 \
+		--level 1 \
 		--type domaci --name 'Domácí kolo' \
 		--enroll-mode register --enroll-advert "Programování" \
+		--ct-tasks-start $D_START \
+		--ct-submit-end "$D_DOMACI 23:59" \
+		--switch-to-grading $(dd "+1 day $D_DOMACI 7:00") \
 		--online-submit
 	bin/create-tasks --round $YEAR-P-1 --code P-I-1 \
 		--name 'Úloha 1' --points 10 --type cms --count 2
@@ -97,34 +222,50 @@ create_p()
 
 	bin/create-round --year $YEAR --cat P --seq 2 \
 		--level 1 \
-		--type krajske --name 'Krajské kolo'
+		--type krajske --name 'Krajské kolo' \
+		--ct-tasks-start "$D_KRAJSKE 10:00" \
+		--ct-submit-end "$D_KRAJSKE 14:20" \
+		--pr-tasks-start $(dt "-1 day $D_KRAJSKE 7:00") \
+		--pr-submit-end "$D_KRAJSKE 18:00" \
+		--switch-to-grading "$D_KRAJSKE 19:00"
 	bin/create-tasks --round $YEAR-P-2 --code P-II-1 \
 		--name 'Úloha 1' --points 10 --count 4
 	bin/create-contests $YEAR-P-2
 
+	local D_USTREDNI_DEN1=$(dd "+3 days ${D[USTREDNI_PONDELI]}")
 	bin/create-round --year $YEAR --cat P --seq 3 --part 1 \
 		--level 0 \
-		--type ustredni --name 'Ústřední kolo (1. den)'
+		--type ustredni --name 'Ústřední kolo (1. den)' \
+		--ct-tasks-start "$D_USTREDNI_DEN1 13:00" \
+		--ct-submit-end "$D_USTREDNI_DEN1 13:00" \
+		--pr-tasks-start "$D_USTREDNI_DEN1 13:00" \
+		--pr-submit-end "$D_USTREDNI_DEN1 13:00"
 	bin/create-tasks --round $YEAR-P-3a --code P-III-1 \
 		--name 'Úloha 1' --points 10 --count 3
-	bin/create-contests $YEAR-P-3a
+	bin/create-contests $YEAR-P-3a \
+		--tex-hacks "$HACK_P_USTREDNI"
 
+	local D_USTREDNI_DEN2=$(dd "+4 days ${D[USTREDNI_PONDELI]}")
 	bin/create-round --year $YEAR --cat P --seq 3 --part 2 \
 		--level 0 \
-		--type ustredni --name 'Ústřední kolo (2. den)'
+		--type ustredni --name 'Ústřední kolo (2. den)' \
+		--ct-tasks-start "$D_USTREDNI_DEN2 13:00" \
+		--ct-submit-end "$D_USTREDNI_DEN2 13:00" \
+		--pr-tasks-start "$D_USTREDNI_DEN2 13:00" \
+		--pr-submit-end "$D_USTREDNI_DEN2 13:00"
 	bin/create-tasks --round $YEAR-P-3b --code P-III-4 \
 		--name 'Úloha 4' --points 10 --type cms --count 3
 	bin/create-contests $YEAR-P-3b
 }
 
-create_ss A "3. a 4. ročník středních škol"
-create_ss B "2. ročník středních škol"
-create_ss C "1. ročník středních škol"
+create_ss A "3. a 4. ročník středních škol" 3 4
+create_ss B "2. ročník středních škol" 2 2
+create_ss C "1. ročník středních škol" 1 1
 
-create_zs Z9 "9. ročník ZŠ"
-create_zs Z8 "8. ročník ZŠ"
-create_zs Z7 "7. ročník ZŠ"
-create_zs Z6 "6. ročník ZŠ"
-create_zs Z5 "5. ročník ZŠ"
+create_zs 9
+create_zs 8
+create_zs 7
+create_zs 6
+create_zs 5
 
 create_p
-- 
GitLab