summaryrefslogtreecommitdiffstats
path: root/inf/rtk/2021-državno/3
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xinf/rtk/2021-državno/3/a.outbin0 -> 19880 bytes
-rw-r--r--inf/rtk/2021-državno/3/prog.c38
-rw-r--r--inf/rtk/2021-državno/3/vhod.txt10
3 files changed, 48 insertions, 0 deletions
diff --git a/inf/rtk/2021-državno/3/a.out b/inf/rtk/2021-državno/3/a.out
new file mode 100755
index 0000000..00d7929
--- /dev/null
+++ b/inf/rtk/2021-državno/3/a.out
Binary files differ
diff --git a/inf/rtk/2021-državno/3/prog.c b/inf/rtk/2021-državno/3/prog.c
new file mode 100644
index 0000000..6b9a1ff
--- /dev/null
+++ b/inf/rtk/2021-državno/3/prog.c
@@ -0,0 +1,38 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <linux/limits.h> /* da bo vse skupaj bolj fancy, lahko uporabimo PATH_MAX definicijo namesto dinamičnega heap alloc */
+#include <string.h>
+int main (int argc, char ** argv) {
+ char buf[PATH_MAX+1]; /* statično alociramo buffer, to je dokaj slabo za varnost pred buffer overruns, ampak baje nam je vseen */
+ char path[PATH_MAX+1]; /* -||- za buffer za tiskanje */
+ path[0] = '\0'; /* path naj bo prazen niz */
+ int prejglob = 1; /* prejšna globina - 1 je koren shrambe */
+ while (!feof(stdin)) { /* beremo do konca */
+ fgets(buf, PATH_MAX, stdin); /* pridobimo vrstico iz standardnega vhoda */
+ char * cp = strrchr(buf, ' '); /* najdemo zadnji presledek v njej. PAZI: moodle ima v primeru naloge presledke na koncu vrstic, to moraš zbrisati prej!!! */
+ if (!cp) /* če strrchr ni našel presledka */
+ return 0; /* končali smo */
+ int glob = strtol(cp+1, NULL, 10); /* pretvorimo globino v celo */
+ cp[0] = '\0'; /* buf je sedaj ime direktorija, odstranili smo presledek */
+ if (glob - prejglob > 1) { /* če smo preskočili direktorij */
+ fprintf(stdout, "Napaka!\n"); /* napišemo napaka */
+ return 2; /* gremo iz programa */
+ }
+ if (prejglob - glob >= 0) { /* če spremenimo trenutni direktorij ali če gremo proti korenu */
+ for (int i = 0; i <= prejglob - glob; i++) { /* zbrišemo toliko iz trenutne poti, da bomo lahko pripopali direktorij */
+ char * ck = strrchr(path, '/'); /* dobimo torej poševnico */
+ if (!ck) /* če je ni, smo morebiti na začetku programa */
+ ck = path; /* kazalec nastavimo na prvi znak poti */
+ ck[0] = '\0'; /* odgriznemo stran toliko direktorijev, da bomo kasneje pripopali buf in pristali na pravilnem direktoriju */
+ }
+ strcat(path, "/"); /* dodamo poševnico */
+ strcat(path, buf); /* dodamo direktorij */
+ } else { /* gremo stran od korena, vstopamo v direktorij */
+ strcat(path, "/"); /* dodamo poševnico */
+ strcat(path, buf); /* dodamo ime direktorija */
+ }
+ fprintf(stdout, "%s\n", path); /* never ever zaupaj uporabniškemu vnosu kot print format */
+ prejglob = glob; /* prejšnjo globino nastavimo na trenutno in gremo na začetek loopa */
+ }
+ return 0; /* vrnemo se iz programa */
+}
diff --git a/inf/rtk/2021-državno/3/vhod.txt b/inf/rtk/2021-državno/3/vhod.txt
new file mode 100644
index 0000000..075806c
--- /dev/null
+++ b/inf/rtk/2021-državno/3/vhod.txt
@@ -0,0 +1,10 @@
+bin 1
+inc 1
+boost 2
+logic 3
+math 3
+net 2
+lib 1
+gcc 2
+nginx 2
+modules 3