Skip to content

Commit 4ff2fc7

Browse files
committed
Add challenge files for 2026
1 parent 6ec0ab8 commit 4ff2fc7

File tree

10 files changed

+2199
-524
lines changed

10 files changed

+2199
-524
lines changed

package-lock.json

Lines changed: 832 additions & 510 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,28 +19,28 @@
1919
"@headlessui/react": "^2.2.9",
2020
"@mdx-js/loader": "^3.1.1",
2121
"@mdx-js/react": "^3.1.1",
22-
"@next/mdx": "^15.5.7",
23-
"@next/third-parties": "^15.5.7",
24-
"@tailwindcss/forms": "^0.5.10",
25-
"@tailwindcss/postcss": "^4.1.17",
22+
"@next/mdx": "^15.5.9",
23+
"@next/third-parties": "^15.5.9",
24+
"@tailwindcss/forms": "^0.5.11",
25+
"@tailwindcss/postcss": "^4.1.18",
2626
"@tailwindcss/typography": "^0.5.19",
2727
"@types/mdx": "^2.0.13",
2828
"clsx": "^2.1.1",
2929
"focus-visible": "^5.2.1",
30-
"framer-motion": "^12.23",
31-
"next": "15.5.7",
30+
"framer-motion": "^12.27",
31+
"next": "15.5.9",
3232
"postcss-focus-visible": "^10.0.1",
33-
"react": "19.2.1",
34-
"react-dom": "19.2.1",
33+
"react": "19.2.3",
34+
"react-dom": "19.2.3",
3535
"rehype-slug": "^6.0.0",
3636
"remark-gfm": "^4.0.1",
37-
"tailwindcss": "^4.1.17",
38-
"use-debounce": "10.0.6"
37+
"tailwindcss": "^4.1.18",
38+
"use-debounce": "10.1.0"
3939
},
4040
"devDependencies": {
4141
"eslint": "9.39",
4242
"eslint-config-next": "15.5",
43-
"prettier": "^3.7.4",
43+
"prettier": "^3.8.0",
4444
"prettier-plugin-tailwindcss": "^0.7.2",
4545
"unist-util-visit": "^5.0.0"
4646
}
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
#------------------------------------------------------------------------------#
2+
# This file contains the setup for building a base image for the MiniZinc
3+
# challenges. It uses multi-stage builds in order to keep the images small.
4+
# Note that the statements ADD, RUN, and COPY can add image layers.
5+
#------------------------------------------------------------------------------#
6+
# The build image
7+
8+
# Setup Alpine Linux as build image
9+
FROM alpine:latest AS builder
10+
11+
#------------------------------------------------------------------------------#
12+
# Script for executing a FlatZinc or MiniZinc solver in the FD class
13+
14+
RUN mkdir /minizinc
15+
16+
RUN \
17+
echo "#!/bin/bash" > /minizinc/mzn-exec-fd && \
18+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-fd && \
19+
echo "# Script for running solver in the class 'FD search'" >> /minizinc/mzn-exec-fd && \
20+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-fd && \
21+
echo "# FlatZinc Solver" >> /minizinc/mzn-exec-fd && \
22+
echo "# (comment following line for MiniZinc solver)" >> /minizinc/mzn-exec-fd && \
23+
echo "minizinc --solver \"org.minizinc.mzn-fzn\" -k --fzn-cmd \"\$FZNEXEC\" -G exec \"\$@\"" >> /minizinc/mzn-exec-fd && \
24+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-fd && \
25+
echo "# MiniZinc Solver" >> /minizinc/mzn-exec-fd && \
26+
echo "# (add call to your solver here, e.g.)" >> /minizinc/mzn-exec-fd && \
27+
echo "# mzn-gecode -G gecode \"\$@\"" >> /minizinc/mzn-exec-fd && \
28+
chmod a+x /minizinc/mzn-exec-fd
29+
30+
#------------------------------------------------------------------------------#
31+
# Script for executing a FlatZinc or MiniZinc solver in the FREE class
32+
33+
RUN \
34+
echo "#!/bin/bash" > /minizinc/mzn-exec-free && \
35+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-free && \
36+
echo "# Script for running solver in the class 'FREE search'" >> /minizinc/mzn-exec-free && \
37+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-free && \
38+
echo "# FlatZinc Solver" >> /minizinc/mzn-exec-free && \
39+
echo "# (comment following line for MiniZinc solver)" >> /minizinc/mzn-exec-free && \
40+
echo "minizinc --solver \"org.minizinc.mzn-fzn\" -k --fzn-cmd \"\$FZNEXEC\" -f -G exec \"\$@\"" >> /minizinc/mzn-exec-free && \
41+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-free && \
42+
echo "# MiniZinc Solver" >> /minizinc/mzn-exec-free && \
43+
echo "# (add call to your solver here, e.g.)" >> /minizinc/mzn-exec-free && \
44+
echo "# mzn-gecode -f -G gecode \"\$@\"" >> /minizinc/mzn-exec-free && \
45+
chmod a+x /minizinc/mzn-exec-free
46+
47+
#------------------------------------------------------------------------------#
48+
# Script for executing a FlatZinc or MiniZinc solver in the PAR class
49+
# (NOTE that this script will be invoke including the parameter "-p <n>".)
50+
51+
RUN \
52+
echo "#!/bin/bash" > /minizinc/mzn-exec-par && \
53+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-par && \
54+
echo "# Script for running solver in the class 'PAR search'" >> /minizinc/mzn-exec-par && \
55+
echo "# NOTE that the argument \"-p <n>\" will passed to this script!" >> /minizinc/mzn-exec-par && \
56+
echo "# Your solver needs to handle this parameter." >> /minizinc/mzn-exec-par && \
57+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-par && \
58+
echo "# FlatZinc Solver" >> /minizinc/mzn-exec-par && \
59+
echo "# (comment following line for MiniZinc solver)" >> /minizinc/mzn-exec-par && \
60+
echo "minizinc --solver \"org.minizinc.mzn-fzn\" -k --fzn-cmd \"\$FZNEXEC\" -G exec \"\$@\"" >> /minizinc/mzn-exec-par && \
61+
echo "#----------------------------------------------------------#" >> /minizinc/mzn-exec-par && \
62+
echo "# MiniZinc Solver" >> /minizinc/mzn-exec-par && \
63+
echo "# (add call to your solver here, e.g.)" >> /minizinc/mzn-exec-par && \
64+
echo "# mzn-gecode -G gecode \"\$@\"" >> /minizinc/mzn-exec-par && \
65+
chmod a+x /minizinc/mzn-exec-par
66+
67+
#------------------------------------------------------------------------------#
68+
# Script for executing a FlatZinc or MiniZinc solver
69+
70+
RUN \
71+
echo "#!/bin/bash" > /minizinc/solver && \
72+
echo "#------------------------------------------#" >> /minizinc/solver && \
73+
echo "EXEC=mzn-exec-fd " >> /minizinc/solver && \
74+
echo "while (( \"\$#\" )) " >> /minizinc/solver && \
75+
echo "do " >> /minizinc/solver && \
76+
echo " case \$1 in " >> /minizinc/solver && \
77+
echo " -p) " >> /minizinc/solver && \
78+
echo " EXEC=mzn-exec-par " >> /minizinc/solver && \
79+
echo " ARGS=\"\$ARGS \$1\" " >> /minizinc/solver && \
80+
echo " ;; " >> /minizinc/solver && \
81+
echo " -f|--free-search) " >> /minizinc/solver && \
82+
echo " EXEC=mzn-exec-free " >> /minizinc/solver && \
83+
echo " ;; " >> /minizinc/solver && \
84+
echo " --fzn-flag|--fzn-flags) " >> /minizinc/solver && \
85+
echo " shift " >> /minizinc/solver && \
86+
echo " FLAGS=\"\$FLAGS \$1\" " >> /minizinc/solver && \
87+
echo " ;; " >> /minizinc/solver && \
88+
echo " -D|--cmdline-data) " >> /minizinc/solver && \
89+
echo " shift " >> /minizinc/solver && \
90+
echo " DATA=\"\$DATA \$1\" " >> /minizinc/solver && \
91+
echo " ;; " >> /minizinc/solver && \
92+
echo " *) " >> /minizinc/solver && \
93+
echo " ARGS=\"\$ARGS \$1\" " >> /minizinc/solver && \
94+
echo " ;; " >> /minizinc/solver && \
95+
echo " esac " >> /minizinc/solver && \
96+
echo " shift " >> /minizinc/solver && \
97+
echo "done " >> /minizinc/solver && \
98+
echo "if [ -z \"\$FLAGS\" ] && [ -z \"\$DATA\" ] " >> /minizinc/solver && \
99+
echo "then " >> /minizinc/solver && \
100+
echo " \$EXEC \$ARGS " >> /minizinc/solver && \
101+
echo "elif [ -n \"\$FLAGS\" ] && [ -z \"\$DATA\" ]" >> /minizinc/solver && \
102+
echo "then " >> /minizinc/solver && \
103+
echo " \$EXEC --fzn-flags \"\$FLAGS\" \$ARGS " >> /minizinc/solver && \
104+
echo "elif [ -z \"\$FLAGS\" ] && [ -n \"\$DATA\" ]" >> /minizinc/solver && \
105+
echo "then " >> /minizinc/solver && \
106+
echo " \$EXEC -D \"\$DATA\" \$ARGS " >> /minizinc/solver && \
107+
echo "else " >> /minizinc/solver && \
108+
echo " \$EXEC --fzn-flags \"\$FLAGS\" -D \"\$DATA\" \$ARGS " >> /minizinc/solver && \
109+
echo "fi " >> /minizinc/solver && \
110+
chmod a+x /minizinc/solver
111+
112+
#------------------------------------------------------------------------------#
113+
# Default solver configuration file
114+
RUN \
115+
mkdir -p /.minizinc/solvers && \
116+
echo '{' > /.minizinc/solvers/challenge.msc && \
117+
echo ' "executable": "/minizinc/solver",' >> /.minizinc/solvers/challenge.msc && \
118+
echo ' "id": "org.minizinc.mznc",' >> /.minizinc/solvers/challenge.msc && \
119+
echo ' "isGUIApplication": false,' >> /.minizinc/solvers/challenge.msc && \
120+
echo ' "mznlib": "",' >> /.minizinc/solvers/challenge.msc && \
121+
echo ' "name": "MiniZinc Challenge Solver",' >> /.minizinc/solvers/challenge.msc && \
122+
echo ' "needsSolns2Out": false,' >> /.minizinc/solvers/challenge.msc && \
123+
echo ' "stdFlags": ["-a", "-p", "-f", "-v", "-t"],' >> /.minizinc/solvers/challenge.msc && \
124+
echo ' "extraFlags": [' >> /.minizinc/solvers/challenge.msc && \
125+
echo ' ["--output-mode", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
126+
echo ' ["--output-objective", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
127+
echo ' ["--verbose", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
128+
echo ' ["-c", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
129+
echo ' ["--compile", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
130+
echo ' ["--output-fzn-to-stdout", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
131+
echo ' ["--output-ozn-to-stdout", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
132+
echo ' ["-o", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
133+
echo ' ["--free-search", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
134+
echo ' ["--fzn", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
135+
echo ' ["--output-to-file", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
136+
echo ' ["--output-fzn-to-file", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
137+
echo ' ["--ozn", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
138+
echo ' ["--output-ozn-to-file", "", "string", ""],' >> /.minizinc/solvers/challenge.msc && \
139+
echo ' ["--output-objective", "", "bool", "false"],' >> /.minizinc/solvers/challenge.msc && \
140+
echo ' ["--parallel", "", "string", ""]' >> /.minizinc/solvers/challenge.msc && \
141+
echo ' ],' >> /.minizinc/solvers/challenge.msc && \
142+
echo ' "supportsMzn": true,' >> /.minizinc/solvers/challenge.msc && \
143+
echo ' "version": "1.0.0"' >> /.minizinc/solvers/challenge.msc && \
144+
echo '}' >> /.minizinc/solvers/challenge.msc && \
145+
echo '{"tagDefaults": [["", "org.minizinc.mznc"]]}' > /.minizinc/Preferences.json
146+
147+
#------------------------------------------------------------------------------#
148+
# Entry class parameter configuration files
149+
RUN \
150+
echo '{' > /minizinc/base.mpc && \
151+
echo ' "output-mode": "dzn",' >> /minizinc/base.mpc && \
152+
echo ' "output-objective": true,' >> /minizinc/base.mpc && \
153+
echo ' "intermediate": true' >> /minizinc/base.mpc && \
154+
echo '}' >> /minizinc/base.mpc && \
155+
echo '{' > /minizinc/fd.mpc && \
156+
echo ' "param-file": "base.mpc"' >> /minizinc/fd.mpc && \
157+
echo '}' >> /minizinc/fd.mpc && \
158+
echo '{' > /minizinc/free.mpc && \
159+
echo ' "param-file": "base.mpc",' >> /minizinc/free.mpc && \
160+
echo ' "free-search": true' >> /minizinc/free.mpc && \
161+
echo '}' >> /minizinc/free.mpc && \
162+
echo '{' > /minizinc/par.mpc && \
163+
echo ' "param-file": "base.mpc",' >> /minizinc/par.mpc && \
164+
echo ' "parallel": 4' >> /minizinc/par.mpc && \
165+
echo '}' >> /minizinc/par.mpc
166+
167+
#------------------------------------------------------------------------------#
168+
# Adding MiniZinc test files
169+
170+
RUN \
171+
echo "int: a;" > /minizinc/test.mzn && \
172+
echo "var 1..100: x;" >> /minizinc/test.mzn && \
173+
echo "constraint a <= x /\ x < 2*a; " >> /minizinc/test.mzn && \
174+
echo "solve :: int_search([x], input_order, indomain_min, complete)" >> /minizinc/test.mzn && \
175+
echo " maximize x;" >> /minizinc/test.mzn && \
176+
echo "a = 2;" > /minizinc/2.dzn
177+
178+
#------------------------------------------------------------------------------#
179+
# Setup of the base image
180+
181+
# Get base image with Ubuntu 24.04
182+
FROM minizinc/minizinc:2.9.4-noble
183+
184+
# Copy unpacked MiniZinc installation from the build image
185+
COPY --from=builder /minizinc /minizinc
186+
COPY --from=builder /.minizinc /root/.minizinc
187+
188+
# Create folder for the solver submission, link solver MiniZinc library,
189+
# remove bundled solver configuration files
190+
RUN mkdir /entry_data \
191+
&& mkdir /entry_data/mzn-lib \
192+
&& ln -s /entry_data/mzn-lib /usr/local/share/minizinc/exec \
193+
&& rm /usr/local/share/minizinc/solvers/*.msc
194+
195+
#------------------------------------------------------------------------------#
196+
# Environment Variables
197+
198+
# Add FlatZinc solver absolute path
199+
ENV FZNEXEC="/entry_data/fzn-exec"
200+
201+
# Add MiniZinc's binary path to PATH
202+
ENV PATH="/minizinc:${PATH}"
203+
204+
#------------------------------------------------------------------------------#
205+
# Setup Working Directory
206+
207+
WORKDIR /minizinc
208+

src/components/AnnouncementBanner.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { Container } from '@/components/Container'
22
import { faAward } from '@fortawesome/free-solid-svg-icons'
33
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
44
import { Link } from '@/components/Link'
5-
import { resultsAnnouncement } from '@/data/challenge/banners'
5+
import { problemCall } from '@/data/challenge/banners'
66

77
import clsx from 'clsx'
88

99
export function AnnouncementBanner({ className, ...props }) {
10-
const announcement = resultsAnnouncement
10+
const announcement = problemCall
1111
return (
1212
<section
1313
id="announcement-banner"

src/data/challenge/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ export const globals = ((problems) => {
5252
/**
5353
* The current MiniZinc Challenge year
5454
*/
55-
export const current = 2025
55+
export const current = 2026

