From 6524ec284a5b670ace2f64c50177e226a3884541 Mon Sep 17 00:00:00 2001 From: VinWare <28603906+VinWare@users.noreply.github.com> Date: Wed, 20 Oct 2021 10:36:33 +0530 Subject: [PATCH 1/3] Solution to Problem 145 of Project Euler --- project_euler/problem_145/__init__.py | 0 project_euler/problem_145/sol1.py | 58 +++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 project_euler/problem_145/__init__.py create mode 100644 project_euler/problem_145/sol1.py diff --git a/project_euler/problem_145/__init__.py b/project_euler/problem_145/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/project_euler/problem_145/sol1.py b/project_euler/problem_145/sol1.py new file mode 100644 index 000000000000..a1503735adc3 --- /dev/null +++ b/project_euler/problem_145/sol1.py @@ -0,0 +1,58 @@ +""" +Project Euler problem 145: https://projecteuler.net/problem=145 +Author: Vineet Rao +Problem statement: + +Some positive integers n have the property that the sum [ n + reverse(n) ] +consists entirely of odd (decimal) digits. +For instance, 36 + 63 = 99 and 409 + 904 = 1313. +We will call such numbers reversible; so 36, 63, 409, and 904 are reversible. +Leading zeroes are not allowed in either n or reverse(n). + +There are 120 reversible numbers below one-thousand. + +How many reversible numbers are there below one-billion (10^9)? +Time: 20th October 04:00:00 +""" + + +def odd_digits(num: int) -> bool: + """ + Check if the number passed as argument has only odd digits. + >>> odd_digits(123) + False + >>> odd_digits(135797531) + True + """ + num_str = str(num) + for i in ["0", "2", "4", "6", "8"]: + if i in num_str: + return False + return True + + +def solution(n: int = 1_000_000_000) -> int: + """ + To evaluate the solution, use solution() + >>> solution(1000) + 120 + >>> solution(1_000_000) + 18720 + >>> solution(10_000_000) + 68720 + """ + result = 0 + # All single digit numbers reverse to themselves, so their sums are even + # Therefore at least one digit in their sum is even + # Last digit cannot be 0, else it causes leading zeros in reverse + for num in range(11, n): + if num % 10 == 0: + continue + num_sum = num + int(str(num)[::-1]) + num_is_reversible = odd_digits(num_sum) + result += 1 if num_is_reversible else 0 + return result + + +if __name__ == "__main__": + print(f"{solution() = }") From e963265e2136b5124c845464e9b4fba9aae8f1f7 Mon Sep 17 00:00:00 2001 From: VinWare <28603906+VinWare@users.noreply.github.com> Date: Wed, 20 Oct 2021 10:44:06 +0530 Subject: [PATCH 2/3] Provided more descriptive filename --- project_euler/problem_145/sol1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_euler/problem_145/sol1.py b/project_euler/problem_145/sol1.py index a1503735adc3..e36ed5f8ee63 100644 --- a/project_euler/problem_145/sol1.py +++ b/project_euler/problem_145/sol1.py @@ -31,7 +31,7 @@ def odd_digits(num: int) -> bool: return True -def solution(n: int = 1_000_000_000) -> int: +def solution(max_num: int = 1_000_000_000) -> int: """ To evaluate the solution, use solution() >>> solution(1000) @@ -45,7 +45,7 @@ def solution(n: int = 1_000_000_000) -> int: # All single digit numbers reverse to themselves, so their sums are even # Therefore at least one digit in their sum is even # Last digit cannot be 0, else it causes leading zeros in reverse - for num in range(11, n): + for num in range(11, max_num): if num % 10 == 0: continue num_sum = num + int(str(num)[::-1]) From 5411b7ea7e0ac22aded1a01809b8ff735bb04ce4 Mon Sep 17 00:00:00 2001 From: John Law Date: Mon, 2 May 2022 21:38:35 +0800 Subject: [PATCH 3/3] Update sol1.py --- project_euler/problem_145/sol1.py | 1 - 1 file changed, 1 deletion(-) diff --git a/project_euler/problem_145/sol1.py b/project_euler/problem_145/sol1.py index e36ed5f8ee63..82e2ea79bc25 100644 --- a/project_euler/problem_145/sol1.py +++ b/project_euler/problem_145/sol1.py @@ -12,7 +12,6 @@ There are 120 reversible numbers below one-thousand. How many reversible numbers are there below one-billion (10^9)? -Time: 20th October 04:00:00 """