ninty-codes/parse.py

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()