From c92b02cfa35b1e4cf76daf913d71b27394790ff8 Mon Sep 17 00:00:00 2001 From: Michael Fried Date: Sat, 19 Jan 2019 22:49:06 +0200 Subject: [PATCH] Editing base64, Adding average file, Editing find_lcm (#673) * avrage.py calculate and print the avrage of number list. * Update base64_cipher.py encoding and decoding base64 without any module. * Update and rename avrage.py to average.py * update find_lcm algorithm I made find_lcm more efficient form O(num1*num2) to O(min{num1,num2}). --- Maths/average.py | 14 +++++++++ Maths/find_lcm.py | 7 +++-- ciphers/base64_cipher.py | 65 ++++++++++++++++++++++++++++++++++++---- 3 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 Maths/average.py diff --git a/Maths/average.py b/Maths/average.py new file mode 100644 index 000000000..dc70836b5 --- /dev/null +++ b/Maths/average.py @@ -0,0 +1,14 @@ +def average(nums): + sum = 0 + n = 0 + for x in nums: + sum += x + n += 1 + avg = sum / n + print(avg) + +def main(): + average([2, 4, 6, 8, 20, 50, 70]) + +if __name__ == '__main__': + main() diff --git a/Maths/find_lcm.py b/Maths/find_lcm.py index 58beb3e37..126242699 100644 --- a/Maths/find_lcm.py +++ b/Maths/find_lcm.py @@ -1,10 +1,11 @@ def find_lcm(num_1, num_2): max = num_1 if num_1 > num_2 else num_2 + lcm = max while (True): - if ((max % num_1 == 0) and (max % num_2 == 0)): + if ((lcm % num_1 == 0) and (lcm % num_2 == 0)): break - max += 1 - return max + lcm += max + return lcm def main(): diff --git a/ciphers/base64_cipher.py b/ciphers/base64_cipher.py index 975f24d6b..fa3451c0c 100644 --- a/ciphers/base64_cipher.py +++ b/ciphers/base64_cipher.py @@ -1,11 +1,64 @@ -import base64 +def encodeBase64(text): + base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + + r = "" #the result + c = 3 - len(text) % 3 #the length of padding + p = "=" * c #the padding + s = text + "\0" * c #the text to encode + + i = 0 + while i < len(s): + if i > 0 and ((i / 3 * 4) % 76) == 0: + r = r + "\r\n" + + n = (ord(s[i]) << 16) + (ord(s[i+1]) << 8 ) + ord(s[i+2]) + + n1 = (n >> 18) & 63 + n2 = (n >> 12) & 63 + n3 = (n >> 6) & 63 + n4 = n & 63 + + r += base64chars[n1] + base64chars[n2] + base64chars[n3] + base64chars[n4] + i += 3 + + return r[0: len(r)-len(p)] + p + +def decodeBase64(text): + base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + s = "" + + for i in text: + if i in base64chars: + s += i + c = "" + else: + if i == '=': + c += '=' + + p = "" + if c == "=": + p = 'A' + else: + if c == "==": + p = "AA" + + r = "" + s = s + p + + i = 0 + while i < len(s): + n = (base64chars.index(s[i]) << 18) + (base64chars.index(s[i+1]) << 12) + (base64chars.index(s[i+2]) << 6) +base64chars.index(s[i+3]) + + r += chr((n >> 16) & 255) + chr((n >> 8) & 255) + chr(n & 255) + + i += 4 + + return r[0: len(r) - len(p)] def main(): - inp = input('->') - encoded = inp.encode('utf-8') #encoded the input (we need a bytes like object) - b64encoded = base64.b64encode(encoded) #b64encoded the encoded string - print(b64encoded) - print(base64.b64decode(b64encoded).decode('utf-8'))#decoded it + print(encodeBase64("WELCOME to base64 encoding")) + print(decodeBase64(encodeBase64("WELCOME to base64 encoding"))) + if __name__ == '__main__': main()