<s> __author__ = """<STR_LIT>""" <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> from os import getcwd <EOL> from os import sys <EOL> sys . path . append ( getcwd ( ) ) <EOL> from MOAL . helpers . display import Section <EOL> DEBUG = True if __name__ == '<STR_LIT:__main__>' else False <EOL> class Luhn : <EOL> @ staticmethod <EOL> def add_digits ( digits ) : <EOL> def multi ( digit ) : <EOL> if len ( digit ) > <NUM_LIT:1> : <EOL> return sum ( map ( int , list ( digit ) ) ) <EOL> return int ( digit ) <EOL> return sum ( map ( multi , list ( digits ) ) ) <EOL> @ staticmethod <EOL> def checkdigit ( digits ) : <EOL> for k , digit in enumerate ( digits ) : <EOL> if k > <NUM_LIT:0> and k % <NUM_LIT:2> != <NUM_LIT:0> : <EOL> res = int ( digit ) * <NUM_LIT:2> <EOL> if res > <NUM_LIT:10> : <EOL> digits [ k ] = str ( sum ( map ( int , list ( str ( res ) ) ) ) ) <EOL> else : <EOL> digits [ k ] = str ( res ) <EOL> check_digit = sum ( map ( int , digits ) ) * <NUM_LIT:9> <EOL> digits = str ( check_digit ) <EOL> last = len ( digits ) - <NUM_LIT:1> <EOL> return int ( list ( digits ) [ last ] ) <EOL> @ staticmethod <EOL> def test ( number ) : <EOL> digits = list ( str ( number ) ) <EOL> check_digit = Luhn . checkdigit ( digits ) <EOL> _digits = [ ] <EOL> digits = list ( '<STR_LIT>' . format ( number , check_digit ) ) [ : : - <NUM_LIT:1> ] <EOL> for k , digit in enumerate ( digits ) : <EOL> _digit = str ( int ( digit ) * <NUM_LIT:2> ) if k % <NUM_LIT:2> == <NUM_LIT:0> else digit <EOL> _digits . append ( _digit ) <EOL> return Luhn . add_digits ( _digits ) % <NUM_LIT:10> == <NUM_LIT:0> <EOL> if DEBUG : <EOL> with Section ( '<STR_LIT>' ) : <EOL> test_nums = [ <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> <NUM_LIT> , <EOL> ] <EOL> for test in test_nums : <EOL> print ( '<STR_LIT>' . format ( test , Luhn . test ( test ) ) ) </s>
