Το pdp-archive είναι σελίδα με στόχο την συλλογή εκφωνήσεων, testcases, λύσεων και κωδίκων για τους πανελλήνιους διαγωνισμούς πληροφορικής από τον 22ο και έπειτα, όπου και πρωτοεισήχθη το Hellenico. Οι εκφωνήσεις, τα testcases και οι κώδικες υπάρχουν ήδη σε αυτό τον φάκελο. Επομένως, μένει η συγγραφή (υψηλής ποιότητας) λύσεων για τα θέματα του διαγωνισμού.
Μπορείτε να συνεισφέρετε με οποιοδήποτε από τα εξής:
- Συγγραφή λύσεων για κάποιο πρόβλημα. Στοχεύουμε για λύσεις που εξηγούν τις βέλτιστες λύσεις και παραδίδουν ενδεικτικούς κώδικες που τις υλοποιούν. Πολύ συχνά βοηθάει η εξήγηση λιγότερο αποδοτικών λύσεων. Σημείωση: Οι λύσεις δεν χρειάζεται να εξηγούν όλους τους γνωστούς αλγόριθμους που χρησιμοποιούν, αλλά θα πρέπει να δίνουν τα σωστά ονόματα ώστε να τους βρει κάποιους (ή μπορείτε να γράψετε ένα άρθρο στον Καλλίνικο).
- Μεταφορά εκφωνήσεων από pdf σε αρχεία markdown. Αυτό βοηθάει στο εξής:
- Είναι δυνατόν να διορθώσουμε πιθανά λάθη (ορθογραφικά ή και πιο σοβαρά).
- Είναι δυνατόν να προσθέσουμε πράγματα που λείπουν (πχ memory constraints).
- Είναι πιο εύκολο να τα μεταφέρουμε σε κάποιο άλλο format (πχ LaTeX ή για κάποιον grader).
- Εντοπισμός και διόρθωση λαθών σε εκφωνήσεις και λύσεις.
Οι λύσεις είναι γραμμένες σε markdown που είναι μία πολύ απλή γλώσσα για μορφοποίηση κειμένων (δείτε εντολές εδώ). Μπορείτε να γράψετε μαθηματικά ανάμεσα σε $$
(δείτε εδώ για σύμβολα).
Αν οποιεσδήποτε από τις παρακάτω οδηγίες δεν δουλέψουν για εσάς, δημιουργήστε ένα καινούργιο issue. Ακόμα καλύτερα, αν ξέρετε τι φταίει, διορθώστε τις οδηγίες.
- Ακολουθήστε τα βήματα για την εγκατάσταση του Jekyll (και της Ruby) εδώ. Επιλέξτε το άρθρο ανάλογα με το λειτουργικό σύστημα που έχετε.
- Κάντε clone αυτό το repository σας στον υπολογιστή σας. (Αν τώρα ξεκινάτε με το GitHub, δείτε αυτό.) Το μόνο που χρειάζεται να μάθετε είναι τι σημαίνει clone, commit, pull και merge)
- Πηγαίνετε στο τοπικό directory που κάνατε clone το repository.
- Τρέξτε τις εντολές
gem update --system
καιbundle update --bundler
. - Τρέξτε την εντολή
bundle exec jekyll serve
για να προβάλετε το site από τον υπολογιστή σας. Μερικές επιπλέον χρήσιμες παράμετροι στην εντολή αυτή:--incremental
για γρηγορότερη μεταγλώττιση του site στις αλλαγές των αρχείων σας και--host=0.0.0.0
για πρόσβαση μέσω browser από όλο το LAN. - Πηγαίνετε στην σελίδα
localhost:4000
(ήip_address:4000
) στον browser σας για να δείτε το site. - Κάθε αλλαγή που κάνετε θα ανανεώνεται το site.
- Για να το σταματήσετε πατήστε
Ctr+C
και μετάY
.
Ακολουθήστε τα εξής βήματα:
-
Προσθέστε στο
_config.yml
ένα καινούργιο collection με τις default μεταβλητές (ή απλά ξεκινήστε αντιγράφοντας αυτά των άλλων διαγωνισμών). Την ίδια διαδικασία, στο ίδιο αρχείο, κάνουμε και για αυτά που υπάρχουν κάτω από τη γραμμή που γράφειdefaults:
-
Δημιουργήστε ένα data αρχείο στο
_data/contests/ΧΧ-PDP.yml
-
Δημιουργήστε το
contests/_ΧΧ-PDP/index.md
με μόνο τα εξής:--- contest_no: XX layout: summary ---
-
Ελέγξτε ότι στο
localhost:4000/XX-PDP
εμφανίζεται μία σελίδα χωρίς προβλήματα. Μπορεί να πρέπει να σταματήσετε τοbundle exec jekyll serve
και να το ξανατρέξετε.
Δείτε ένα παράδειγμα commit.
Ακολουθήστε τα εξής βήματα:
-
Βρείτε το αρχείο
_data/contests/ΧΧ-PDP.yml
. Αυτό περιέχει όλα τα προβλήματα για έναν διαγωνισμό. -
Δημιουργήστε μία καινούργια εισαγωγή με την εξής δομή: (Δείτε αυτόν τον φάκελο για εκφωνήσεις, κώδικες και testcases)
{codename - Το όνομα του αρχείου ειδόδου.}: full_name: {Γράψτε ολόκληρο τον τίτλο του προβλήματος. Κεφαλαία μόνο στην πρώτη λέξη και σε όσες χρειάζονται.} stage: {Οποιαδήποτε από "a", "bgym", "blyk", "c", "camp_j", "camp_s", "camp_c"} statement_pdf_url: {Link στo pdf της επίσημης εκφώνησης.} testcases_url: {Link στο zip με τα testcases.} solution: false solution_author: {Συγγραφείς της λύσης χωρισμένοι με κόμμα, π.χ. "Ονοματεπώνυμο1 [, Ονοματεπώνυμο2]"} codes_in_git: false solution_tags: {Λίστα με tags για τις λύσεις του προβλήματος, πχ ["binary search", "two pointers"]} {optional} points: {Για πόσους πόντους μετρούσε αυτό το πρόβλημα στον διαγωνισμό (κυρίως για 3η φάση).} on_judge: {false, αν το πρόβλημα δεν υπάρχει στον judge.}
-
Ελέγξτε ότι εμφανίζεται το πρόβλημα στο
localhost:4000/XX-PDP
. (Για να δείτε την αλλαγή, μπορεί να πρέπει να ανανεώσετε τοcontests/_ΧΧ-PDP/index.md
, πχ σβήνοντας έναν χαρακτήρα, αποθηκεύοντας και ξαναβάζοντας τον χαρακτήρα και ξανααποθηκεύοντας)
Δείτε ένα παράδειγμα commit.
Για να προσθέσετε κώδικα και να ελέγξετε ότι περνάει τα testcases, ακολουθήστε τις οδηγίες στο _includes/source_code/README.md
. Αφού προσθέσετε την πρώτη λύση, αλλάξτε το codes_in_git: true
στο αντίστοιχο _data/contests/ΧΧ-PDP.yml
.
Ακολουθήστε τα εξής βήματα:
-
Βεβαιωθείτε ότι έχετε προσθέσει το πρόβλημα για το οποίο θα προσθέσετε λύση (δείτε εδώ).
-
Βρείτε την εισαγωγή για το πρόβλημα στο _data/contests/ΧΧ-PDP.yml.
-
Αλλάξτε τη μεταβλητή
solution: false
σεsolution: true
. -
Στον φάκελο
contests/_XX-PDP
δημιουργήστε το αρχείο{φάση}-{codename}-solution.md
(πχc-dnaseq-solution.md
). -
Ξεκινήστε το αρχείο με
--- layout: solution codename: {codename προβλήματος} ---
-
Γράψτε την λύση.
Δείτε ένα παράδειγμα commit.
Σημείωση: Αφού προσθέσετε τον κώδικα (ακολουθώντας τις οδηγίες εδώ), μπορείτε να βάλετε κομμάτια του κώδικα κατευθείαν στη λύση σας με την εντολή: {% include code.md solution_name='my_solution.cc' start=5 end=7 %}
(ή χωρίς το start
και end
για να το βάλετε ολόκληρο). Έτσι αποφεύγετε να έχετε τον κώδικα σε δύο μέρη. (Βεβαιωθείτε ότι ο κώδικας δεν έχει {%
, {{
, %}
)
Ακολουθήστε τα εξής βήματα:
-
Βεβαιωθείτε ότι έχετε προσθέσει το πρόβλημα για το οποίο θα προσθέσετε την εκφώνηση (δείτε εδώ).
-
Βρείτε την εισαγωγή για το πρόβλημα στο
_data/contests/ΧΧ-PDP.yml
. -
Προσθέστε το
statement_md: true
. -
Στον φάκελο
contests/_XX-PDP
δημιουργήστε το αρχείο{φάση}-{codename}-statement.md
(πχc-dnaseq-statement.md
). -
Ξεκινήστε το αρχείο με
--- layout: statement codename: {codename προβλήματος} ---
-
Γράψτε την εκφώνηση.
Δείτε ένα παράδειγμα commit.