Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
My First, Using string & re solution in Clear category for CheckSum by d_rabenko
import string, re
def checkio(data):
#replace this for solution
mapping = {}.fromkeys(string.digits + string.ascii_uppercase)
for ch in string.digits:
mapping[ch] = [int(ch), sum(map(int, list(str(2 * int(ch)))))]
for ch in string.ascii_uppercase:
mapping[ch] = [ord(ch) - 48, sum(map(int, list(str(2 * (ord(ch) - 48)))))]
p = re.compile('[^0-9A-Z]')
st = p.sub('', data)
st = st[::-1]
chan = sum([mapping[ch][1] for ch in [st[i] for i in range(0, len(st), 2)]])
un_chan = sum([mapping[ch][0] for ch in [st[i] for i in range(1, len(st), 2)]])
symb = str(10 - (chan + un_chan) % 10 if (chan + un_chan) % 10 != 0 else 0)
return [symb, chan + un_chan]
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
assert (checkio("799 273 9871") == ["3", 67]), "First Test"
assert (checkio("139-MT") == ["8", 52]), "Second Test"
assert (checkio("123") == ["0", 10]), "Test for zero"
assert (checkio("999_999") == ["6", 54]), "Third Test"
assert (checkio("+61 820 9231 55") == ["3", 37]), "Fourth Test"
assert (checkio("VQ/WEWF/NY/8U") == ["9", 201]), "Fifth Test"
print("OK, done!")
Oct. 19, 2017