From 7fe8991f0992f407a70ea0bbb6eae79ae40733cd Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 13 Sep 2018 21:06:24 +0300 Subject: Add: viite.py --- viite.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 viite.py diff --git a/viite.py b/viite.py new file mode 100644 index 0000000..9de187d --- /dev/null +++ b/viite.py @@ -0,0 +1,38 @@ +import itertools + + +def group(digits, n): + while len(digits) >= n: + yield digits[-n:] + digits = digits[:-n] + yield digits + + +def viitenumero(perus): + perus = ''.join(perus.split()) + assert 4 <= len(perus) <= 20 + assert all(c.isdigit() for c in perus) + + digits = [ord(c) - ord('0') for c in perus] + factors = itertools.cycle([1, 3, 7]) + + total = sum(a * b for a, b in zip(digits, factors)) + + check = 10 - (total % 10) + if check == 10: + check = 0 + + result = digits + [check] + result = ['%d' % digit for digit in result] + result = list(reversed(list(group(result, 5)))) + result = [''.join(g) for g in result] + result = ' '.join(result) + return result + + +if __name__ == '__main__': + import sys + for x in sys.argv[1:]: + print(viitenumero(x)) + +assert(viitenumero('201803') == '20 18032') -- cgit v1.2.1