summaryrefslogtreecommitdiffstats
path: root/inf/rtkš/2.c
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2023-01-27 15:55:37 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2023-01-27 15:55:37 +0100
commite1ca97ded1258fea7c5cef33b35a318c72b41836 (patch)
treece02977031891257e44500ce6a724706ada81b6f /inf/rtkš/2.c
parentMerge branch 'master' of ssh://ni.sijanec.eu/var/lib/git/sijanec/sola-gimb-4 (diff)
downloadsola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.tar
sola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.tar.gz
sola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.tar.bz2
sola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.tar.lz
sola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.tar.xz
sola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.tar.zst
sola-gimb-4-e1ca97ded1258fea7c5cef33b35a318c72b41836.zip
Diffstat (limited to 'inf/rtkš/2.c')
-rw-r--r--inf/rtkš/2.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/inf/rtkš/2.c b/inf/rtkš/2.c
new file mode 100644
index 0000000..63f0953
--- /dev/null
+++ b/inf/rtkš/2.c
@@ -0,0 +1,58 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#define MIN(a,b) ((a) > (b) ? (b) : (a))
+#define MAX(a,b) ((a) < (b) ? (b) : (a))
+struct stolpec {
+ int položaj;
+ int višina;
+ int izmeril;
+};
+int primerjaj_stolpca (const void * a, const void * b) {
+ const struct stolpec * c = (const struct stolpec *) a;
+ const struct stolpec * d = (const struct stolpec *) b;
+ return d->višina - c->višina;
+}
+void natisni (int n, const struct stolpec * s) {
+ for (int i = 0; i < n; i++) {
+ printf("%d: ", s[i].položaj);
+ for (int j = 0; j < s[i].višina; j++)
+ printf("@");
+ printf("\n");
+ }
+}
+int voda (int n, struct stolpec * s) {
+ struct stolpec razv[n];
+ memcpy(razv, s, n*sizeof *s);
+ qsort(razv, n, sizeof *s, primerjaj_stolpca);
+ natisni(n, s);
+ printf("---------\n");
+ natisni(n, razv);
+ int povr = 0;
+ for (int i = 0; i < n-1; i++) {
+ int max_pol = MAX(razv[i].položaj, razv[i+1].položaj);
+ int min_pol = MIN(razv[i].položaj, razv[i+1].položaj);
+ if (max_pol - min_pol > 1) {
+ printf("med stoplcema z indeksoma %d in %d\n", min_pol, max_pol);
+ for (int j = min_pol+1; j < max_pol; j++) {
+ if (s[j].izmeril)
+ continue;
+ int tapovr = razv[i+1].višina - s[j].višina;
+ if (tapovr > 0)
+ povr += tapovr;
+ s[j].izmeril++;
+ printf("izmeril stoplec indeks %d - povr je %d ... min_viš je %d, s[j].višina je %d\n", j, povr, razv[i+1].višina, s[j].višina);
+ }
+ }
+ }
+ return povr;
+}
+int main (int argc, char ** argv) {
+ int n = argc-1;
+ struct stolpec * stolpci = calloc(n, sizeof *stolpci);
+ for (int i = 0; i < n; i++) {
+ stolpci[i].položaj = i;
+ stolpci[i].višina = atoi(argv[i+1]);
+ }
+ return voda(n, stolpci);
+}