From 1879caa1dd80cb11dd62403663917ad4bf7cc68e Mon Sep 17 00:00:00 2001 From: Charles Date: Sun, 11 Aug 2019 22:41:34 +0200 Subject: rename all file with 3 zero padding --- c/005-smallest_multiple.c | 23 ++++++ c/012-highly_divisible_triangular_number.c | 35 ++++++++ c/12-highly_divisible_triangular_number.c | 35 -------- c/5-smallest_multiple.c | 23 ------ python/001-multiples35.py | 9 +++ python/002-fibo_even.py | 10 +++ python/003-prime_fact.py | 19 +++++ python/004-largest_palindrome.py | 12 +++ python/006-sum_square_difference.py | 8 ++ python/007-10001st_prime.py | 26 ++++++ python/008-largest_product_in_a_series.py | 37 +++++++++ python/009-pythagorean_triplet.py | 9 +++ python/010-summation_of_primes.py | 10 +++ python/011-largest_product_in_a_grid.py | 80 ++++++++++++++++++ python/013-large_sum.py | 108 +++++++++++++++++++++++++ python/014-longest_collatz_sequence.py | 16 ++++ python/015-lattice_paths.py | 17 ++++ python/016-power_digit_sum.py | 5 ++ python/017-number_letter_count.py | 56 +++++++++++++ python/018-max_path_sum_I.py | 36 +++++++++ python/019-counting_sundays.py | 34 ++++++++ python/020-factorial_digit_sum.py | 9 +++ python/021-amicable_numbers.py | 13 +++ python/022-names_scores.py | 9 +++ python/024-lexicographic_permutations.py | 6 ++ python/025-1000_digits_fibonacci_number.py | 8 ++ python/028-number_spiral_diagonals.py | 46 +++++++++++ python/029-distinct_powers.py | 8 ++ python/034-digit_factorials.py | 11 +++ python/035-circular_primes.py | 19 +++++ python/036-double_base_palindrome.py | 8 ++ python/041-pandigital_prime.py | 10 +++ python/042-coded_triangle_numbers.py | 17 ++++ python/043-sub_string_divisibility.py | 24 ++++++ python/048-self_powers.py | 1 + python/052-permuted_multiples.py | 16 ++++ python/055-lychrel_numbers.py | 19 +++++ python/056-powerful_digit_sum.py | 10 +++ python/1-multiples35.py | 9 --- python/10-summation_of_primes.py | 10 --- python/11-largest_product_in_a_grid.py | 80 ------------------ python/13-large_sum.py | 108 ------------------------- python/14-longest_collatz_sequence.py | 16 ---- python/15-lattice_paths.py | 17 ---- python/16-power_digit_sum.py | 5 -- python/17-number_letter_count.py | 56 ------------- python/18-max_path_sum_I.py | 36 --------- python/19-counting_sundays.py | 34 -------- python/2-fibo_even.py | 10 --- python/20-factorial_digit_sum.py | 9 --- python/21-amicable_numbers.py | 13 --- python/22-names_scores.py | 9 --- python/24-lexicographic_permutations.py | 6 -- python/25-1000_digits_fibonacci_number.py | 8 -- python/28-number_spiral_diagonals.py | 46 ----------- python/29-distinct_powers.py | 8 -- python/3-prime_fact.py | 19 ----- python/34-digit_factorials.py | 11 --- python/35-circular_primes.py | 19 ----- python/36-double_base_palindrome.py | 8 -- python/4-largest_palindrome.py | 12 --- python/41-pandigital_prime.py | 10 --- python/42-coded_triangle_numbers.py | 17 ---- python/43-sub_string_divisibility.py | 24 ------ python/48-self_powers.py | 1 - python/52-permuted_multiples.py | 16 ---- python/55-lychrel_numbers.py | 19 ----- python/56-powerful_digit_sum.py | 10 --- python/6-sum_square_difference.py | 8 -- python/7-10001st_prime.py | 26 ------ python/8-largest_product_in_a_series.py | 37 --------- python/9-pythagorean_triplet.py | 9 --- wip/023-non_abudant_sums.py | 16 ++++ wip/026-reciprocal_cycles.py | 5 ++ wip/027-quadratic_primes.py | 17 ++++ wip/031-coin_sums.py | 12 +++ wip/037-truncatable_primes.py | 25 ++++++ wip/045-triangular_pentagonal_and_hexagonal.py | 9 +++ wip/047-distinct_primes_factors.py | 20 +++++ wip/049-prime_permutations.py | 23 ++++++ wip/053-combinatoric-selections.c | 43 ++++++++++ wip/092-square_digit_chains.c | 89 ++++++++++++++++++++ wip/23-non_abudant_sums.py | 16 ---- wip/26-reciprocal_cycles.py | 5 -- wip/27-quadratic_primes.py | 17 ---- wip/31-coin_sums.py | 12 --- wip/37-truncatable_primes.py | 25 ------ wip/45-triangular_pentagonal_and_hexagonal.py | 9 --- wip/47-distinct_primes_factors.py | 20 ----- wip/49-prime_permutations.py | 23 ------ wip/53-combinatoric-selections.c | 43 ---------- wip/92-square_digit_chains.c | 89 -------------------- 92 files changed, 1043 insertions(+), 1043 deletions(-) create mode 100644 c/005-smallest_multiple.c create mode 100644 c/012-highly_divisible_triangular_number.c delete mode 100644 c/12-highly_divisible_triangular_number.c delete mode 100644 c/5-smallest_multiple.c create mode 100644 python/001-multiples35.py create mode 100644 python/002-fibo_even.py create mode 100644 python/003-prime_fact.py create mode 100644 python/004-largest_palindrome.py create mode 100644 python/006-sum_square_difference.py create mode 100644 python/007-10001st_prime.py create mode 100644 python/008-largest_product_in_a_series.py create mode 100644 python/009-pythagorean_triplet.py create mode 100644 python/010-summation_of_primes.py create mode 100644 python/011-largest_product_in_a_grid.py create mode 100644 python/013-large_sum.py create mode 100644 python/014-longest_collatz_sequence.py create mode 100644 python/015-lattice_paths.py create mode 100644 python/016-power_digit_sum.py create mode 100644 python/017-number_letter_count.py create mode 100644 python/018-max_path_sum_I.py create mode 100644 python/019-counting_sundays.py create mode 100644 python/020-factorial_digit_sum.py create mode 100644 python/021-amicable_numbers.py create mode 100644 python/022-names_scores.py create mode 100644 python/024-lexicographic_permutations.py create mode 100644 python/025-1000_digits_fibonacci_number.py create mode 100644 python/028-number_spiral_diagonals.py create mode 100644 python/029-distinct_powers.py create mode 100644 python/034-digit_factorials.py create mode 100644 python/035-circular_primes.py create mode 100644 python/036-double_base_palindrome.py create mode 100644 python/041-pandigital_prime.py create mode 100644 python/042-coded_triangle_numbers.py create mode 100644 python/043-sub_string_divisibility.py create mode 100644 python/048-self_powers.py create mode 100644 python/052-permuted_multiples.py create mode 100644 python/055-lychrel_numbers.py create mode 100644 python/056-powerful_digit_sum.py delete mode 100644 python/1-multiples35.py delete mode 100644 python/10-summation_of_primes.py delete mode 100644 python/11-largest_product_in_a_grid.py delete mode 100644 python/13-large_sum.py delete mode 100644 python/14-longest_collatz_sequence.py delete mode 100644 python/15-lattice_paths.py delete mode 100644 python/16-power_digit_sum.py delete mode 100644 python/17-number_letter_count.py delete mode 100644 python/18-max_path_sum_I.py delete mode 100644 python/19-counting_sundays.py delete mode 100644 python/2-fibo_even.py delete mode 100644 python/20-factorial_digit_sum.py delete mode 100644 python/21-amicable_numbers.py delete mode 100644 python/22-names_scores.py delete mode 100644 python/24-lexicographic_permutations.py delete mode 100644 python/25-1000_digits_fibonacci_number.py delete mode 100644 python/28-number_spiral_diagonals.py delete mode 100644 python/29-distinct_powers.py delete mode 100644 python/3-prime_fact.py delete mode 100644 python/34-digit_factorials.py delete mode 100644 python/35-circular_primes.py delete mode 100644 python/36-double_base_palindrome.py delete mode 100644 python/4-largest_palindrome.py delete mode 100644 python/41-pandigital_prime.py delete mode 100644 python/42-coded_triangle_numbers.py delete mode 100644 python/43-sub_string_divisibility.py delete mode 100644 python/48-self_powers.py delete mode 100644 python/52-permuted_multiples.py delete mode 100644 python/55-lychrel_numbers.py delete mode 100644 python/56-powerful_digit_sum.py delete mode 100644 python/6-sum_square_difference.py delete mode 100644 python/7-10001st_prime.py delete mode 100644 python/8-largest_product_in_a_series.py delete mode 100644 python/9-pythagorean_triplet.py create mode 100644 wip/023-non_abudant_sums.py create mode 100644 wip/026-reciprocal_cycles.py create mode 100644 wip/027-quadratic_primes.py create mode 100644 wip/031-coin_sums.py create mode 100644 wip/037-truncatable_primes.py create mode 100644 wip/045-triangular_pentagonal_and_hexagonal.py create mode 100644 wip/047-distinct_primes_factors.py create mode 100644 wip/049-prime_permutations.py create mode 100644 wip/053-combinatoric-selections.c create mode 100644 wip/092-square_digit_chains.c delete mode 100644 wip/23-non_abudant_sums.py delete mode 100644 wip/26-reciprocal_cycles.py delete mode 100644 wip/27-quadratic_primes.py delete mode 100644 wip/31-coin_sums.py delete mode 100644 wip/37-truncatable_primes.py delete mode 100644 wip/45-triangular_pentagonal_and_hexagonal.py delete mode 100644 wip/47-distinct_primes_factors.py delete mode 100644 wip/49-prime_permutations.py delete mode 100644 wip/53-combinatoric-selections.c delete mode 100644 wip/92-square_digit_chains.c diff --git a/c/005-smallest_multiple.c b/c/005-smallest_multiple.c new file mode 100644 index 0000000..4924dd1 --- /dev/null +++ b/c/005-smallest_multiple.c @@ -0,0 +1,23 @@ +#include +#include + +int main() { + int num = 0, i; + bool end = false; + while (!end) { + num += 2; + + for (i = 1; i <= 20; i++) { + if (num % i != 0) { + end = false; + break; + } else { + end = true; + } + } + } + + printf("%d", num); + + return 0; +} diff --git a/c/012-highly_divisible_triangular_number.c b/c/012-highly_divisible_triangular_number.c new file mode 100644 index 0000000..4ece373 --- /dev/null +++ b/c/012-highly_divisible_triangular_number.c @@ -0,0 +1,35 @@ +#include +#include + + +int triangle_number(int nb) +{ + int i, sum = 0; + for (i = 0; i < nb + 1; i++) + sum += i; + return sum; +} + +int count_divisors(int nb) +{ + int i, div_nb = 0; + for (i = 1; i <= sqrt(nb); i++) { + if (nb % i == 0) + div_nb += (i != nb / i ? 2 : 1); + } + return div_nb; +} + +int main(void) +{ + int i, t_nb; + + for (i = 0;; i++) { + t_nb = triangle_number(i); + if (count_divisors(t_nb) + 2 > 500) + break; + } + printf("%d", t_nb); + + return 0; +} diff --git a/c/12-highly_divisible_triangular_number.c b/c/12-highly_divisible_triangular_number.c deleted file mode 100644 index 4ece373..0000000 --- a/c/12-highly_divisible_triangular_number.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include - - -int triangle_number(int nb) -{ - int i, sum = 0; - for (i = 0; i < nb + 1; i++) - sum += i; - return sum; -} - -int count_divisors(int nb) -{ - int i, div_nb = 0; - for (i = 1; i <= sqrt(nb); i++) { - if (nb % i == 0) - div_nb += (i != nb / i ? 2 : 1); - } - return div_nb; -} - -int main(void) -{ - int i, t_nb; - - for (i = 0;; i++) { - t_nb = triangle_number(i); - if (count_divisors(t_nb) + 2 > 500) - break; - } - printf("%d", t_nb); - - return 0; -} diff --git a/c/5-smallest_multiple.c b/c/5-smallest_multiple.c deleted file mode 100644 index 4924dd1..0000000 --- a/c/5-smallest_multiple.c +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include - -int main() { - int num = 0, i; - bool end = false; - while (!end) { - num += 2; - - for (i = 1; i <= 20; i++) { - if (num % i != 0) { - end = false; - break; - } else { - end = true; - } - } - } - - printf("%d", num); - - return 0; -} diff --git a/python/001-multiples35.py b/python/001-multiples35.py new file mode 100644 index 0000000..6a92369 --- /dev/null +++ b/python/001-multiples35.py @@ -0,0 +1,9 @@ +# -*- coding:utf-8 -*- + +sum35 = 0 +i = 0 +while i < 1000: + if i % 3 == 0 or i % 5 == 0: + sum35 += i + i += 1 +print(sum35) diff --git a/python/002-fibo_even.py b/python/002-fibo_even.py new file mode 100644 index 0000000..14991c9 --- /dev/null +++ b/python/002-fibo_even.py @@ -0,0 +1,10 @@ +a, b, c = 1, 1, 0 +result = 0 +while b < 4000000: + c = a + a = b + b = b + c + if b < 4000000 and b % 2 == 0: + result += b + +print(result) diff --git a/python/003-prime_fact.py b/python/003-prime_fact.py new file mode 100644 index 0000000..6f73c10 --- /dev/null +++ b/python/003-prime_fact.py @@ -0,0 +1,19 @@ +# It work but la flemme de couper la boucle quand on a atteint le dernier facteur. +number = 600851475143 +prime_factors = [] + +end = False +while not end: + + for divisor in range(2, number + 1): + + if number % divisor == 0: + prime_factors.append(divisor) + number = int(number / divisor) + print(prime_factors) + if divisor == number: + end = True + break + + +print(prime_factors) diff --git a/python/004-largest_palindrome.py b/python/004-largest_palindrome.py new file mode 100644 index 0000000..096de7a --- /dev/null +++ b/python/004-largest_palindrome.py @@ -0,0 +1,12 @@ +threeDigitsReversedList = list(reversed(range(100, 1000))) + +palindrome_num = 0 +for a in threeDigitsReversedList: + for b in threeDigitsReversedList: + num = a * b + if str(num) == str(num)[::-1]: + if num > palindrome_num: + palindrome_num = num + break + +print(palindrome_num) diff --git a/python/006-sum_square_difference.py b/python/006-sum_square_difference.py new file mode 100644 index 0000000..9b5b1c7 --- /dev/null +++ b/python/006-sum_square_difference.py @@ -0,0 +1,8 @@ +a = 0 +b = 0 + +for i in range(1, 101): + a += i ** 2 + b += i + +print(b ** 2 - a) diff --git a/python/007-10001st_prime.py b/python/007-10001st_prime.py new file mode 100644 index 0000000..19793f3 --- /dev/null +++ b/python/007-10001st_prime.py @@ -0,0 +1,26 @@ +import math + + +prime_numbers = [] + +num = 2 +end = False +while not end: + num_sqrt = math.ceil(math.sqrt(num)) + + is_prime = True + for prime_num in prime_numbers: + if prime_num < num_sqrt + 1: + if num % prime_num == 0: + is_prime = False + else: + break + + if is_prime: + prime_numbers.append(num) + num += 1 + + if len(prime_numbers) == 10001: + break + +print(prime_numbers[-1]) diff --git a/python/008-largest_product_in_a_series.py b/python/008-largest_product_in_a_series.py new file mode 100644 index 0000000..133461c --- /dev/null +++ b/python/008-largest_product_in_a_series.py @@ -0,0 +1,37 @@ +number = "73167176531330624919225119674426574742355349194934" +\ + "96983520312774506326239578318016984801869478851843" +\ + "85861560789112949495459501737958331952853208805511" +\ + "12540698747158523863050715693290963295227443043557" +\ + "66896648950445244523161731856403098711121722383113" +\ + "62229893423380308135336276614282806444486645238749" +\ + "30358907296290491560440772390713810515859307960866" +\ + "70172427121883998797908792274921901699720888093776" +\ + "65727333001053367881220235421809751254540594752243" +\ + "52584907711670556013604839586446706324415722155397" +\ + "53697817977846174064955149290862569321978468622482" +\ + "83972241375657056057490261407972968652414535100474" +\ + "82166370484403199890008895243450658541227588666881" +\ + "16427171479924442928230863465674813919123162824586" +\ + "17866458359124566529476545682848912883142607690042" +\ + "24219022671055626321111109370544217506941658960408" +\ + "07198403850962455444362981230987879927244284909188" +\ + "84580156166097919133875499200524063689912560717606" +\ + "05886116467109405077541002256983155200055935729725" +\ + "71636269561882670428252483600823257530420752963450" + +highest_products = [] + +number = list(number) +for i, n in enumerate(number): + number[i] = int(number[i]) + +for i, n in enumerate(number): + product = n + try: + for j in range(1, 13): + product *= number[i + j] + except IndexError: + product = 0 + highest_products.append(product) + +print(max(highest_products)) diff --git a/python/009-pythagorean_triplet.py b/python/009-pythagorean_triplet.py new file mode 100644 index 0000000..a1f3708 --- /dev/null +++ b/python/009-pythagorean_triplet.py @@ -0,0 +1,9 @@ +import math + +for a in range(0, 1000): + for b in range(1, 1000): + c = math.sqrt(a ** 2 + b ** 2) + if a < b < c and a + b + c == 1000: + print(f'{a} + {b} + {int(c)} = 1000') + print(f'a × b × c = {int(a * b * c)}') + break diff --git a/python/010-summation_of_primes.py b/python/010-summation_of_primes.py new file mode 100644 index 0000000..e637c9c --- /dev/null +++ b/python/010-summation_of_primes.py @@ -0,0 +1,10 @@ +from helper.prime import is_prime + +prime_numbers = [] +for num in range(2, 2_000_000): + if is_prime(num, prime_numbers): + prime_numbers.append(num) + num += 1 + +summation = sum(prime_numbers) +print(summation) diff --git a/python/011-largest_product_in_a_grid.py b/python/011-largest_product_in_a_grid.py new file mode 100644 index 0000000..c98a41e --- /dev/null +++ b/python/011-largest_product_in_a_grid.py @@ -0,0 +1,80 @@ +from functools import reduce + +grid = [ + [8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8], + [49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0], + [81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65], + [52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91], + [22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80], + [24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50], + [32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70], + [67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21], + [24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72], + [21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95], + [78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92], + [16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57], + [86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58], + [19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40], + [4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66], + [88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69], + [4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36], + [20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16], + [20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54], + [1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48] +] + + +def isCorrectIndex(x, y): + if 0 <= x < 20 and 0 <= y < 20: + return True + return False + + +def getAdjacentNumbers(x, y): + adjacent = { + 'vertical': [], + 'horizontal': [], + 'diagonal': [], + 'anti-diagonal': [] + } + + for i in range(4): + # vertical list + modifiedX = x + i + if isCorrectIndex(modifiedX, y): + adjacent['vertical'].append(grid[modifiedX][y]) + + # horizontal list + modifiedY = y + i + if isCorrectIndex(x, modifiedY): + adjacent['horizontal'].append(grid[x][modifiedY]) + + # diagonal list + if isCorrectIndex(modifiedX, modifiedY): + adjacent['diagonal'].append(grid[modifiedX][modifiedY]) + + # anti-diagonal list + for i, j in zip(range(4), range(4)): + AntiDiagModifiedX = x - j + modifiedY = y + i + if isCorrectIndex(AntiDiagModifiedX, modifiedY): + adjacent['anti-diagonal'].append(grid[AntiDiagModifiedX][modifiedY]) + + # filtering + for key in adjacent.keys(): + if len(adjacent[key]) != 4: + adjacent[key] = [] + + return adjacent + + +largest_sum = 0 +positions = ((x, y) for x in range(20) for y in range(20)) +for x, y in positions: + adjacent = getAdjacentNumbers(x, y) + for key in adjacent.keys(): + multiplied = reduce(lambda acc, val: acc * val, adjacent[key], 1) + if multiplied > largest_sum: + largest_sum = multiplied + +print(largest_sum) diff --git a/python/013-large_sum.py b/python/013-large_sum.py new file mode 100644 index 0000000..2548228 --- /dev/null +++ b/python/013-large_sum.py @@ -0,0 +1,108 @@ +large_numbers = [ + 37107287533902102798797998220837590246510135740250, + 46376937677490009712648124896970078050417018260538, + 74324986199524741059474233309513058123726617309629, + 91942213363574161572522430563301811072406154908250, + 23067588207539346171171980310421047513778063246676, + 89261670696623633820136378418383684178734361726757, + 28112879812849979408065481931592621691275889832738, + 44274228917432520321923589422876796487670272189318, + 47451445736001306439091167216856844588711603153276, + 70386486105843025439939619828917593665686757934951, + 62176457141856560629502157223196586755079324193331, + 64906352462741904929101432445813822663347944758178, + 92575867718337217661963751590579239728245598838407, + 58203565325359399008402633568948830189458628227828, + 80181199384826282014278194139940567587151170094390, + 35398664372827112653829987240784473053190104293586, + 86515506006295864861532075273371959191420517255829, + 71693888707715466499115593487603532921714970056938, + 54370070576826684624621495650076471787294438377604, + 53282654108756828443191190634694037855217779295145, + 36123272525000296071075082563815656710885258350721, + 45876576172410976447339110607218265236877223636045, + 17423706905851860660448207621209813287860733969412, + 81142660418086830619328460811191061556940512689692, + 51934325451728388641918047049293215058642563049483, + 62467221648435076201727918039944693004732956340691, + 15732444386908125794514089057706229429197107928209, + 55037687525678773091862540744969844508330393682126, + 18336384825330154686196124348767681297534375946515, + 80386287592878490201521685554828717201219257766954, + 78182833757993103614740356856449095527097864797581, + 16726320100436897842553539920931837441497806860984, + 48403098129077791799088218795327364475675590848030, + 87086987551392711854517078544161852424320693150332, + 59959406895756536782107074926966537676326235447210, + 69793950679652694742597709739166693763042633987085, + 41052684708299085211399427365734116182760315001271, + 65378607361501080857009149939512557028198746004375, + 35829035317434717326932123578154982629742552737307, + 94953759765105305946966067683156574377167401875275, + 88902802571733229619176668713819931811048770190271, + 25267680276078003013678680992525463401061632866526, + 36270218540497705585629946580636237993140746255962, + 24074486908231174977792365466257246923322810917141, + 91430288197103288597806669760892938638285025333403, + 34413065578016127815921815005561868836468420090470, + 23053081172816430487623791969842487255036638784583, + 11487696932154902810424020138335124462181441773470, + 63783299490636259666498587618221225225512486764533, + 67720186971698544312419572409913959008952310058822, + 95548255300263520781532296796249481641953868218774, + 76085327132285723110424803456124867697064507995236, + 37774242535411291684276865538926205024910326572967, + 23701913275725675285653248258265463092207058596522, + 29798860272258331913126375147341994889534765745501, + 18495701454879288984856827726077713721403798879715, + 38298203783031473527721580348144513491373226651381, + 34829543829199918180278916522431027392251122869539, + 40957953066405232632538044100059654939159879593635, + 29746152185502371307642255121183693803580388584903, + 41698116222072977186158236678424689157993532961922, + 62467957194401269043877107275048102390895523597457, + 23189706772547915061505504953922979530901129967519, + 86188088225875314529584099251203829009407770775672, + 11306739708304724483816533873502340845647058077308, + 82959174767140363198008187129011875491310547126581, + 97623331044818386269515456334926366572897563400500, + 42846280183517070527831839425882145521227251250327, + 55121603546981200581762165212827652751691296897789, + 32238195734329339946437501907836945765883352399886, + 75506164965184775180738168837861091527357929701337, + 62177842752192623401942399639168044983993173312731, + 32924185707147349566916674687634660915035914677504, + 99518671430235219628894890102423325116913619626622, + 73267460800591547471830798392868535206946944540724, + 76841822524674417161514036427982273348055556214818, + 97142617910342598647204516893989422179826088076852, + 87783646182799346313767754307809363333018982642090, + 10848802521674670883215120185883543223812876952786, + 71329612474782464538636993009049310363619763878039, + 62184073572399794223406235393808339651327408011116, + 66627891981488087797941876876144230030984490851411, + 60661826293682836764744779239180335110989069790714, + 85786944089552990653640447425576083659976645795096, + 66024396409905389607120198219976047599490197230297, + 64913982680032973156037120041377903785566085089252, + 16730939319872750275468906903707539413042652315011, + 94809377245048795150954100921645863754710598436791, + 78639167021187492431995700641917969777599028300699, + 15368713711936614952811305876380278410754449733078, + 40789923115535562561142322423255033685442488917353, + 44889911501440648020369068063960672322193204149535, + 41503128880339536053299340368006977710650566631954, + 81234880673210146739058568557934581403627822703280, + 82616570773948327592232845941706525094512325230608, + 22918802058777319719839450180888072429661980811197, + 77158542502016545090413245809786882778948721859617, + 72107838435069186155435662884062257473692284509516, + 20849603980134001723930671666823555245252804609722, + 53503534226472524250874054075591789781264330331690 +] + +large_numbers_sum = sum(large_numbers) + +first_ten_digits_of_sum = str(large_numbers_sum)[:10] + +print(first_ten_digits_of_sum) diff --git a/python/014-longest_collatz_sequence.py b/python/014-longest_collatz_sequence.py new file mode 100644 index 0000000..e3c3caa --- /dev/null +++ b/python/014-longest_collatz_sequence.py @@ -0,0 +1,16 @@ +from itertools import count + + +def collatz_sequence_size(nb): + for i in count(1): + if nb == 1: + return i + nb = (nb / 2) if nb % 2 == 0 else (nb * 3 + 1) + +max_nb = (1, 0) +for nb in range(1, 1_000_000): + col_seq_size = collatz_sequence_size(nb) + if col_seq_size > max_nb[1]: + max_nb = nb, col_seq_size + +print(max_nb) diff --git a/python/015-lattice_paths.py b/python/015-lattice_paths.py new file mode 100644 index 0000000..90d9531 --- /dev/null +++ b/python/015-lattice_paths.py @@ -0,0 +1,17 @@ +def build_pascal_triangle(rows): + triangle = [[0, 1, 0]] + for i in range(1, rows + 1): + next_row = [0, 0] + previous_row = triangle[i - 1] + for j in range(len(previous_row) - 1): + next_row.insert(j + 1, previous_row[j] + previous_row[j + 1]) + triangle.append(next_row) + return triangle + + +lattice_len = 20 +print([ + x[len(x) // 2] + for i, x in enumerate(build_pascal_triangle(lattice_len * 2)) + if i % 4 == 0 + ][-1]) diff --git a/python/016-power_digit_sum.py b/python/016-power_digit_sum.py new file mode 100644 index 0000000..584ba67 --- /dev/null +++ b/python/016-power_digit_sum.py @@ -0,0 +1,5 @@ +two_power_thousand = 2 ** 1000 + +list_of_digits = [int(dgt) for dgt in list(str(two_power_thousand))] + +print(sum(list_of_digits)) diff --git a/python/017-number_letter_count.py b/python/017-number_letter_count.py new file mode 100644 index 0000000..9998831 --- /dev/null +++ b/python/017-number_letter_count.py @@ -0,0 +1,56 @@ +w_nums = { + '0': '', + '00': '', + '1': 'one', + '2': 'two', + '3': 'three', + '4': 'four', + '5': 'five', + '6': 'six', + '7': 'seven', + '8': 'eight', + '9': 'nine', + '10': 'ten', + '11': 'eleven', + '12': 'twelve', + '13': 'thirteen', + '14': 'fourteen', + '15': 'fifteen', + '16': 'sixteen', + '17': 'seventeen', + '18': 'eighteen', + '19': 'nineteen', + '20': 'twenty', + '30': 'thirty', + '40': 'forty', + '50': 'fifty', + '60': 'sixty', + '70': 'seventy', + '80': 'eighty', + '90': 'ninety', + '100': 'hundred', + '1000': 'thousand' +} +w_nums = {key: len(val) for (key, val) in w_nums.items()} + +def two_digit_num(num): + if num[0] == '1': + return w_nums[num] + else: + return w_nums[num[0] + '0'] + w_nums[num[1]] + + +c = 0 +for num in [str(n) for n in range(1, 1001)]: + c += [ + lambda: w_nums[num], + lambda: two_digit_num(num), + lambda: ( + w_nums[num[0]] + w_nums['100'] + + (len('and') if num[1:] != '00' else 0) + + two_digit_num(num[1:]) + ), + lambda: len('onethousand') + ][len(num)-1]() + +print(c) diff --git a/python/018-max_path_sum_I.py b/python/018-max_path_sum_I.py new file mode 100644 index 0000000..f091782 --- /dev/null +++ b/python/018-max_path_sum_I.py @@ -0,0 +1,36 @@ +triangle = [ + [75], + [95, 64], + [17, 47, 82], + [18, 35, 87, 10], + [20, 4, 82, 47, 65], + [19, 1, 23, 75, 3, 34], + [88, 2, 77, 73, 7, 63, 67], + [99, 65, 4 , 28, 6, 16, 70, 92], + [41, 41, 26, 56, 83, 40, 80, 70, 33], + [41, 48, 72, 33, 47, 32, 37, 16, 94, 29], + [53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14], + [70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57], + [91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48], + [63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31], + [ 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23] +] + +# très mauvaise récursion +def walk_through(triangle, paths=[], x=0, y=0, path=[]): + if x == len(triangle): + if y+1 == len(triangle[-1]): + return paths + return [*paths, path] + + new_path = [*path, triangle[x][y]] + return [ + *walk_through(triangle, paths, x+1, y, new_path), + *walk_through(triangle, paths, x+1, y+1, new_path) + ] + + +paths = walk_through(triangle) +max_path_sum = max([sum(x) for x in paths]) + +print(max_path_sum) diff --git a/python/019-counting_sundays.py b/python/019-counting_sundays.py new file mode 100644 index 0000000..f018e05 --- /dev/null +++ b/python/019-counting_sundays.py @@ -0,0 +1,34 @@ +def month_days(index, leap_year): + if index == 2: + if leap_year: + return 29 + return 28 + if index in [4, 6, 9, 11]: + return 30 + return 31 + + +def is_leap_year(year): + if str(year)[2:] == '00' and year % 400 != 0: + return False + if year % 4 == 0: + return True + return False + +def next_day(current): + if current == 7: + return 1 + return current + 1 + +months = [x for x in range(1, 13)] +day = 1 +sundays_counter = 0 + +for year in range(1900, 2001): + for month in months: + for d in range(month_days(month, is_leap_year(year))): + if day == 7 and d == 0 and year >= 1901: + sundays_counter += 1 + day = next_day(day) + +print(sundays_counter) diff --git a/python/020-factorial_digit_sum.py b/python/020-factorial_digit_sum.py new file mode 100644 index 0000000..a76b4ae --- /dev/null +++ b/python/020-factorial_digit_sum.py @@ -0,0 +1,9 @@ +import math + +one_hundred_factorial = math.factorial(100) + +to_list_of_int = [int(dgt) for dgt in list(str(one_hundred_factorial))] + +sum_of_all_digits = sum(to_list_of_int) + +print(sum_of_all_digits) diff --git a/python/021-amicable_numbers.py b/python/021-amicable_numbers.py new file mode 100644 index 0000000..6f89986 --- /dev/null +++ b/python/021-amicable_numbers.py @@ -0,0 +1,13 @@ +from helper.numbers import proper_divisors + + +amicable_nums = [] +for a in range(1, 10_000): + if a in amicable_nums: + continue + + b = sum(proper_divisors(a)) + if a != b and sum(proper_divisors(b)) == a: + amicable_nums.extend([a, b]) + +print(sum(amicable_nums)) diff --git a/python/022-names_scores.py b/python/022-names_scores.py new file mode 100644 index 0000000..7bba853 --- /dev/null +++ b/python/022-names_scores.py @@ -0,0 +1,9 @@ +names = [] +with open('./helper/data/names.txt', 'r') as file: + names = sorted([n[1:-1] for n in file.read().split(',')]) + +total = 0 +for i, name in enumerate(names): + total += sum([ord(s) - 64 for s in name]) * (i + 1) + +print(total) diff --git a/python/024-lexicographic_permutations.py b/python/024-lexicographic_permutations.py new file mode 100644 index 0000000..d24eb7c --- /dev/null +++ b/python/024-lexicographic_permutations.py @@ -0,0 +1,6 @@ +from helper.other import n_digits_pandigital + +nine_digits_perm = n_digits_pandigital(10, True) + +print(nine_digits_perm[999_999]) +# print(nine_digits_perm) diff --git a/python/025-1000_digits_fibonacci_number.py b/python/025-1000_digits_fibonacci_number.py new file mode 100644 index 0000000..5ee37b6 --- /dev/null +++ b/python/025-1000_digits_fibonacci_number.py @@ -0,0 +1,8 @@ +a, b, c = 1, 1, 0 +i = 2 +while len(str(c)) != 1000: + c = a + b + a, b = b, c + i += 1 + +print(i) diff --git a/python/028-number_spiral_diagonals.py b/python/028-number_spiral_diagonals.py new file mode 100644 index 0000000..ca657d5 --- /dev/null +++ b/python/028-number_spiral_diagonals.py @@ -0,0 +1,46 @@ +from itertools import count + +size = 1001 +center = (size-1) // 2 +grid = [[None for _ in range(size)] for _ in range(size)] + +i = 1 +x, y = center, center +for cycle_nb in count(): + grid[x][y] = i + y += 1 + i += 1 + + if grid[0][-1] != None: + break + + for _ in range(cycle_nb * 2 - 1): + grid[x][y] = i + x += 1 + i += 1 + + for _ in range(cycle_nb * 2): + grid[x][y] = i + y -= 1 + i += 1 + + for _ in range(cycle_nb * 2): + grid[x][y] = i + x -= 1 + i += 1 + + for _ in range(cycle_nb * 2): + grid[x][y] = i + y += 1 + i += 1 + + +diag_sum = 0 +for x, y in zip(range(size), range(size)): + diag_sum += grid[x][y] + +adiag_sum = 0 +for x, y in zip(reversed(range(size)), range(size)): + adiag_sum += grid[x][y] + +print(diag_sum + adiag_sum - 1) diff --git a/python/029-distinct_powers.py b/python/029-distinct_powers.py new file mode 100644 index 0000000..8957e43 --- /dev/null +++ b/python/029-distinct_powers.py @@ -0,0 +1,8 @@ +nums_range = range(2, 101) + +combinations = [] +for a in nums_range: + for b in nums_range: + combinations.append(a ** b) + +print(len(set(combinations))) diff --git a/python/034-digit_factorials.py b/python/034-digit_factorials.py new file mode 100644 index 0000000..c94b0d2 --- /dev/null +++ b/python/034-digit_factorials.py @@ -0,0 +1,11 @@ +from itertools import count +from math import factorial + + +def is_sum_factorial_digit(num): + return sum([factorial(int(d)) for d in str(num)]) == num + +# il n'y en a que deux, je ne sais pas quelle est la limite +for i in count(3): + if is_sum_factorial_digit(i): + print(i) diff --git a/python/035-circular_primes.py b/python/035-circular_primes.py new file mode 100644 index 0000000..5d5243b --- /dev/null +++ b/python/035-circular_primes.py @@ -0,0 +1,19 @@ +from helper.prime import primes_until, is_prime + +def rotate_num(l, x): + l = str(l) + return int(l[-x:] + l[:-x]) + +c_nb_list = [] +for p in primes_until(1_000_000): + circular = True + for k in range(1, len(str(p))): + if not is_prime(rotate_num(p, k)): + circular = False + break + + if circular: + c_nb_list.append(p) + +print(c_nb_list) +print(len(c_nb_list)) diff --git a/python/036-double_base_palindrome.py b/python/036-double_base_palindrome.py new file mode 100644 index 0000000..758ad1b --- /dev/null +++ b/python/036-double_base_palindrome.py @@ -0,0 +1,8 @@ +# https://projecteuler.net/problem=36 + +sum = 0 +for nb in range(1_000_000): + if str(nb) == str(nb)[::-1] and f'{nb:b}' == f'{nb:b}'[::-1]: + sum += nb + +print(sum) diff --git a/python/041-pandigital_prime.py b/python/041-pandigital_prime.py new file mode 100644 index 0000000..7229e29 --- /dev/null +++ b/python/041-pandigital_prime.py @@ -0,0 +1,10 @@ +from helper.other import n_digits_pandidital +from helper.prime import is_prime + +maximum = 0 +for i in range(1, 10): + for nb in n_digits_pandidital(i): + if is_prime(nb) and nb > maximum: + maximum = nb + +print(maximum) diff --git a/python/042-coded_triangle_numbers.py b/python/042-coded_triangle_numbers.py new file mode 100644 index 0000000..3a90945 --- /dev/null +++ b/python/042-coded_triangle_numbers.py @@ -0,0 +1,17 @@ +from helper.numbers import is_triangular + + +def letter_alph_ord(l): + return ord(l) - 64 + +def sum_letter_ord(word): + return sum([letter_alph_ord(l) for l in word]) + +counter = 0 +with open('helper/data/words.txt', 'r') as file: + words = [w[1:-1] for w in file.read().split(',')] + for w in words: + if is_triangular(sum_letter_ord(w)): + counter += 1 + +print(counter) diff --git a/python/043-sub_string_divisibility.py b/python/043-sub_string_divisibility.py new file mode 100644 index 0000000..16164c1 --- /dev/null +++ b/python/043-sub_string_divisibility.py @@ -0,0 +1,24 @@ +from itertools import permutations + + +first_primes = [2, 3, 5, 7, 11, 13, 17] +all_pandigital = [int(''.join(map(lambda n: str(n), x))) for x in permutations(range(10)) if x[0] != 0] + + +def property_check(nb): + str_nb = str(nb) + indexs = [1, 2, 3] + for i in range(7): + if int(''.join([str_nb[i] for i in indexs])) % first_primes[i] != 0: + return False + indexs = [x + 1 for x in indexs] + + return True + + +nb_sum = 0 +for nb in all_pandigital: + if property_check(nb): + nb_sum += nb + +print(nb_sum) diff --git a/python/048-self_powers.py b/python/048-self_powers.py new file mode 100644 index 0000000..6d12141 --- /dev/null +++ b/python/048-self_powers.py @@ -0,0 +1 @@ +print(str(sum([i ** i for i in range(1, 1001)]))[-10:]) diff --git a/python/052-permuted_multiples.py b/python/052-permuted_multiples.py new file mode 100644 index 0000000..c7711e2 --- /dev/null +++ b/python/052-permuted_multiples.py @@ -0,0 +1,16 @@ +from itertools import count + + +found = False +for i in count(1): + foo = [sorted(str(i * x)) for x in range(1, 7)] + + for w in foo[1:]: + found = True + if w != foo[0]: + found = False + break + + if found: + print(i) + break diff --git a/python/055-lychrel_numbers.py b/python/055-lychrel_numbers.py new file mode 100644 index 0000000..efdf31d --- /dev/null +++ b/python/055-lychrel_numbers.py @@ -0,0 +1,19 @@ +from helper.palindrome import is_palindrome + + +def reverse_and_add(num): + return num + int(str(num)[::-1]) + +def is_lychrel_number(num): + for _ in range(50): + num = reverse_and_add(num) + if is_palindrome(num): + return False + return True + +counter = 0 +for i in range(10_000): + if is_lychrel_number(i): + counter += 1 + +print(counter) diff --git a/python/056-powerful_digit_sum.py b/python/056-powerful_digit_sum.py new file mode 100644 index 0000000..a12ebe4 --- /dev/null +++ b/python/056-powerful_digit_sum.py @@ -0,0 +1,10 @@ +from helper.numbers import sum_digits + +max_sum = 0 +for a in range(100): + for b in range(100): + s = sum_digits(a ** b) + if s > max_sum: + max_sum = s + +print(max_sum) diff --git a/python/1-multiples35.py b/python/1-multiples35.py deleted file mode 100644 index 6a92369..0000000 --- a/python/1-multiples35.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding:utf-8 -*- - -sum35 = 0 -i = 0 -while i < 1000: - if i % 3 == 0 or i % 5 == 0: - sum35 += i - i += 1 -print(sum35) diff --git a/python/10-summation_of_primes.py b/python/10-summation_of_primes.py deleted file mode 100644 index e637c9c..0000000 --- a/python/10-summation_of_primes.py +++ /dev/null @@ -1,10 +0,0 @@ -from helper.prime import is_prime - -prime_numbers = [] -for num in range(2, 2_000_000): - if is_prime(num, prime_numbers): - prime_numbers.append(num) - num += 1 - -summation = sum(prime_numbers) -print(summation) diff --git a/python/11-largest_product_in_a_grid.py b/python/11-largest_product_in_a_grid.py deleted file mode 100644 index c98a41e..0000000 --- a/python/11-largest_product_in_a_grid.py +++ /dev/null @@ -1,80 +0,0 @@ -from functools import reduce - -grid = [ - [8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8], - [49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0], - [81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65], - [52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91], - [22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80], - [24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50], - [32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70], - [67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21], - [24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72], - [21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95], - [78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92], - [16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57], - [86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58], - [19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40], - [4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66], - [88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69], - [4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36], - [20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16], - [20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54], - [1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48] -] - - -def isCorrectIndex(x, y): - if 0 <= x < 20 and 0 <= y < 20: - return True - return False - - -def getAdjacentNumbers(x, y): - adjacent = { - 'vertical': [], - 'horizontal': [], - 'diagonal': [], - 'anti-diagonal': [] - } - - for i in range(4): - # vertical list - modifiedX = x + i - if isCorrectIndex(modifiedX, y): - adjacent['vertical'].append(grid[modifiedX][y]) - - # horizontal list - modifiedY = y + i - if isCorrectIndex(x, modifiedY): - adjacent['horizontal'].append(grid[x][modifiedY]) - - # diagonal list - if isCorrectIndex(modifiedX, modifiedY): - adjacent['diagonal'].append(grid[modifiedX][modifiedY]) - - # anti-diagonal list - for i, j in zip(range(4), range(4)): - AntiDiagModifiedX = x - j - modifiedY = y + i - if isCorrectIndex(AntiDiagModifiedX, modifiedY): - adjacent['anti-diagonal'].append(grid[AntiDiagModifiedX][modifiedY]) - - # filtering - for key in adjacent.keys(): - if len(adjacent[key]) != 4: - adjacent[key] = [] - - return adjacent - - -largest_sum = 0 -positions = ((x, y) for x in range(20) for y in range(20)) -for x, y in positions: - adjacent = getAdjacentNumbers(x, y) - for key in adjacent.keys(): - multiplied = reduce(lambda acc, val: acc * val, adjacent[key], 1) - if multiplied > largest_sum: - largest_sum = multiplied - -print(largest_sum) diff --git a/python/13-large_sum.py b/python/13-large_sum.py deleted file mode 100644 index 2548228..0000000 --- a/python/13-large_sum.py +++ /dev/null @@ -1,108 +0,0 @@ -large_numbers = [ - 37107287533902102798797998220837590246510135740250, - 46376937677490009712648124896970078050417018260538, - 74324986199524741059474233309513058123726617309629, - 91942213363574161572522430563301811072406154908250, - 23067588207539346171171980310421047513778063246676, - 89261670696623633820136378418383684178734361726757, - 28112879812849979408065481931592621691275889832738, - 44274228917432520321923589422876796487670272189318, - 47451445736001306439091167216856844588711603153276, - 70386486105843025439939619828917593665686757934951, - 62176457141856560629502157223196586755079324193331, - 64906352462741904929101432445813822663347944758178, - 92575867718337217661963751590579239728245598838407, - 58203565325359399008402633568948830189458628227828, - 80181199384826282014278194139940567587151170094390, - 35398664372827112653829987240784473053190104293586, - 86515506006295864861532075273371959191420517255829, - 71693888707715466499115593487603532921714970056938, - 54370070576826684624621495650076471787294438377604, - 53282654108756828443191190634694037855217779295145, - 36123272525000296071075082563815656710885258350721, - 45876576172410976447339110607218265236877223636045, - 17423706905851860660448207621209813287860733969412, - 81142660418086830619328460811191061556940512689692, - 51934325451728388641918047049293215058642563049483, - 62467221648435076201727918039944693004732956340691, - 15732444386908125794514089057706229429197107928209, - 55037687525678773091862540744969844508330393682126, - 18336384825330154686196124348767681297534375946515, - 80386287592878490201521685554828717201219257766954, - 78182833757993103614740356856449095527097864797581, - 16726320100436897842553539920931837441497806860984, - 48403098129077791799088218795327364475675590848030, - 87086987551392711854517078544161852424320693150332, - 59959406895756536782107074926966537676326235447210, - 69793950679652694742597709739166693763042633987085, - 41052684708299085211399427365734116182760315001271, - 65378607361501080857009149939512557028198746004375, - 35829035317434717326932123578154982629742552737307, - 94953759765105305946966067683156574377167401875275, - 88902802571733229619176668713819931811048770190271, - 25267680276078003013678680992525463401061632866526, - 36270218540497705585629946580636237993140746255962, - 24074486908231174977792365466257246923322810917141, - 91430288197103288597806669760892938638285025333403, - 34413065578016127815921815005561868836468420090470, - 23053081172816430487623791969842487255036638784583, - 11487696932154902810424020138335124462181441773470, - 63783299490636259666498587618221225225512486764533, - 67720186971698544312419572409913959008952310058822, - 95548255300263520781532296796249481641953868218774, - 76085327132285723110424803456124867697064507995236, - 37774242535411291684276865538926205024910326572967, - 23701913275725675285653248258265463092207058596522, - 29798860272258331913126375147341994889534765745501, - 18495701454879288984856827726077713721403798879715, - 38298203783031473527721580348144513491373226651381, - 34829543829199918180278916522431027392251122869539, - 40957953066405232632538044100059654939159879593635, - 29746152185502371307642255121183693803580388584903, - 41698116222072977186158236678424689157993532961922, - 62467957194401269043877107275048102390895523597457, - 23189706772547915061505504953922979530901129967519, - 86188088225875314529584099251203829009407770775672, - 11306739708304724483816533873502340845647058077308, - 82959174767140363198008187129011875491310547126581, - 97623331044818386269515456334926366572897563400500, - 42846280183517070527831839425882145521227251250327, - 55121603546981200581762165212827652751691296897789, - 32238195734329339946437501907836945765883352399886, - 75506164965184775180738168837861091527357929701337, - 62177842752192623401942399639168044983993173312731, - 32924185707147349566916674687634660915035914677504, - 99518671430235219628894890102423325116913619626622, - 73267460800591547471830798392868535206946944540724, - 76841822524674417161514036427982273348055556214818, - 97142617910342598647204516893989422179826088076852, - 87783646182799346313767754307809363333018982642090, - 10848802521674670883215120185883543223812876952786, - 71329612474782464538636993009049310363619763878039, - 62184073572399794223406235393808339651327408011116, - 66627891981488087797941876876144230030984490851411, - 60661826293682836764744779239180335110989069790714, - 85786944089552990653640447425576083659976645795096, - 66024396409905389607120198219976047599490197230297, - 64913982680032973156037120041377903785566085089252, - 16730939319872750275468906903707539413042652315011, - 94809377245048795150954100921645863754710598436791, - 78639167021187492431995700641917969777599028300699, - 15368713711936614952811305876380278410754449733078, - 40789923115535562561142322423255033685442488917353, - 44889911501440648020369068063960672322193204149535, - 41503128880339536053299340368006977710650566631954, - 81234880673210146739058568557934581403627822703280, - 82616570773948327592232845941706525094512325230608, - 22918802058777319719839450180888072429661980811197, - 77158542502016545090413245809786882778948721859617, - 72107838435069186155435662884062257473692284509516, - 20849603980134001723930671666823555245252804609722, - 53503534226472524250874054075591789781264330331690 -] - -large_numbers_sum = sum(large_numbers) - -first_ten_digits_of_sum = str(large_numbers_sum)[:10] - -print(first_ten_digits_of_sum) diff --git a/python/14-longest_collatz_sequence.py b/python/14-longest_collatz_sequence.py deleted file mode 100644 index e3c3caa..0000000 --- a/python/14-longest_collatz_sequence.py +++ /dev/null @@ -1,16 +0,0 @@ -from itertools import count - - -def collatz_sequence_size(nb): - for i in count(1): - if nb == 1: - return i - nb = (nb / 2) if nb % 2 == 0 else (nb * 3 + 1) - -max_nb = (1, 0) -for nb in range(1, 1_000_000): - col_seq_size = collatz_sequence_size(nb) - if col_seq_size > max_nb[1]: - max_nb = nb, col_seq_size - -print(max_nb) diff --git a/python/15-lattice_paths.py b/python/15-lattice_paths.py deleted file mode 100644 index 90d9531..0000000 --- a/python/15-lattice_paths.py +++ /dev/null @@ -1,17 +0,0 @@ -def build_pascal_triangle(rows): - triangle = [[0, 1, 0]] - for i in range(1, rows + 1): - next_row = [0, 0] - previous_row = triangle[i - 1] - for j in range(len(previous_row) - 1): - next_row.insert(j + 1, previous_row[j] + previous_row[j + 1]) - triangle.append(next_row) - return triangle - - -lattice_len = 20 -print([ - x[len(x) // 2] - for i, x in enumerate(build_pascal_triangle(lattice_len * 2)) - if i % 4 == 0 - ][-1]) diff --git a/python/16-power_digit_sum.py b/python/16-power_digit_sum.py deleted file mode 100644 index 584ba67..0000000 --- a/python/16-power_digit_sum.py +++ /dev/null @@ -1,5 +0,0 @@ -two_power_thousand = 2 ** 1000 - -list_of_digits = [int(dgt) for dgt in list(str(two_power_thousand))] - -print(sum(list_of_digits)) diff --git a/python/17-number_letter_count.py b/python/17-number_letter_count.py deleted file mode 100644 index 9998831..0000000 --- a/python/17-number_letter_count.py +++ /dev/null @@ -1,56 +0,0 @@ -w_nums = { - '0': '', - '00': '', - '1': 'one', - '2': 'two', - '3': 'three', - '4': 'four', - '5': 'five', - '6': 'six', - '7': 'seven', - '8': 'eight', - '9': 'nine', - '10': 'ten', - '11': 'eleven', - '12': 'twelve', - '13': 'thirteen', - '14': 'fourteen', - '15': 'fifteen', - '16': 'sixteen', - '17': 'seventeen', - '18': 'eighteen', - '19': 'nineteen', - '20': 'twenty', - '30': 'thirty', - '40': 'forty', - '50': 'fifty', - '60': 'sixty', - '70': 'seventy', - '80': 'eighty', - '90': 'ninety', - '100': 'hundred', - '1000': 'thousand' -} -w_nums = {key: len(val) for (key, val) in w_nums.items()} - -def two_digit_num(num): - if num[0] == '1': - return w_nums[num] - else: - return w_nums[num[0] + '0'] + w_nums[num[1]] - - -c = 0 -for num in [str(n) for n in range(1, 1001)]: - c += [ - lambda: w_nums[num], - lambda: two_digit_num(num), - lambda: ( - w_nums[num[0]] + w_nums['100'] - + (len('and') if num[1:] != '00' else 0) - + two_digit_num(num[1:]) - ), - lambda: len('onethousand') - ][len(num)-1]() - -print(c) diff --git a/python/18-max_path_sum_I.py b/python/18-max_path_sum_I.py deleted file mode 100644 index f091782..0000000 --- a/python/18-max_path_sum_I.py +++ /dev/null @@ -1,36 +0,0 @@ -triangle = [ - [75], - [95, 64], - [17, 47, 82], - [18, 35, 87, 10], - [20, 4, 82, 47, 65], - [19, 1, 23, 75, 3, 34], - [88, 2, 77, 73, 7, 63, 67], - [99, 65, 4 , 28, 6, 16, 70, 92], - [41, 41, 26, 56, 83, 40, 80, 70, 33], - [41, 48, 72, 33, 47, 32, 37, 16, 94, 29], - [53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14], - [70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57], - [91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48], - [63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31], - [ 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23] -] - -# très mauvaise récursion -def walk_through(triangle, paths=[], x=0, y=0, path=[]): - if x == len(triangle): - if y+1 == len(triangle[-1]): - return paths - return [*paths, path] - - new_path = [*path, triangle[x][y]] - return [ - *walk_through(triangle, paths, x+1, y, new_path), - *walk_through(triangle, paths, x+1, y+1, new_path) - ] - - -paths = walk_through(triangle) -max_path_sum = max([sum(x) for x in paths]) - -print(max_path_sum) diff --git a/python/19-counting_sundays.py b/python/19-counting_sundays.py deleted file mode 100644 index f018e05..0000000 --- a/python/19-counting_sundays.py +++ /dev/null @@ -1,34 +0,0 @@ -def month_days(index, leap_year): - if index == 2: - if leap_year: - return 29 - return 28 - if index in [4, 6, 9, 11]: - return 30 - return 31 - - -def is_leap_year(year): - if str(year)[2:] == '00' and year % 400 != 0: - return False - if year % 4 == 0: - return True - return False - -def next_day(current): - if current == 7: - return 1 - return current + 1 - -months = [x for x in range(1, 13)] -day = 1 -sundays_counter = 0 - -for year in range(1900, 2001): - for month in months: - for d in range(month_days(month, is_leap_year(year))): - if day == 7 and d == 0 and year >= 1901: - sundays_counter += 1 - day = next_day(day) - -print(sundays_counter) diff --git a/python/2-fibo_even.py b/python/2-fibo_even.py deleted file mode 100644 index 14991c9..0000000 --- a/python/2-fibo_even.py +++ /dev/null @@ -1,10 +0,0 @@ -a, b, c = 1, 1, 0 -result = 0 -while b < 4000000: - c = a - a = b - b = b + c - if b < 4000000 and b % 2 == 0: - result += b - -print(result) diff --git a/python/20-factorial_digit_sum.py b/python/20-factorial_digit_sum.py deleted file mode 100644 index a76b4ae..0000000 --- a/python/20-factorial_digit_sum.py +++ /dev/null @@ -1,9 +0,0 @@ -import math - -one_hundred_factorial = math.factorial(100) - -to_list_of_int = [int(dgt) for dgt in list(str(one_hundred_factorial))] - -sum_of_all_digits = sum(to_list_of_int) - -print(sum_of_all_digits) diff --git a/python/21-amicable_numbers.py b/python/21-amicable_numbers.py deleted file mode 100644 index 6f89986..0000000 --- a/python/21-amicable_numbers.py +++ /dev/null @@ -1,13 +0,0 @@ -from helper.numbers import proper_divisors - - -amicable_nums = [] -for a in range(1, 10_000): - if a in amicable_nums: - continue - - b = sum(proper_divisors(a)) - if a != b and sum(proper_divisors(b)) == a: - amicable_nums.extend([a, b]) - -print(sum(amicable_nums)) diff --git a/python/22-names_scores.py b/python/22-names_scores.py deleted file mode 100644 index 7bba853..0000000 --- a/python/22-names_scores.py +++ /dev/null @@ -1,9 +0,0 @@ -names = [] -with open('./helper/data/names.txt', 'r') as file: - names = sorted([n[1:-1] for n in file.read().split(',')]) - -total = 0 -for i, name in enumerate(names): - total += sum([ord(s) - 64 for s in name]) * (i + 1) - -print(total) diff --git a/python/24-lexicographic_permutations.py b/python/24-lexicographic_permutations.py deleted file mode 100644 index d24eb7c..0000000 --- a/python/24-lexicographic_permutations.py +++ /dev/null @@ -1,6 +0,0 @@ -from helper.other import n_digits_pandigital - -nine_digits_perm = n_digits_pandigital(10, True) - -print(nine_digits_perm[999_999]) -# print(nine_digits_perm) diff --git a/python/25-1000_digits_fibonacci_number.py b/python/25-1000_digits_fibonacci_number.py deleted file mode 100644 index 5ee37b6..0000000 --- a/python/25-1000_digits_fibonacci_number.py +++ /dev/null @@ -1,8 +0,0 @@ -a, b, c = 1, 1, 0 -i = 2 -while len(str(c)) != 1000: - c = a + b - a, b = b, c - i += 1 - -print(i) diff --git a/python/28-number_spiral_diagonals.py b/python/28-number_spiral_diagonals.py deleted file mode 100644 index ca657d5..0000000 --- a/python/28-number_spiral_diagonals.py +++ /dev/null @@ -1,46 +0,0 @@ -from itertools import count - -size = 1001 -center = (size-1) // 2 -grid = [[None for _ in range(size)] for _ in range(size)] - -i = 1 -x, y = center, center -for cycle_nb in count(): - grid[x][y] = i - y += 1 - i += 1 - - if grid[0][-1] != None: - break - - for _ in range(cycle_nb * 2 - 1): - grid[x][y] = i - x += 1 - i += 1 - - for _ in range(cycle_nb * 2): - grid[x][y] = i - y -= 1 - i += 1 - - for _ in range(cycle_nb * 2): - grid[x][y] = i - x -= 1 - i += 1 - - for _ in range(cycle_nb * 2): - grid[x][y] = i - y += 1 - i += 1 - - -diag_sum = 0 -for x, y in zip(range(size), range(size)): - diag_sum += grid[x][y] - -adiag_sum = 0 -for x, y in zip(reversed(range(size)), range(size)): - adiag_sum += grid[x][y] - -print(diag_sum + adiag_sum - 1) diff --git a/python/29-distinct_powers.py b/python/29-distinct_powers.py deleted file mode 100644 index 8957e43..0000000 --- a/python/29-distinct_powers.py +++ /dev/null @@ -1,8 +0,0 @@ -nums_range = range(2, 101) - -combinations = [] -for a in nums_range: - for b in nums_range: - combinations.append(a ** b) - -print(len(set(combinations))) diff --git a/python/3-prime_fact.py b/python/3-prime_fact.py deleted file mode 100644 index 6f73c10..0000000 --- a/python/3-prime_fact.py +++ /dev/null @@ -1,19 +0,0 @@ -# It work but la flemme de couper la boucle quand on a atteint le dernier facteur. -number = 600851475143 -prime_factors = [] - -end = False -while not end: - - for divisor in range(2, number + 1): - - if number % divisor == 0: - prime_factors.append(divisor) - number = int(number / divisor) - print(prime_factors) - if divisor == number: - end = True - break - - -print(prime_factors) diff --git a/python/34-digit_factorials.py b/python/34-digit_factorials.py deleted file mode 100644 index c94b0d2..0000000 --- a/python/34-digit_factorials.py +++ /dev/null @@ -1,11 +0,0 @@ -from itertools import count -from math import factorial - - -def is_sum_factorial_digit(num): - return sum([factorial(int(d)) for d in str(num)]) == num - -# il n'y en a que deux, je ne sais pas quelle est la limite -for i in count(3): - if is_sum_factorial_digit(i): - print(i) diff --git a/python/35-circular_primes.py b/python/35-circular_primes.py deleted file mode 100644 index 5d5243b..0000000 --- a/python/35-circular_primes.py +++ /dev/null @@ -1,19 +0,0 @@ -from helper.prime import primes_until, is_prime - -def rotate_num(l, x): - l = str(l) - return int(l[-x:] + l[:-x]) - -c_nb_list = [] -for p in primes_until(1_000_000): - circular = True - for k in range(1, len(str(p))): - if not is_prime(rotate_num(p, k)): - circular = False - break - - if circular: - c_nb_list.append(p) - -print(c_nb_list) -print(len(c_nb_list)) diff --git a/python/36-double_base_palindrome.py b/python/36-double_base_palindrome.py deleted file mode 100644 index 758ad1b..0000000 --- a/python/36-double_base_palindrome.py +++ /dev/null @@ -1,8 +0,0 @@ -# https://projecteuler.net/problem=36 - -sum = 0 -for nb in range(1_000_000): - if str(nb) == str(nb)[::-1] and f'{nb:b}' == f'{nb:b}'[::-1]: - sum += nb - -print(sum) diff --git a/python/4-largest_palindrome.py b/python/4-largest_palindrome.py deleted file mode 100644 index 096de7a..0000000 --- a/python/4-largest_palindrome.py +++ /dev/null @@ -1,12 +0,0 @@ -threeDigitsReversedList = list(reversed(range(100, 1000))) - -palindrome_num = 0 -for a in threeDigitsReversedList: - for b in threeDigitsReversedList: - num = a * b - if str(num) == str(num)[::-1]: - if num > palindrome_num: - palindrome_num = num - break - -print(palindrome_num) diff --git a/python/41-pandigital_prime.py b/python/41-pandigital_prime.py deleted file mode 100644 index 7229e29..0000000 --- a/python/41-pandigital_prime.py +++ /dev/null @@ -1,10 +0,0 @@ -from helper.other import n_digits_pandidital -from helper.prime import is_prime - -maximum = 0 -for i in range(1, 10): - for nb in n_digits_pandidital(i): - if is_prime(nb) and nb > maximum: - maximum = nb - -print(maximum) diff --git a/python/42-coded_triangle_numbers.py b/python/42-coded_triangle_numbers.py deleted file mode 100644 index 3a90945..0000000 --- a/python/42-coded_triangle_numbers.py +++ /dev/null @@ -1,17 +0,0 @@ -from helper.numbers import is_triangular - - -def letter_alph_ord(l): - return ord(l) - 64 - -def sum_letter_ord(word): - return sum([letter_alph_ord(l) for l in word]) - -counter = 0 -with open('helper/data/words.txt', 'r') as file: - words = [w[1:-1] for w in file.read().split(',')] - for w in words: - if is_triangular(sum_letter_ord(w)): - counter += 1 - -print(counter) diff --git a/python/43-sub_string_divisibility.py b/python/43-sub_string_divisibility.py deleted file mode 100644 index 16164c1..0000000 --- a/python/43-sub_string_divisibility.py +++ /dev/null @@ -1,24 +0,0 @@ -from itertools import permutations - - -first_primes = [2, 3, 5, 7, 11, 13, 17] -all_pandigital = [int(''.join(map(lambda n: str(n), x))) for x in permutations(range(10)) if x[0] != 0] - - -def property_check(nb): - str_nb = str(nb) - indexs = [1, 2, 3] - for i in range(7): - if int(''.join([str_nb[i] for i in indexs])) % first_primes[i] != 0: - return False - indexs = [x + 1 for x in indexs] - - return True - - -nb_sum = 0 -for nb in all_pandigital: - if property_check(nb): - nb_sum += nb - -print(nb_sum) diff --git a/python/48-self_powers.py b/python/48-self_powers.py deleted file mode 100644 index 6d12141..0000000 --- a/python/48-self_powers.py +++ /dev/null @@ -1 +0,0 @@ -print(str(sum([i ** i for i in range(1, 1001)]))[-10:]) diff --git a/python/52-permuted_multiples.py b/python/52-permuted_multiples.py deleted file mode 100644 index c7711e2..0000000 --- a/python/52-permuted_multiples.py +++ /dev/null @@ -1,16 +0,0 @@ -from itertools import count - - -found = False -for i in count(1): - foo = [sorted(str(i * x)) for x in range(1, 7)] - - for w in foo[1:]: - found = True - if w != foo[0]: - found = False - break - - if found: - print(i) - break diff --git a/python/55-lychrel_numbers.py b/python/55-lychrel_numbers.py deleted file mode 100644 index efdf31d..0000000 --- a/python/55-lychrel_numbers.py +++ /dev/null @@ -1,19 +0,0 @@ -from helper.palindrome import is_palindrome - - -def reverse_and_add(num): - return num + int(str(num)[::-1]) - -def is_lychrel_number(num): - for _ in range(50): - num = reverse_and_add(num) - if is_palindrome(num): - return False - return True - -counter = 0 -for i in range(10_000): - if is_lychrel_number(i): - counter += 1 - -print(counter) diff --git a/python/56-powerful_digit_sum.py b/python/56-powerful_digit_sum.py deleted file mode 100644 index a12ebe4..0000000 --- a/python/56-powerful_digit_sum.py +++ /dev/null @@ -1,10 +0,0 @@ -from helper.numbers import sum_digits - -max_sum = 0 -for a in range(100): - for b in range(100): - s = sum_digits(a ** b) - if s > max_sum: - max_sum = s - -print(max_sum) diff --git a/python/6-sum_square_difference.py b/python/6-sum_square_difference.py deleted file mode 100644 index 9b5b1c7..0000000 --- a/python/6-sum_square_difference.py +++ /dev/null @@ -1,8 +0,0 @@ -a = 0 -b = 0 - -for i in range(1, 101): - a += i ** 2 - b += i - -print(b ** 2 - a) diff --git a/python/7-10001st_prime.py b/python/7-10001st_prime.py deleted file mode 100644 index 19793f3..0000000 --- a/python/7-10001st_prime.py +++ /dev/null @@ -1,26 +0,0 @@ -import math - - -prime_numbers = [] - -num = 2 -end = False -while not end: - num_sqrt = math.ceil(math.sqrt(num)) - - is_prime = True - for prime_num in prime_numbers: - if prime_num < num_sqrt + 1: - if num % prime_num == 0: - is_prime = False - else: - break - - if is_prime: - prime_numbers.append(num) - num += 1 - - if len(prime_numbers) == 10001: - break - -print(prime_numbers[-1]) diff --git a/python/8-largest_product_in_a_series.py b/python/8-largest_product_in_a_series.py deleted file mode 100644 index 133461c..0000000 --- a/python/8-largest_product_in_a_series.py +++ /dev/null @@ -1,37 +0,0 @@ -number = "73167176531330624919225119674426574742355349194934" +\ - "96983520312774506326239578318016984801869478851843" +\ - "85861560789112949495459501737958331952853208805511" +\ - "12540698747158523863050715693290963295227443043557" +\ - "66896648950445244523161731856403098711121722383113" +\ - "62229893423380308135336276614282806444486645238749" +\ - "30358907296290491560440772390713810515859307960866" +\ - "70172427121883998797908792274921901699720888093776" +\ - "65727333001053367881220235421809751254540594752243" +\ - "52584907711670556013604839586446706324415722155397" +\ - "53697817977846174064955149290862569321978468622482" +\ - "83972241375657056057490261407972968652414535100474" +\ - "82166370484403199890008895243450658541227588666881" +\ - "16427171479924442928230863465674813919123162824586" +\ - "17866458359124566529476545682848912883142607690042" +\ - "24219022671055626321111109370544217506941658960408" +\ - "07198403850962455444362981230987879927244284909188" +\ - "84580156166097919133875499200524063689912560717606" +\ - "05886116467109405077541002256983155200055935729725" +\ - "71636269561882670428252483600823257530420752963450" - -highest_products = [] - -number = list(number) -for i, n in enumerate(number): - number[i] = int(number[i]) - -for i, n in enumerate(number): - product = n - try: - for j in range(1, 13): - product *= number[i + j] - except IndexError: - product = 0 - highest_products.append(product) - -print(max(highest_products)) diff --git a/python/9-pythagorean_triplet.py b/python/9-pythagorean_triplet.py deleted file mode 100644 index a1f3708..0000000 --- a/python/9-pythagorean_triplet.py +++ /dev/null @@ -1,9 +0,0 @@ -import math - -for a in range(0, 1000): - for b in range(1, 1000): - c = math.sqrt(a ** 2 + b ** 2) - if a < b < c and a + b + c == 1000: - print(f'{a} + {b} + {int(c)} = 1000') - print(f'a × b × c = {int(a * b * c)}') - break diff --git a/wip/023-non_abudant_sums.py b/wip/023-non_abudant_sums.py new file mode 100644 index 0000000..6e3eea2 --- /dev/null +++ b/wip/023-non_abudant_sums.py @@ -0,0 +1,16 @@ +# def getAllDivisorOf(num): +# divisor_list = [] +# for i in range(1, num): +# if num % i == 0: +# divisor_list.append(i) +# return divisor_list + + +# for num in range(1, 28123 + 1): +# pass + +# for i in range(3): +# for j in range(3): +# for k in range(3): +# if i != j and i != k and j != k: +# print(i, j, k) diff --git a/wip/026-reciprocal_cycles.py b/wip/026-reciprocal_cycles.py new file mode 100644 index 0000000..b502c9a --- /dev/null +++ b/wip/026-reciprocal_cycles.py @@ -0,0 +1,5 @@ +from decimal import Decimal + +for i in range(1, 11): + # decimals = int(str(1/i)[2:]) + print(d) diff --git a/wip/027-quadratic_primes.py b/wip/027-quadratic_primes.py new file mode 100644 index 0000000..8b21cc6 --- /dev/null +++ b/wip/027-quadratic_primes.py @@ -0,0 +1,17 @@ +from itertools import count +from helper.prime import is_prime + + +ab_iter = [(a, b) for b in range(1_001) for a in range(1_000)] + +max_product = 0 +max_prime_seq = 0 +for a, b in ab_iter: + for n in count(): + if (not is_prime(n**2 + a*n + b)) and n > max_prime_seq: + max_prime_seq = n + max_product = a * b + print(max_product) + break + + diff --git a/wip/031-coin_sums.py b/wip/031-coin_sums.py new file mode 100644 index 0000000..c9a823d --- /dev/null +++ b/wip/031-coin_sums.py @@ -0,0 +1,12 @@ +coins = [200, 100, 50, 20, 10, 5, 2, 1] + +TOTAL = 200 +coin_index = 0 +combinations = [200] +combination_nb = 1 +while True: + if sum(combinations) == 200: + coin_index += 1 + combinations[0] = coins[coin_index] + + diff --git a/wip/037-truncatable_primes.py b/wip/037-truncatable_primes.py new file mode 100644 index 0000000..1ad7d29 --- /dev/null +++ b/wip/037-truncatable_primes.py @@ -0,0 +1,25 @@ +from helper.prime import primes_loop, is_prime + + +def is_truncatable(prime): + p_str = str(prime) + for i in range(1, len(p_str)): + if not is_prime(int(p_str[i:])): + return False + for i in range(1, len(p_str)): + if not is_prime(int(p_str[:-i])): + return False + if prime in [2, 3, 5, 7]: + return False + return True + + +trunc_p_list = [] +for p in primes_loop(): + if is_truncatable(p): + trunc_p_list.append(p) + if len(trunc_p_list) == 11: + break + +print(trunc_p_list) +print(sum(trunc_p_list)) diff --git a/wip/045-triangular_pentagonal_and_hexagonal.py b/wip/045-triangular_pentagonal_and_hexagonal.py new file mode 100644 index 0000000..5fba8f8 --- /dev/null +++ b/wip/045-triangular_pentagonal_and_hexagonal.py @@ -0,0 +1,9 @@ +from itertools import count +from helper.numbers import triangular, is_pentagonal, is_hexagonal + + +for i in count(286): + t = triangular(i) + if is_pentagonal(t) and is_hexagonal(t): + print(t) + break diff --git a/wip/047-distinct_primes_factors.py b/wip/047-distinct_primes_factors.py new file mode 100644 index 0000000..ac09b9a --- /dev/null +++ b/wip/047-distinct_primes_factors.py @@ -0,0 +1,20 @@ +from itertools import count +from helper.prime import get_prime_factors, primes_loop + +# TROP LENT + +def as_four_distinct_prime_factors(num): + return len(set(get_prime_factors(num))) == 3 + +def check_next_three(num): + for i in range(1, 3): + if not as_four_distinct_prime_factors(num + i): + return False + return True + + +for num in primes_loop(): + if as_four_distinct_prime_factors(num): + if check_next_three(num): + print(num) + break diff --git a/wip/049-prime_permutations.py b/wip/049-prime_permutations.py new file mode 100644 index 0000000..d90754e --- /dev/null +++ b/wip/049-prime_permutations.py @@ -0,0 +1,23 @@ +from itertools import permutations +from helper.prime import is_prime + + +def constant_inscrease(perms): + + + +def get_prime_permutations(nb): + return sorted([ + int(''.join(x)) + for x in permutations(str(nb), 4) + if (is_prime(int(''.join(x))) + and len(str(int(''.join(x)))) == 4) + ]) + +# print(get_prime_permutations(1487)) +for i in range(1000, 10_000): + if not is_prime(i): + continue + print(get_prime_permutations(i)) +# if all([is_prime(p) for p in permutations]): +# print(sorted(permutations)) diff --git a/wip/053-combinatoric-selections.c b/wip/053-combinatoric-selections.c new file mode 100644 index 0000000..9006f5a --- /dev/null +++ b/wip/053-combinatoric-selections.c @@ -0,0 +1,43 @@ +#include +#include + + +typedef long long unsigned int Natural; + +Natural factorial(Natural n) +{ + if (n == 1 || n == 0) return 1; + else return n * factorial(n - 1); +} + +Natural combination(Natural n, Natural r) +{ + if (r > n) exit(1); + Natural num = 0; + /* for (Natural i = 0; i < r - 1; i++) */ + /* num *= n - i; */ + /* return num / factorial(r); */ + /* if (factorial(r) * factorial(n - r) == 0) return 0; */ + return (factorial(n) / (factorial(r) * factorial(n - r))); + /* return (factorial(r) * factorial(n - r)); */ +} + +int main(void) +{ + printf("10! = %llu\n", factorial(10)); + printf("23! = %llu\n", factorial(23)); + printf("(23 - 10)! = %llu\n", factorial(23 - 10)); + int counter = 0; + Natural comb = 0, n, r; + /* for (n = 1; n <= 24; n++) */ + /* for (r = 1; r <= n; r++) { */ + /* comb = combination(n, r); */ + /* if (comb > 1000000) { */ + /* counter++; */ + /* comb = combination(23, 10); */ + printf("%llu C %llu = %llu\n", n, r, comb); + /* } */ + /* } */ + printf("counter = %d", counter); + return 0; +} diff --git a/wip/092-square_digit_chains.c b/wip/092-square_digit_chains.c new file mode 100644 index 0000000..7029ccd --- /dev/null +++ b/wip/092-square_digit_chains.c @@ -0,0 +1,89 @@ +#include +#include +#include + + +int lenHelper(int x) +{ + if (x >= 10000000) return 8; + if (x >= 1000000) return 7; + if (x >= 100000) return 6; + if (x >= 10000) return 5; + if (x >= 1000) return 4; + if (x >= 100) return 3; + if (x >= 10) return 2; + return 1; +} + +int get_digit(int nb, int digit_index) +{ + if (digit_index == 1) + return nb % 10; + + return (int)(nb / pow(10.0, (double)(digit_index-1))) % 10; +} + +int next_iteration(int nb) +{ + int i, sum = 0; + for (i = 0; i < lenHelper(nb); i++) { + sum += pow(get_digit(nb, i), 2); + } + return sum; +} + +bool end_of_square_digit_chain_is_89(int nb) +{ + bool once = false; + int next_nb; + for (int i = 0; i < 10; i++) { + // printf("%d", next_nb); + next_nb = next_iteration(nb); + if (next_nb == 89 || next_nb == 1) { + if (once) { + return next_nb == 89 ? true : false; + } + once = true; + } + nb = next_nb; + } + return false; +} + + +int main(void) +{ + int i, counter = 0; + for (i = 1; i < 10000000; i++) { + // printf("%d\n", i); + if (end_of_square_digit_chain_is_89(i)) + counter++; + if (i % 1000000 == 0) + printf("%d\n", counter); + } + + printf("%d\n", counter); + + return 0; +} + + + +// def end_of_square_digit_chain_is_89(nb): +// once = False +// while True: +// next_nb = sum([int(x)**2 for x in str(nb)]) +// if next_nb == 89 or next_nb == 1: +// if once: +// return True if next_nb == 89 else False +// once = True +// nb = next_nb + +// counter = 0 +// for i in range(1, 10_000_000): +// if end_of_square_digit_chain_is_89(i): +// counter += 1 +// if i % 1000_000 == 0: +// print(counter) +// pass +// print(counter) diff --git a/wip/23-non_abudant_sums.py b/wip/23-non_abudant_sums.py deleted file mode 100644 index 6e3eea2..0000000 --- a/wip/23-non_abudant_sums.py +++ /dev/null @@ -1,16 +0,0 @@ -# def getAllDivisorOf(num): -# divisor_list = [] -# for i in range(1, num): -# if num % i == 0: -# divisor_list.append(i) -# return divisor_list - - -# for num in range(1, 28123 + 1): -# pass - -# for i in range(3): -# for j in range(3): -# for k in range(3): -# if i != j and i != k and j != k: -# print(i, j, k) diff --git a/wip/26-reciprocal_cycles.py b/wip/26-reciprocal_cycles.py deleted file mode 100644 index b502c9a..0000000 --- a/wip/26-reciprocal_cycles.py +++ /dev/null @@ -1,5 +0,0 @@ -from decimal import Decimal - -for i in range(1, 11): - # decimals = int(str(1/i)[2:]) - print(d) diff --git a/wip/27-quadratic_primes.py b/wip/27-quadratic_primes.py deleted file mode 100644 index 8b21cc6..0000000 --- a/wip/27-quadratic_primes.py +++ /dev/null @@ -1,17 +0,0 @@ -from itertools import count -from helper.prime import is_prime - - -ab_iter = [(a, b) for b in range(1_001) for a in range(1_000)] - -max_product = 0 -max_prime_seq = 0 -for a, b in ab_iter: - for n in count(): - if (not is_prime(n**2 + a*n + b)) and n > max_prime_seq: - max_prime_seq = n - max_product = a * b - print(max_product) - break - - diff --git a/wip/31-coin_sums.py b/wip/31-coin_sums.py deleted file mode 100644 index c9a823d..0000000 --- a/wip/31-coin_sums.py +++ /dev/null @@ -1,12 +0,0 @@ -coins = [200, 100, 50, 20, 10, 5, 2, 1] - -TOTAL = 200 -coin_index = 0 -combinations = [200] -combination_nb = 1 -while True: - if sum(combinations) == 200: - coin_index += 1 - combinations[0] = coins[coin_index] - - diff --git a/wip/37-truncatable_primes.py b/wip/37-truncatable_primes.py deleted file mode 100644 index 1ad7d29..0000000 --- a/wip/37-truncatable_primes.py +++ /dev/null @@ -1,25 +0,0 @@ -from helper.prime import primes_loop, is_prime - - -def is_truncatable(prime): - p_str = str(prime) - for i in range(1, len(p_str)): - if not is_prime(int(p_str[i:])): - return False - for i in range(1, len(p_str)): - if not is_prime(int(p_str[:-i])): - return False - if prime in [2, 3, 5, 7]: - return False - return True - - -trunc_p_list = [] -for p in primes_loop(): - if is_truncatable(p): - trunc_p_list.append(p) - if len(trunc_p_list) == 11: - break - -print(trunc_p_list) -print(sum(trunc_p_list)) diff --git a/wip/45-triangular_pentagonal_and_hexagonal.py b/wip/45-triangular_pentagonal_and_hexagonal.py deleted file mode 100644 index 5fba8f8..0000000 --- a/wip/45-triangular_pentagonal_and_hexagonal.py +++ /dev/null @@ -1,9 +0,0 @@ -from itertools import count -from helper.numbers import triangular, is_pentagonal, is_hexagonal - - -for i in count(286): - t = triangular(i) - if is_pentagonal(t) and is_hexagonal(t): - print(t) - break diff --git a/wip/47-distinct_primes_factors.py b/wip/47-distinct_primes_factors.py deleted file mode 100644 index ac09b9a..0000000 --- a/wip/47-distinct_primes_factors.py +++ /dev/null @@ -1,20 +0,0 @@ -from itertools import count -from helper.prime import get_prime_factors, primes_loop - -# TROP LENT - -def as_four_distinct_prime_factors(num): - return len(set(get_prime_factors(num))) == 3 - -def check_next_three(num): - for i in range(1, 3): - if not as_four_distinct_prime_factors(num + i): - return False - return True - - -for num in primes_loop(): - if as_four_distinct_prime_factors(num): - if check_next_three(num): - print(num) - break diff --git a/wip/49-prime_permutations.py b/wip/49-prime_permutations.py deleted file mode 100644 index d90754e..0000000 --- a/wip/49-prime_permutations.py +++ /dev/null @@ -1,23 +0,0 @@ -from itertools import permutations -from helper.prime import is_prime - - -def constant_inscrease(perms): - - - -def get_prime_permutations(nb): - return sorted([ - int(''.join(x)) - for x in permutations(str(nb), 4) - if (is_prime(int(''.join(x))) - and len(str(int(''.join(x)))) == 4) - ]) - -# print(get_prime_permutations(1487)) -for i in range(1000, 10_000): - if not is_prime(i): - continue - print(get_prime_permutations(i)) -# if all([is_prime(p) for p in permutations]): -# print(sorted(permutations)) diff --git a/wip/53-combinatoric-selections.c b/wip/53-combinatoric-selections.c deleted file mode 100644 index 9006f5a..0000000 --- a/wip/53-combinatoric-selections.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - - -typedef long long unsigned int Natural; - -Natural factorial(Natural n) -{ - if (n == 1 || n == 0) return 1; - else return n * factorial(n - 1); -} - -Natural combination(Natural n, Natural r) -{ - if (r > n) exit(1); - Natural num = 0; - /* for (Natural i = 0; i < r - 1; i++) */ - /* num *= n - i; */ - /* return num / factorial(r); */ - /* if (factorial(r) * factorial(n - r) == 0) return 0; */ - return (factorial(n) / (factorial(r) * factorial(n - r))); - /* return (factorial(r) * factorial(n - r)); */ -} - -int main(void) -{ - printf("10! = %llu\n", factorial(10)); - printf("23! = %llu\n", factorial(23)); - printf("(23 - 10)! = %llu\n", factorial(23 - 10)); - int counter = 0; - Natural comb = 0, n, r; - /* for (n = 1; n <= 24; n++) */ - /* for (r = 1; r <= n; r++) { */ - /* comb = combination(n, r); */ - /* if (comb > 1000000) { */ - /* counter++; */ - /* comb = combination(23, 10); */ - printf("%llu C %llu = %llu\n", n, r, comb); - /* } */ - /* } */ - printf("counter = %d", counter); - return 0; -} diff --git a/wip/92-square_digit_chains.c b/wip/92-square_digit_chains.c deleted file mode 100644 index 7029ccd..0000000 --- a/wip/92-square_digit_chains.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include - - -int lenHelper(int x) -{ - if (x >= 10000000) return 8; - if (x >= 1000000) return 7; - if (x >= 100000) return 6; - if (x >= 10000) return 5; - if (x >= 1000) return 4; - if (x >= 100) return 3; - if (x >= 10) return 2; - return 1; -} - -int get_digit(int nb, int digit_index) -{ - if (digit_index == 1) - return nb % 10; - - return (int)(nb / pow(10.0, (double)(digit_index-1))) % 10; -} - -int next_iteration(int nb) -{ - int i, sum = 0; - for (i = 0; i < lenHelper(nb); i++) { - sum += pow(get_digit(nb, i), 2); - } - return sum; -} - -bool end_of_square_digit_chain_is_89(int nb) -{ - bool once = false; - int next_nb; - for (int i = 0; i < 10; i++) { - // printf("%d", next_nb); - next_nb = next_iteration(nb); - if (next_nb == 89 || next_nb == 1) { - if (once) { - return next_nb == 89 ? true : false; - } - once = true; - } - nb = next_nb; - } - return false; -} - - -int main(void) -{ - int i, counter = 0; - for (i = 1; i < 10000000; i++) { - // printf("%d\n", i); - if (end_of_square_digit_chain_is_89(i)) - counter++; - if (i % 1000000 == 0) - printf("%d\n", counter); - } - - printf("%d\n", counter); - - return 0; -} - - - -// def end_of_square_digit_chain_is_89(nb): -// once = False -// while True: -// next_nb = sum([int(x)**2 for x in str(nb)]) -// if next_nb == 89 or next_nb == 1: -// if once: -// return True if next_nb == 89 else False -// once = True -// nb = next_nb - -// counter = 0 -// for i in range(1, 10_000_000): -// if end_of_square_digit_chain_is_89(i): -// counter += 1 -// if i % 1000_000 == 0: -// print(counter) -// pass -// print(counter) -- cgit