Last active
February 17, 2022 20:42
-
-
Save Alekseyyy/66acb15a39ee7916af2521e125576979 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Project Euler: Classic, "Even Fibonacci numbers" solution | |
* Implementation by A. S. "Aleksey" Ahmann <hackermaneia@riseup.net> | |
* - https://github.com/Alekseyyy | |
* | |
* Problem link: https://projecteuler.net/problem=2 | |
*/ | |
import std.stdio : writeln; | |
import std.algorithm.iteration : sum; | |
void main() { | |
int[2] fibonacci = [1, 2]; | |
int[] even_fibonacci = [2]; | |
do { | |
int fib_k = fibonacci[0] + fibonacci[1]; | |
if (fib_k % 2 == 0) | |
even_fibonacci ~= fib_k; | |
fibonacci[0] = fibonacci[1]; | |
fibonacci[1] = fib_k; | |
} while (fibonacci[0] + fibonacci[1] <= 3999999); | |
writeln(sum(even_fibonacci)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Project Euler: Classic, "10001st prime" solution | |
* Implementation by A. S. "Aleksey" Ahmann <hackermaneia@riseup.net> | |
* - https://github.com/Alekseyyy | |
* | |
* Problem link: https://projecteuler.net/problem=7 | |
* I ported some code from here: https://www.geeksforgeeks.org/python-program-for-sieve-of-eratosthenes/ | |
*/ | |
import std.stdio : writeln, printf; | |
import std.algorithm.mutation : fill; | |
int[] sieve(int n) { | |
//printf("On sieve function with n = %i\n", n); | |
bool[] bsieve = new bool[n + 1]; | |
fill(bsieve, true); | |
for (int p = 2; p * p <= bsieve.length - 1; p++) { | |
if (bsieve[p] == true) { | |
for (int i = p * p; i <= bsieve.length - 1; i += p) | |
bsieve[i] = false; | |
} | |
} | |
int[] result; | |
for (int p = 2; p <= bsieve.length - 1; p++) { | |
if (bsieve[p]) | |
result ~= p; | |
} | |
return result; | |
} | |
void main() { | |
int i = 0; | |
int[] primes; | |
do { | |
primes = sieve(i); | |
i = i + 10000; | |
} while (primes.length <= 10001); | |
writeln(primes[10000]); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Project Euler: Classic, "Largest product in a series" solution | |
* Implementation by A. S. "Aleksey" Ahmann <hackermaneia@riseup.net> | |
* - https://github.com/Alekseyyy | |
* | |
* Problem link: https://projecteuler.net/problem=8 | |
* Thanks to StackOverflowers for helping me with that code: https://stackoverflow.com/questions/68245264/inconsitent-behaviour-with-computation-of-greatest-product-given-n-adjacent-d | |
*/ | |
import std.stdio : writeln; | |
import std.array : replace; | |
import std.conv : to; | |
string number = "73167176531330624919225119674426574742355349194934 | |
96983520312774506326239578318016984801869478851843 | |
85861560789112949495459501737958331952853208805511 | |
12540698747158523863050715693290963295227443043557 | |
66896648950445244523161731856403098711121722383113 | |
62229893423380308135336276614282806444486645238749 | |
30358907296290491560440772390713810515859307960866 | |
70172427121883998797908792274921901699720888093776 | |
65727333001053367881220235421809751254540594752243 | |
52584907711670556013604839586446706324415722155397 | |
53697817977846174064955149290862569321978468622482 | |
83972241375657056057490261407972968652414535100474 | |
82166370484403199890008895243450658541227588666881 | |
16427171479924442928230863465674813919123162824586 | |
17866458359124566529476545682848912883142607690042 | |
24219022671055626321111109370544217506941658960408 | |
07198403850962455444362981230987879927244284909188 | |
84580156166097919133875499200524063689912560717606 | |
05886116467109405077541002256983155200055935729725 | |
71636269561882670428252483600823257530420752963450"; | |
void main() { | |
number = replace(number, "\n", ""); | |
long[] x = format_adjacent(number); | |
long largest_product = largestProduct(x, 13); | |
writeln(largest_product); | |
} | |
long[] format_adjacent(string number) { | |
long[] adjacent_numbers; | |
for (long i = 0; i < number.length; i++) | |
adjacent_numbers ~= to!long(number[i] - to!char("0")); | |
return adjacent_numbers; | |
} | |
long computeProduct(long[] sequence) { | |
long product = sequence[0]; | |
for (long i = 1; i < sequence.length; i++) | |
product = product * sequence[i]; | |
return product; | |
} | |
long largestProduct(long[] sequence, long slice) { | |
long largest_product = 0; | |
long n = 0; | |
long fin = to!long(sequence.length) - (slice - 1); | |
while (n < fin) { | |
long[] seq = sequence[n .. n + slice]; | |
long product = computeProduct(seq); | |
if (product > largest_product) | |
largest_product = product; | |
n = n + 1; | |
} | |
return largest_product; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment