Contest
week-01 · tasks & rules
Open any row for the full spec, examples, and what the grader checks.
All tasks
| # | Task | Submit as | Pts |
|---|---|---|---|
| 1 | Task 01 — Find large files partial | 01.sh | 7 |
| 2 | Task 02 — Count unique IPv4 addresses partial | 02.sh | 7 |
| 3 | Task 03 — Replace tabs with 4 spaces, recursively | 03.sh | 7 |
| 4 | Task 04 — Rename `*.txt` to `*.md` | 04.sh | 7 |
| 5 | Task 05 — Parse JSON with `jq` partial | 05.sh | 9 |
| 6 | Task 06 — Retry with exponential backoff | 06.sh | 10 |
| 7 | Task 07 — systemd timer for Hello World partial | 07.service + 07.timer | 9 |
| 8 | Task 08 — nginx reverse-proxy with X-Powered-By header | 08.conf + server { … } + nginx.conf | 9 |
| 9 | Task 09 — Self-signed cert + nginx HTTPS on :8443 partial | 09.sh | 10 |
| 10 | Task 10 — Disk usage, top 10 directories | 10.sh | 8 |
| 11 | Task 11 — List running systemd services | 11.sh | 7 |
| 12 | Task 12 (Bonus) — `todo` CLI in pure bash partial | 12-todo/todo.sh + 12-todo/ | 10 |
How to play
curl -fsSL https://csot-devops.devclub.in/install.sh | bash
csot login
mkdir solutions && $EDITOR solutions/01.sh
csot submit ./solutions # all 12 tasks
csot submit ./solutions -t 07 # only task 07
csot submit ./07.service -t 07 # single-file submit
csot submit ./solutions -t 08
csot history
csot show <attempt-id> -t 08
csot leaderboard
csot leaderboard --weekly
csot update
Full CLI reference: csot submit --help or the repo at github.com/3x3cu73/csot-devops.
Task specs
Every task page documents Submit as, Input, Output (stdout/stderr/exit code and side effects where relevant), Example, and What the grader checks. Open the spec before coding so you match the exact format.
Use the All tasks table above for titles, submit paths, and max points. Tasks marked partial award marks step-by-step when the grader runs; the CLI shows PART with got/max per task.
Rules
- Window: open/close times on the Instructions page
- Rate limit: 5 submissions/minute, 100 submissions/contest
- Submission size: ≤ 1 MB, ≤ 50 files
- Per-task timeout: 30 s inside the grader sandbox
- Privacy: your code is uploaded only to the contest server. Other students never see it.
Sandbox
Every submission is graded inside a fresh container with --network=none --memory=512m
--cpus=1 --pids-limit=200 --read-only --cap-drop=ALL --security-opt=no-new-privileges --user 1000:1000.
Your script's stdout/stderr are captured per task. The CLI prints a summary table, then
Logs by default (OK lines on pass, full output under Why it failed: on fail).
With -t, only that task's log block is shown.
Code of honour
Solve them yourself. Man pages, blog posts, AI assistance — all fine. Copy-pasting
another student's 02.sh is not. Plagiarism zeroes your score.
Scoring & penalties
Standing score
Your leaderboard score is the sum of your best mark on each task across all graded submissions — not your best single upload:
score = Σ (best points on task T)
Example: best on task 07 = 9 and best on task 02 = 7 gives a score of 16, even if you submitted many times. Week 1 totals 100 points across 12 tasks.
Partial marks
Many tasks award credit in chunks (CLI shows PART with got/max).
Your standing uses the best partial or full score per task.
Task 12 (todo CLI) is worth 10 points with four graded steps.
Penalties (tie-break only)
Penalties never subtract points. They break ties when two players have the same score. For each task T, penalty on T = max(0, penalty_runs_on_T − 1):
| Penalty runs on T | Penalty |
|---|---|
| 1st | 0 |
| 2nd | 1 |
| 3rd | 2 |
| … | runs − 1 |
What counts as a penalty run:
csot submit ./solutions -t 07— every graded run on task 07 counts.- Full-folder submit — counts only when the task file was present and you had not already reached full marks on that task before this submission. Missing files and already-perfect tasks are ignored.
- Skipped tasks (partial submit filter) and identical re-uploads (deduped) never count.
Tie-break order
Higher score → fewer total penalties → earlier last graded submission.