summaryrefslogtreecommitdiffstats
path: root/mat/euler/8
diff options
context:
space:
mode:
Diffstat (limited to 'mat/euler/8')
-rw-r--r--mat/euler/8/Makefile2
-rwxr-xr-xmat/euler/8/a.outbin0 -> 12872 bytes
-rw-r--r--mat/euler/8/prog.c71
-rwxr-xr-xmat/euler/8/prog.py36
-rw-r--r--mat/euler/8/stevilka.txt20
5 files changed, 129 insertions, 0 deletions
diff --git a/mat/euler/8/Makefile b/mat/euler/8/Makefile
new file mode 100644
index 0000000..2def8af
--- /dev/null
+++ b/mat/euler/8/Makefile
@@ -0,0 +1,2 @@
+default:
+ gcc prog.c
diff --git a/mat/euler/8/a.out b/mat/euler/8/a.out
new file mode 100755
index 0000000..1619770
--- /dev/null
+++ b/mat/euler/8/a.out
Binary files differ
diff --git a/mat/euler/8/prog.c b/mat/euler/8/prog.c
new file mode 100644
index 0000000..ec68042
--- /dev/null
+++ b/mat/euler/8/prog.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+int usint_array_print (unsigned short int * b, size_t a, FILE * f) {
+ fprintf(f, "{ ");
+ for (size_t j = 0; j < a; j++) // ob !zadnjem natisnemo še ", ".
+ fprintf(f, "%d%s", b[j], (j == a-1) ? "" : ", ");
+ fprintf(f, " }");
+ return 0;
+}
+int usint_array_shift (unsigned short int * b, const size_t a) {
+ if (b == NULL) { // 0,1,2,3,4,5,6 >> 1,2,3,4,5,6,6
+ fprintf(stderr, "usodna napaka v usint_array_shift: array je NULL! ignoriram napako in nadaljujem.\n");
+ return 1;
+ }
+ for (int i = 0; i < a; i++)
+ b[i] = b[i+1]; // kot vidimo, bo ostal zadnji element na svojem mesto, a bo prekopiran na
+ return 0; // predzadnje mesto vseeno. zadnji element potem na nekaj nastavimo.
+}
+unsigned long long int usint_array_factor (unsigned short int * b, const size_t a) {
+ unsigned long long int s = 1;
+ if (b == NULL) {
+ fprintf(stderr, "usodna napaka v usint_array_factor: array je NULL! ignoriram napako in nadaljujem.\n");
+ return 1;
+ }
+ for (int i = 0; i < a; i++)
+ s = s*b[i];
+ return s;
+}
+int main (int argc, char ** argv) {
+ if (argc != 1+1) {
+ fprintf(stderr, "uporaba: %s <dolzina> < stevilka.txt\nprogram v stdin dobi zelo dolgo številko, če jo tipkate na roke, končajte s Ctrl+D. dolzina je dolzina niza številk, ki ga naj najde program kot najdaljši produkt v tem dolgem številu\nprimer: %s 13 < ./stevilka.txt\n", argv[0], argv[0]);
+ return 1;
+ }
+ size_t i = 0;
+ size_t j = 0;
+ const size_t a = atoi(argv[1]);
+ unsigned short int * b = malloc(sizeof(unsigned short int)*a);
+ unsigned long long int s = 0;
+ char c = fgetc(stdin);
+ if (c == EOF) {
+ fprintf(stderr, "NI VNOSA, takoj našel EOF!\n");
+ return 2;
+ }
+ while (c != EOF) {
+ if (c - '0' < 0 || c - '0' > 9) // takole pretvorimo ASCII char v int (:
+ goto dobil_nestevilcni_znak;
+ usint_array_shift(b, a);
+ b[a-1] = c - '0';
+ i++;
+ if (i >= a) { // smo že vnesli a znakov
+ // usint_array_print(b, a, stderr); // debug
+ // fprintf(stderr, " %lld\n", usint_array_factor(b, a));
+ if (usint_array_factor(b, a) > s) { // če je to večji faktor od trenutnega
+ s = usint_array_factor(b, a);
+ fprintf(stdout, "našel novo največje zaporedje: ");
+ for (j = 0; j < a; j++) // ob !zadnjem natisnemo še ", ".
+ fprintf(stdout, "%d%s", b[j], (j == a-1) ? "" : ", ");
+ fprintf(stdout, ", zmnožek: %lld\n", s);
+ }
+ }
+ dobil_nestevilcni_znak:
+ c = fgetc(stdin);
+ }
+ if (i < a) { // i je tukaj število obdelanih znakov
+ fprintf(stderr, "VNOS PREKRATEK, pred %ld znaki našel EOF!\n", a);
+ return 3;
+ }
+ free(b);
+ b = NULL;
+ return 0;
+}
diff --git a/mat/euler/8/prog.py b/mat/euler/8/prog.py
new file mode 100755
index 0000000..b22756c
--- /dev/null
+++ b/mat/euler/8/prog.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+"""
+To ni moj program. To je program helpful sošolca, s pomočjo katerega sem izvedel, da 23 milijard velika številka NE paše v unsigned int.
+"""
+problem = """The four adjacent numbers in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.
+
+7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
+
+Find the thirteen adjacent list in the 1000-digit number that have the greatest product. What is the value of this product?"""
+
+Process = """
+1. """
+
+num = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
+
+y = list(num)
+
+def Multi(k) :
+ f = [int(n) for n in k]
+ prod = 1
+ for a in f :
+ prod = prod * a
+ return prod
+
+def productFinder (z) :
+ max_product = 0
+ for n in range (987) :
+ subset = z[n : n + 13]
+ product = Multi(subset)
+ if product > max_product :
+ print(subset)
+ max_product = product
+ return max_product
+
+
+print(productFinder(y))
diff --git a/mat/euler/8/stevilka.txt b/mat/euler/8/stevilka.txt
new file mode 100644
index 0000000..dfd9153
--- /dev/null
+++ b/mat/euler/8/stevilka.txt
@@ -0,0 +1,20 @@
+73167176531330624919225119674426574742355349194934
+96983520312774506326239578318016984801869478851843
+85861560789112949495459501737958331952853208805511
+12540698747158523863050715693290963295227443043557
+66896648950445244523161731856403098711121722383113
+62229893423380308135336276614282806444486645238749
+30358907296290491560440772390713810515859307960866
+70172427121883998797908792274921901699720888093776
+65727333001053367881220235421809751254540594752243
+52584907711670556013604839586446706324415722155397
+53697817977846174064955149290862569321978468622482
+83972241375657056057490261407972968652414535100474
+82166370484403199890008895243450658541227588666881
+16427171479924442928230863465674813919123162824586
+17866458359124566529476545682848912883142607690042
+24219022671055626321111109370544217506941658960408
+07198403850962455444362981230987879927244284909188
+84580156166097919133875499200524063689912560717606
+05886116467109405077541002256983155200055935729725
+71636269561882670428252483600823257530420752963450