From 5323d551cf55f4bbe5502784533cf912a93f0567 Mon Sep 17 00:00:00 2001 From: sijanec Date: Thu, 3 Dec 2020 12:20:04 +0100 Subject: naredil 8. nalogo eulerja --- mat/euler/8/Makefile | 2 ++ mat/euler/8/a.out | Bin 0 -> 12872 bytes mat/euler/8/prog.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ mat/euler/8/prog.py | 36 ++++++++++++++++++++++++ mat/euler/8/stevilka.txt | 20 +++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 mat/euler/8/Makefile create mode 100755 mat/euler/8/a.out create mode 100644 mat/euler/8/prog.c create mode 100755 mat/euler/8/prog.py create mode 100644 mat/euler/8/stevilka.txt 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 Binary files /dev/null and b/mat/euler/8/a.out 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 +#include +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 < 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 -- cgit v1.2.3