summaryrefslogtreecommitdiff
path: root/viite.py
blob: 9de187d03c41c593b176bdde19cc7a05a44acffa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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')