42 lines
1.1 KiB
Python
Executable File
42 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from ninty.codes import CHARSET, safe2real, get_type, parse, validate
|
|
from ninty.example_codes import EXAMPLE_CODES
|
|
from functools import reduce
|
|
|
|
# https://www.reddit.com/r/SwitchHacks/comments/f7psrk/anatomy_of_an_eshop_card_code/
|
|
|
|
import sys
|
|
args = None
|
|
if len(sys.argv) == 1:
|
|
args = EXAMPLE_CODES
|
|
else:
|
|
args = sys.argv[1:]
|
|
seen_chars = {}
|
|
for s in args:
|
|
code_type = get_type(s)
|
|
if not code_type in seen_chars:
|
|
seen_chars[code_type] = set()
|
|
for c in s[1:]:
|
|
seen_chars[code_type].add(c)
|
|
if code_type != 'NUM':
|
|
valid = validate(s)
|
|
print('{} {}'.format(s, "☑ " if valid else "☒ "), end='')
|
|
if not valid:
|
|
print()
|
|
continue
|
|
parse(s)
|
|
else:
|
|
print('{} ??'.format(s), end='')
|
|
parse(s)
|
|
for ct, cc in seen_chars.items():
|
|
cc = sorted(list(cc))
|
|
print('Found characters in type {} codes: '.format(ct), end='')
|
|
for c in CHARSET:
|
|
if c in cc:
|
|
print(c, end='')
|
|
else:
|
|
print('-', end='')
|
|
print()
|