Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ jobs:
# A pandoc/xelatex failure can still leave a stub PDF behind.
- name: Check PDFs
run: |
# The runner image can ship a stale package index (404s on superseded versions).
sudo apt-get update -qq >/dev/null
sudo apt-get install -y -qq poppler-utils >/dev/null
for f in build/*.pdf; do
pages=$(pdfinfo "$f" | awk '/^Pages:/ {print $2}')
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<a href="downloads/study.pdf">Ολόκληρος ο οδηγός (PDF)</a>
<a href="downloads/study-md.zip">Ολόκληρος ο οδηγός (Markdown)</a>
<a href="questions/">Τράπεζα ασκήσεων</a>
<a href="questions/exam-questions.html">Θέματα εξετάσεων</a>
<a href="glossary.html">Γλωσσάριο</a>
<a href="https://github.com/progintro/study">GitHub</a>
</p>
Expand Down
15 changes: 15 additions & 0 deletions STYLE.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ source:
chapters: [14, 12]
topics: [strings, pointers]
difficulty: 2
level: 1
type: programming
---

Expand All @@ -266,6 +267,20 @@ type: programming
primary chapter**, where most of the needed material is taught. List others only if
the question genuinely needs them.
- `difficulty`: 1 (direct application), 2 (combines ideas), 3 (exam-hard or longer).
- `level` (exam questions only, required there): where the question sits on the 1-4 exam
scale. The question's position in the exam is a strong hint, but its content decides.
`tools/gen-exercises.py` lists every exam question by level in `questions/exam-questions.md`.
1. **Short question, not a whole program:** explain or trace given code (what it prints,
what a function does), a type, operator or memory question, or a short fragment or
function. Usually the first θέματα.
2. **Simple complete program with input:** a whole program that reads its data from
stdin or argv and does simple processing on it, with one loop or a simple double loop.
Usually Θέμα 3.
3. **Data structures and dynamic memory:** a program built around a data structure
(linked lists, trees, ...) with heap allocation (`malloc`/`free`) and the pointer
handling that goes with it.
4. **The hardest θέμα:** usually the last one. Larger programs that may combine the above
with file handling or need dynamic programming or another non-obvious algorithm.
- `type` is one of:
- `programming`: write a program or function
- `short-answer`: explain or define
Expand Down
2 changes: 2 additions & 0 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ defaults:
values: {layout: question}
- scope: {path: questions/README.md}
values: {layout: default}
- scope: {path: questions/exam-questions.md}
values: {layout: default}

plugins:
- jekyll-coffeescript
Expand Down
109 changes: 109 additions & 0 deletions _data/exams.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# Generated by tools/gen-exercises.py: exam question id -> level, previous, next.
exam-2026-sep-q1: {level: 1, next: exam-2026-sep-q2}
exam-2026-sep-q2: {level: 1, prev: exam-2026-sep-q1, next: exam-2026-jun-q1}
exam-2026-jun-q1: {level: 1, prev: exam-2026-sep-q2, next: exam-2026-jun-q2}
exam-2026-jun-q2: {level: 1, prev: exam-2026-jun-q1, next: exam-2026-jan-q1}
exam-2026-jan-q1: {level: 1, prev: exam-2026-jun-q2, next: exam-2026-jan-q2}
exam-2026-jan-q2: {level: 1, prev: exam-2026-jan-q1, next: exam-2026-jan-q6}
exam-2026-jan-q6: {level: 1, prev: exam-2026-jan-q2, next: exam-2025-sep-q1}
exam-2025-sep-q1: {level: 1, prev: exam-2026-jan-q6, next: exam-2025-sep-q2}
exam-2025-sep-q2: {level: 1, prev: exam-2025-sep-q1, next: exam-2025-jan-q1}
exam-2025-jan-q1: {level: 1, prev: exam-2025-sep-q2, next: exam-2025-jan-q2}
exam-2025-jan-q2: {level: 1, prev: exam-2025-jan-q1, next: exam-2024-sep-q1}
exam-2024-sep-q1: {level: 1, prev: exam-2025-jan-q2, next: exam-2024-sep-q2}
exam-2024-sep-q2: {level: 1, prev: exam-2024-sep-q1, next: exam-2024-sep-q3}
exam-2024-sep-q3: {level: 1, prev: exam-2024-sep-q2}
exam-2026-sep-q3: {level: 2, next: exam-2026-jun-q3}
exam-2026-jun-q3: {level: 2, prev: exam-2026-sep-q3, next: exam-2026-jan-q3}
exam-2026-jan-q3: {level: 2, prev: exam-2026-jun-q3, next: exam-2025-sep-q3}
exam-2025-sep-q3: {level: 2, prev: exam-2026-jan-q3, next: exam-2025-jan-q3}
exam-2025-jan-q3: {level: 2, prev: exam-2025-sep-q3, next: exam-2024-dec-q1}
exam-2024-dec-q1: {level: 2, prev: exam-2025-jan-q3, next: exam-2024-dec-q2}
exam-2024-dec-q2: {level: 2, prev: exam-2024-dec-q1, next: exam-2024-sep-q4}
exam-2024-sep-q4: {level: 2, prev: exam-2024-dec-q2, next: exam-2024-jul-q1}
exam-2024-jul-q1: {level: 2, prev: exam-2024-sep-q4, next: exam-2024-jul-q2}
exam-2024-jul-q2: {level: 2, prev: exam-2024-jul-q1, next: exam-2023-dec-q1}
exam-2023-dec-q1: {level: 2, prev: exam-2024-jul-q2, next: exam-2023-fall-ex0-q1}
exam-2023-fall-ex0-q1: {level: 2, prev: exam-2023-dec-q1, next: exam-2023-dec-q2}
exam-2023-dec-q2: {level: 2, prev: exam-2023-fall-ex0-q1, next: exam-2023-fall-ex0-q2}
exam-2023-fall-ex0-q2: {level: 2, prev: exam-2023-dec-q2, next: exam-2023-fall-ex1-q1}
exam-2023-fall-ex1-q1: {level: 2, prev: exam-2023-fall-ex0-q2, next: exam-2023-fall-ex1-q2}
exam-2023-fall-ex1-q2: {level: 2, prev: exam-2023-fall-ex1-q1, next: exam-2023-fall-ex2-q1}
exam-2023-fall-ex2-q1: {level: 2, prev: exam-2023-fall-ex1-q2, next: exam-2023-fall-ex2-q2}
exam-2023-fall-ex2-q2: {level: 2, prev: exam-2023-fall-ex2-q1, next: exam-2023-fall-ex3-q1}
exam-2023-fall-ex3-q1: {level: 2, prev: exam-2023-fall-ex2-q2, next: exam-2023-fall-ex3-q2}
exam-2023-fall-ex3-q2: {level: 2, prev: exam-2023-fall-ex3-q1, next: exam-2023-fall-ex3-q3}
exam-2023-fall-ex3-q3: {level: 2, prev: exam-2023-fall-ex3-q2, next: exam-2023-fall-ex4-q1}
exam-2023-fall-ex4-q1: {level: 2, prev: exam-2023-fall-ex3-q3, next: exam-2023-fall-ex4-q2}
exam-2023-fall-ex4-q2: {level: 2, prev: exam-2023-fall-ex4-q1, next: exam-2023-fall-ex4-q3}
exam-2023-fall-ex4-q3: {level: 2, prev: exam-2023-fall-ex4-q2, next: exam-2023-fall-ex4-q4}
exam-2023-fall-ex4-q4: {level: 2, prev: exam-2023-fall-ex4-q3, next: exam-2023-fall-ex5-q1}
exam-2023-fall-ex5-q1: {level: 2, prev: exam-2023-fall-ex4-q4, next: exam-2023-fall-ex5-q2}
exam-2023-fall-ex5-q2: {level: 2, prev: exam-2023-fall-ex5-q1, next: exam-2023-fall-ex6-q1}
exam-2023-fall-ex6-q1: {level: 2, prev: exam-2023-fall-ex5-q2, next: exam-2023-fall-ex6-q2}
exam-2023-fall-ex6-q2: {level: 2, prev: exam-2023-fall-ex6-q1, next: exam-2023-fall-ex6-q3}
exam-2023-fall-ex6-q3: {level: 2, prev: exam-2023-fall-ex6-q2, next: exam-2023-fall-ex7-q1}
exam-2023-fall-ex7-q1: {level: 2, prev: exam-2023-fall-ex6-q3, next: exam-2023-fall-ex7-q2}
exam-2023-fall-ex7-q2: {level: 2, prev: exam-2023-fall-ex7-q1, next: exam-2023-fall-ex7-q4}
exam-2023-fall-ex7-q4: {level: 2, prev: exam-2023-fall-ex7-q2, next: exam-2023-fall-ex8-q1}
exam-2023-fall-ex8-q1: {level: 2, prev: exam-2023-fall-ex7-q4, next: exam-2023-fall-ex8-q2}
exam-2023-fall-ex8-q2: {level: 2, prev: exam-2023-fall-ex8-q1, next: exam-2023-fall-ex9-q1}
exam-2023-fall-ex9-q1: {level: 2, prev: exam-2023-fall-ex8-q2, next: exam-2023-fall-ex9-q2}
exam-2023-fall-ex9-q2: {level: 2, prev: exam-2023-fall-ex9-q1, next: exam-2023-fall-ex10-q1}
exam-2023-fall-ex10-q1: {level: 2, prev: exam-2023-fall-ex9-q2, next: exam-2023-fall-ex10-q2}
exam-2023-fall-ex10-q2: {level: 2, prev: exam-2023-fall-ex10-q1, next: exam-2023-fall-ex11-q1}
exam-2023-fall-ex11-q1: {level: 2, prev: exam-2023-fall-ex10-q2, next: exam-2023-fall-ex11-q2}
exam-2023-fall-ex11-q2: {level: 2, prev: exam-2023-fall-ex11-q1, next: exam-2023-fall-ex11-q4}
exam-2023-fall-ex11-q4: {level: 2, prev: exam-2023-fall-ex11-q2, next: exam-2023-fall-ex12-q1}
exam-2023-fall-ex12-q1: {level: 2, prev: exam-2023-fall-ex11-q4, next: exam-2023-fall-ex12-q2}
exam-2023-fall-ex12-q2: {level: 2, prev: exam-2023-fall-ex12-q1, next: exam-2023-fall-ex12-q3}
exam-2023-fall-ex12-q3: {level: 2, prev: exam-2023-fall-ex12-q2, next: exam-2023-fall-ex12-q4}
exam-2023-fall-ex12-q4: {level: 2, prev: exam-2023-fall-ex12-q3, next: exam-2023-fall-ex13-q1}
exam-2023-fall-ex13-q1: {level: 2, prev: exam-2023-fall-ex12-q4, next: exam-2023-fall-ex13-q4}
exam-2023-fall-ex13-q4: {level: 2, prev: exam-2023-fall-ex13-q1, next: exam-2023-fall-ex14-q1}
exam-2023-fall-ex14-q1: {level: 2, prev: exam-2023-fall-ex13-q4, next: exam-2023-fall-ex14-q2}
exam-2023-fall-ex14-q2: {level: 2, prev: exam-2023-fall-ex14-q1, next: exam-2023-fall-ex15-q1}
exam-2023-fall-ex15-q1: {level: 2, prev: exam-2023-fall-ex14-q2, next: exam-2023-fall-ex15-q2}
exam-2023-fall-ex15-q2: {level: 2, prev: exam-2023-fall-ex15-q1, next: exam-2023-fall-ex15-q4}
exam-2023-fall-ex15-q4: {level: 2, prev: exam-2023-fall-ex15-q2}
exam-2026-sep-q4: {level: 3, next: exam-2026-jan-q4}
exam-2026-jan-q4: {level: 3, prev: exam-2026-sep-q4, next: exam-2025-sep-q4}
exam-2025-sep-q4: {level: 3, prev: exam-2026-jan-q4, next: exam-2025-jan-q4}
exam-2025-jan-q4: {level: 3, prev: exam-2025-sep-q4, next: exam-2025-jan-q5}
exam-2025-jan-q5: {level: 3, prev: exam-2025-jan-q4, next: exam-2024-sep-q5}
exam-2024-sep-q5: {level: 3, prev: exam-2025-jan-q5, next: exam-2024-jul-q4}
exam-2024-jul-q4: {level: 3, prev: exam-2024-sep-q5, next: exam-2023-fall-ex0-q3}
exam-2023-fall-ex0-q3: {level: 3, prev: exam-2024-jul-q4, next: exam-2023-fall-ex1-q3}
exam-2023-fall-ex1-q3: {level: 3, prev: exam-2023-fall-ex0-q3, next: exam-2023-fall-ex1-q4}
exam-2023-fall-ex1-q4: {level: 3, prev: exam-2023-fall-ex1-q3, next: exam-2023-fall-ex2-q3}
exam-2023-fall-ex2-q3: {level: 3, prev: exam-2023-fall-ex1-q4, next: exam-2023-fall-ex5-q3}
exam-2023-fall-ex5-q3: {level: 3, prev: exam-2023-fall-ex2-q3, next: exam-2023-fall-ex5-q4}
exam-2023-fall-ex5-q4: {level: 3, prev: exam-2023-fall-ex5-q3, next: exam-2023-fall-ex6-q4}
exam-2023-fall-ex6-q4: {level: 3, prev: exam-2023-fall-ex5-q4, next: exam-2023-fall-ex8-q3}
exam-2023-fall-ex8-q3: {level: 3, prev: exam-2023-fall-ex6-q4, next: exam-2023-fall-ex8-q4}
exam-2023-fall-ex8-q4: {level: 3, prev: exam-2023-fall-ex8-q3, next: exam-2023-fall-ex9-q3}
exam-2023-fall-ex9-q3: {level: 3, prev: exam-2023-fall-ex8-q4, next: exam-2023-fall-ex9-q4}
exam-2023-fall-ex9-q4: {level: 3, prev: exam-2023-fall-ex9-q3, next: exam-2023-fall-ex10-q3}
exam-2023-fall-ex10-q3: {level: 3, prev: exam-2023-fall-ex9-q4, next: exam-2023-fall-ex10-q4}
exam-2023-fall-ex10-q4: {level: 3, prev: exam-2023-fall-ex10-q3, next: exam-2023-fall-ex11-q3}
exam-2023-fall-ex11-q3: {level: 3, prev: exam-2023-fall-ex10-q4, next: exam-2023-fall-ex13-q2}
exam-2023-fall-ex13-q2: {level: 3, prev: exam-2023-fall-ex11-q3, next: exam-2023-fall-ex13-q3}
exam-2023-fall-ex13-q3: {level: 3, prev: exam-2023-fall-ex13-q2, next: exam-2023-fall-ex14-q3}
exam-2023-fall-ex14-q3: {level: 3, prev: exam-2023-fall-ex13-q3, next: exam-2023-fall-ex15-q3}
exam-2023-fall-ex15-q3: {level: 3, prev: exam-2023-fall-ex14-q3}
exam-2026-sep-q5: {level: 4, next: exam-2026-jun-q4}
exam-2026-jun-q4: {level: 4, prev: exam-2026-sep-q5, next: exam-2026-jan-q5}
exam-2026-jan-q5: {level: 4, prev: exam-2026-jun-q4, next: exam-2025-sep-q5}
exam-2025-sep-q5: {level: 4, prev: exam-2026-jan-q5, next: exam-2025-jan-q6}
exam-2025-jan-q6: {level: 4, prev: exam-2025-sep-q5, next: exam-2024-dec-q3}
exam-2024-dec-q3: {level: 4, prev: exam-2025-jan-q6, next: exam-2024-dec-q4}
exam-2024-dec-q4: {level: 4, prev: exam-2024-dec-q3, next: exam-2024-sep-q6}
exam-2024-sep-q6: {level: 4, prev: exam-2024-dec-q4, next: exam-2024-jul-q3}
exam-2024-jul-q3: {level: 4, prev: exam-2024-sep-q6, next: exam-2023-dec-q3}
exam-2023-dec-q3: {level: 4, prev: exam-2024-jul-q3, next: exam-2023-dec-q4}
exam-2023-dec-q4: {level: 4, prev: exam-2023-dec-q3, next: exam-2023-fall-ex0-q4}
exam-2023-fall-ex0-q4: {level: 4, prev: exam-2023-dec-q4, next: exam-2023-fall-ex2-q4}
exam-2023-fall-ex2-q4: {level: 4, prev: exam-2023-fall-ex0-q4, next: exam-2023-fall-ex3-q4}
exam-2023-fall-ex3-q4: {level: 4, prev: exam-2023-fall-ex2-q4, next: exam-2023-fall-ex7-q3}
exam-2023-fall-ex7-q3: {level: 4, prev: exam-2023-fall-ex3-q4, next: exam-2023-fall-ex14-q4}
exam-2023-fall-ex14-q4: {level: 4, prev: exam-2023-fall-ex7-q3}
14 changes: 14 additions & 0 deletions _layouts/question.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,27 @@
<span class="lab-nav-side lab-nav-right"></span>
</nav>

{% assign exam = site.data.exams[page.id] %}
{% if exam %}
<nav class="lab-nav" aria-label="Θέματα εξετάσεων">
<span class="lab-nav-side">
{% if exam.prev %}<a href="{{ site.baseurl }}/questions/exams/{{ exam.prev }}.html" rel="prev">&larr; Προηγούμενο θέμα</a>{% endif %}
</span>
<span class="lab-nav-mid"><a href="{{ site.baseurl }}/questions/exam-questions.html#level-{{ exam.level }}">Θέματα εξετάσεων, επίπεδο {{ exam.level }}</a></span>
<span class="lab-nav-side lab-nav-right">
{% if exam.next %}<a href="{{ site.baseurl }}/questions/exams/{{ exam.next }}.html" rel="next">Επόμενο θέμα &rarr;</a>{% endif %}
</span>
</nav>
{% endif %}

{% assign ref = site.data.refs[page.id] %}
<h1>{% if ref %}{{ ref.label }} · {% endif %}{{ page.title }}</h1>

<p class="chapter-meta">
{% if page.source.url %}<a href="{{ page.source.url }}">{{ page.source.title }}</a>{% else %}{{ page.source.title }}{% endif %}
· Δυσκολία {% case page.difficulty %}{% when 1 %}★☆☆{% when 2 %}★★☆{% else %}★★★{% endcase %}
· {{ page.type }}
{% if exam %}· Επίπεδο {{ exam.level }}/4{% endif %}
{% if page.stats %}· {{ page.stats.accuracy }}% σωστές απαντήσεις ({{ page.stats.responses }} απαντήσεις στο αμφιθέατρο){% endif %}
· Κεφάλαια: {% for c in page.chapters %}<a href="{{ site.baseurl }}/chapters/{{ site.data.chapters[c] }}/">{{ c }}</a>{% unless forloop.last %}, {% endunless %}{% endfor %}
</p>
Expand Down
3 changes: 3 additions & 0 deletions questions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
(Kahoot), και ένα μόνιμο αναγνωριστικό, π.χ. `exam-2025-jan-q2`. Ο αριθμός
ακολουθεί την τρέχουσα έκδοση του οδηγού· το αναγνωριστικό δεν αλλάζει ποτέ.

Τα θέματα εξετάσεων, ταξινομημένα σε τέσσερα επίπεδα δυσκολίας, είναι και στη σελίδα
[Θέματα εξετάσεων](exam-questions.md).

Σε μορφή για εργαλεία: [`questions.json`](https://progintro.github.io/study/downloads/questions.json).

Στα θέματα της online εξέτασης Δεκεμβρίου 2023 (`exam-2023-fall-*`) ισχύει για όλες τις ασκήσεις: τα προγράμματα πρέπει να είναι ευανάγνωστα, αποδοτικά σε χώρο και χρόνο και να έχουν έξοδο ίδια με τα παραδείγματα εκτέλεσης. Για είσοδο εκτός προδιαγραφών το πρόγραμμα τερματίζει με exit code 1 και μήνυμα σφάλματος.
Expand Down
Loading
Loading