From f806354488aff214f3dd3a0419b94dd73bb8acab Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Sun, 25 Apr 2021 22:14:50 +0100 Subject: - Added solutions by Colin Crain. --- challenge-109/colin-crain/python/ch-1.py | 36 +++++++++++++ challenge-109/colin-crain/python/ch-2.py | 92 ++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 challenge-109/colin-crain/python/ch-1.py create mode 100644 challenge-109/colin-crain/python/ch-2.py (limited to 'challenge-109/colin-crain/python') diff --git a/challenge-109/colin-crain/python/ch-1.py b/challenge-109/colin-crain/python/ch-1.py new file mode 100644 index 0000000000..554f5b5518 --- /dev/null +++ b/challenge-109/colin-crain/python/ch-1.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# +# +# chowla.py +# +# TASK #1 › Chowla Numbers +# Submitted by: Mohammad S Anwar +# Write a script to generate first 20 Chowla Numbers, named after, Sarvadaman D. S. Chowla, a London born Indian American mathematician. It is defined as: +# +# C(n) = sum of divisors of n except 1 and n +# +# Output: +# 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21 +# +# +# +# © 2021 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + +import math + +def sum_divisors (n): + out = 0 + for d in range( 2, int(math.sqrt(n))+1 ): + id = divmod(n,d) + if id[1] == 0: + out += d + if id[0] != d: + out += id[0] + return out + + +for n in range(1,21): + print(f"C({n}) = ", sum_divisors(n)) + + diff --git a/challenge-109/colin-crain/python/ch-2.py b/challenge-109/colin-crain/python/ch-2.py new file mode 100644 index 0000000000..3d45b655a7 --- /dev/null +++ b/challenge-109/colin-crain/python/ch-2.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# +# +# four-sq-permute.py +# +# TASK #2 › Four Squares Puzzle +# Submitted by: Mohammad S Anwar +# You are given four squares as below with numbers named a,b,c,d,e,f,g. +# +# (1) (3) +# ╔══════════════╗ ╔══════════════╗ +# ║ ║ ║ ║ +# ║ a ║ ║ e ║ +# ║ ║ (2) ║ ║ (4) +# ║ ┌───╫──────╫───┐ ┌───╫─────────┐ +# ║ │ ║ ║ │ │ ║ │ +# ║ │ b ║ ║ d │ │ f ║ │ +# ║ │ ║ ║ │ │ ║ │ +# ║ │ ║ ║ │ │ ║ │ +# ╚══════════╪═══╝ ╚═══╪══════╪═══╝ │ +# │ c │ │ g │ +# │ │ │ │ +# │ │ │ │ +# └──────────────┘ └─────────────┘ +# Write a script to place the given unique numbers in the square box so that sum of numbers in each box is the same. +# +# Example +# Input: 1,2,3,4,5,6,7 +# +# Output: +# +# a = 6 +# b = 4 +# c = 1 +# d = 5 +# e = 2 +# f = 3 +# g = 7 +# +# Box 1: a + b = 6 + 4 = 10 +# Box 2: b + c + d = 4 + 1 + 5 = 10 +# Box 3: d + e + f = 5 + 2 + 3 = 10 +# Box 4: f + g = 3 + 7 = 10 +# +# +# +# +# © 2021 colin crain +## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + +from itertools import permutations + + + +def find_solutions ( lst ): + out = [] + for candidate in list( permutations(lst) ): + (v, n) = validate( candidate ) + if v: + out.append( [candidate, n] ) + return out + +def validate ( lst ): + n = lst[0] + lst[1] + return ( (n == lst[1] + lst[2] + lst[3] + == lst[3] + lst[4] + lst[5] + == lst[5] + lst[6]), n ) + +def report ( tup ): + (list, n) = tup + + print(f''' + =============================== + solution + sum is {n} + values: + ''') + + letter_values = zip( ['a','b','c','d','e','f','g'] , list ) + for lv in letter_values: + print(f"\t\t{lv[0]} = {lv[1]}") + + print(f''' + =============================== + ''') + +input = [1,2,3,4,5,6,7] +solution = find_solutions(input) +if len(solution) > 0: + for sol in solution: + report(sol) -- cgit