src/data/challenge/info.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,42 @@
11
import { Link } from '@/components/Link'
22

33
export const info = {
4+
2026: (() => {
5+
const problemSubmissionDeadline = 'Fri, 24 April 2026'
6+
return {
7+
announcements: [
8+
<>
9+
<strong>2025-01-19</strong> Official{' '}
10+
<Link href="/challenge/2026/call_for_problems">
11+
Call for Problems
12+
</Link>{' '}
13+
for the MiniZinc Challenge.
14+
</>,
15+
],
16+
problemSubmissionDeadline,
17+
minizinc: '2.9.4',
18+
dates: [
19+
<>
20+
Registration opens: <strong>Now</strong>.
21+
</>,
22+
<>
23+
Problem submission deadline:
24+
<strong>{problemSubmissionDeadline}</strong>.
25+
</>,
26+
<>
27+
Solver submission begins: <strong>Mon, 4 May 2026</strong>.
28+
</>,
29+
<>
30+
Solver submission deadline: <strong>Fri, 19 June 2026</strong>.
31+
</>,
32+
<>
33+
Announcement of results at{' '}
34+
<Link href="https://cp2026.a4cp.org/">CP2026</Link>:{' '}
35+
<strong>20 - 23 July 2026</strong> (Lisbon, Portugal).
36+
</>,
37+
],
38+
}
39+
})(),
440
2025: (() => {
541
const problemSubmissionDeadline = 'Fri, 6 June 2025'
642
return {

0 commit comments

Comments
 (0)