Repozitorij s rješenjima za Advent of Code izazove, implementiranim u PL/I programskom jeziku.
Ovaj repozitorij sadrži moja rješenja za Advent of Code izazove, napisana u PL/I-u - programskom jeziku koji se tradicionalno koristi u mainframe okruženjima. Svako rješenje je potpuno dokumentirano s detaljnim objašnjenjima algoritama i logike.
.
├── [source/](source/)
│ ├── [2024/](source/2024/) # Rješenja za 2024. godinu
│ └── [2025/](source/2025/) # Rješenja za 2025. godinu
└── [documentation/](documentation/) # Detaljne dokumentacije
├── [2024/](documentation/2024/)
└── [2025/](documentation/2025/)
| Dan | Naziv | Opis | Dokumentacija |
|---|---|---|---|
| 01 | Location Lists | Usporedba i sortiranje lista brojeva, izračun similarity score-a | - |
| 02 | Safe Reports | Analiza stabilnosti nizova s "Problem Dampener" algoritamom | - |
| 04 | Word Search | 2D pretraga riječi u svim smjerovima (vodoravno, okomito, dijagonalno) | - |
| 05 | Page Ordering | Validacija i sortiranje redoslijeda prema pravilima | 📄 |
| 06 | Guard Patrol | Simulacija kretanja i detekcija petlji u 2D mreži | 📄 |
| 07 | Bridge Calibration | Kombinatorika operatora (+, *, ||) za postizanje ciljne vrijednosti | 📄 |
| 08 | Antinode Detection | Geometrijska analiza pozicija antena i njihovih antinoda | 📄 |
| 09 | Disk Fragmenter | Simulacija disk kompaktiranja i checksum kalkulacija | 📄 |
| 10 | Hiking Trails | Rekurzivna pretraga hiking trail-ova na topografskoj mapi | 📄 |
| Dan | Naziv | Opis | Dokumentacija |
|---|---|---|---|
| 01 | Circular Navigation | Kretanje po kružnoj listi s brojenjem prelaska nule | - |
| 02 | Repeating IDs | Validacija ponavljajućih ID sekvenci s dva različita kriterija | 📄 |
| 03 | Digit Selection | Greedy algoritam za pronalazak najvećeg 12-cifrenog broja | - |
| 04 | Roll Analysis | Analiza i iterativno uklanjanje rola u grid strukturi | 📄 |
| 05 | Fresh Ingredients | Spajanje preklapajućih raspona i validacija svježih namirnica | 📄 |
Svaki kompleksniji program ima detaljnu dokumentaciju koja uključuje:
- Pregled programa - svrha i cilj
- Deklaracije varijabli - objašnjenje svih korištenih varijabli
- Strukture podataka - nizovi, matrice, strukture
- Algoritmi - detaljno objašnjenje logike s pseudokodom
- Primjeri izvođenja - step-by-step demonstracije
- Optimizacije - usporedbe prije/poslije sa analizom performansi
- Kompleksnost - vremenska i prostorna analiza
- Rekurzivne procedure - za pretragu putanja i stabala
- Bitovne operacije - za kombinatoriku i optimizaciju memorije
- 2D/3D nizovi - za reprezentaciju mreža i mapa
- String manipulacija - parsing i transformacije
- Sortiranje - Bubble Sort, QuickSort
- Depth-First Search (DFS) - za pretragu grafova
- Greedy algoritmi - za optimizacijske probleme
- Interval merging - spajanje preklapajućih raspona
- Delta koordinate - optimizirano brojanje susjeda u grid strukturama
/* Deklaracija datoteka */
DCL INFL FILE RECORD INPUT;
/* Strukture */
DCL 1 FOUND_NINES(500),
2 X FIXED BINARY(31),
2 Y FIXED BINARY(31);
/* Rekurzivne procedure */
FIND_PATH: PROCEDURE(MAP, X, Y, Z) RECURSIVE;
/* Bitovne varijable */
DCL VISITED(130,130) BIT(1) INIT((130*130)'0'b);
/* Procedure s povratnom vrijednošću */
IS_REPEATING: PROCEDURE(S, MIN_REPS) RETURNS(BIT(1));
/* Delta petlje za grid pretragu */
DO DX = -1 TO 1;
DO DY = -1 TO 1;
IF DX = 0 & DY = 0 THEN ITERATE;
/* Obrada susjeda */
END;
END;
- Ukupno programa: 15
- Redaka koda: ~3000+
- Dokumentacija: 9 detaljnih dokumenata
- Algoritmi: DFS, BFS, Greedy, Interval Merging, Pattern Matching
Ovaj repozitorij je izvrstan resurs za učenje:
- PL/I sintakse i idioma
- Mainframe programiranja
- Algoritamskog razmišljanja
- Rješavanja problema s ograničenjima
- Optimizacijskih tehnika - od O(n²) do O(n log n)
- Grid i matričnih operacija
- Parsiranja i obrade podataka
- Inline parsing - eliminacija nepotrebnih poziva procedura
- Streaming obrada - procesiranje podataka bez potpunog učitavanja u memoriju
- Delta pristup - univerzalno rješenje za grid susjede umjesto 84 IF bloka
- Interval merging - spajanje preklapajućih raspona za efikasnu validaciju
- Rani izlaz -
GO TOza optimizirani execution path - DRY princip - eliminacija dupliciranog koda kroz procedure
Primjeri ubrzanja kroz optimizacije:
- AD02PLI: 40% brže parsiranje kroz inline konverziju
- AD04PLI: ~70 linija koda smanjeno na ~40 eliminacijom rubnih slučajeva
- AD05PLI: 18× brže provjere kroz interval merging (10,000 vs 186,000 provjera)
- Svi programi su testirani s Advent of Code službenim inputima
- Dokumentacija je na hrvatskom jeziku
- Kod slijedi PL/I najbolje prakse i standarde
- Posebna pažnja posvećena čitljivosti i održavanju koda
- Svaka optimizacija dokumentirana s analizom prije/poslije