I've been playing Blue Prince lately & wanted tooling which wasn't
excessive for my simplistic anagram usecase. So I wrote this script.
It comes with no warranty or guarantee but at least it has logging:
#!/usr/bin/env python
# subletter - anagram assistance
import argparse
import logging
parser = argparse.ArgumentParser(
prog='subletter',
description='Extract subsets of letters from a string',
epilog='Created by Binder')
parser.add_argument('--loglevel', '-l', \
nargs=1, help='select what goes in to subletter.log')
args = parser.parse_args()
if args.loglevel:
loglevel = args.loglevel[0]
else:
loglevel = 'WARNING'
numeric_level = getattr(logging, loglevel.upper(), None)
if not isinstance(numeric_level, int):
raise ValueError('Invalid log level: %s' % loglevel)
logger = logging.getLogger(__name__)
logging.basicConfig(filename='subletter.log', encoding='utf-8', level=numeric_level)
pieces = []
def decompose(word):
for i in range(0, len(word)):
if word[i].isspace():
continue
pieces.append(word[i])
letters = input('starting phrase: ')
decompose(letters)
consumed = []
phrase = []
while len(pieces):
try:
used = input('what word do you see? ')
for i in range(0, len(used)):
letter = used[i]
try:
where = pieces.index(letter)
logging.info(f"matched {letter} at index {where}")
consumed.append(letter)
logging.debug(f"adding {letter} to {consumed}")
pieces.pop(where)
logging.debug(f"remaining unmatched: {pieces}")
except ValueError:
if len(consumed) < 1:
continue
else:
raise ValueError
phrase.append(used)
except ValueError:
print( "extra letters" )
phrase.append(used)
print(f"assembled: {phrase}")
print(f"remaining: {pieces}")
continue
print(f"assembled: {phrase}")
print(f"remaining: {pieces}")
print(" ".join(phrase))
In action, it looks like this:
stp@Yttrium blue-prince % ./subletter.py
starting phrase: robert nogula
what word do you see? angular
extra letters
assembled: ['angular']
remaining: ['r', 'o', 'b', 'e', 'r', 't', 'o']
what word do you see? roberto
assembled: ['angular', 'roberto']
remaining: []
angular roberto
stp@Yttrium blue-prince %
The only real feature this has over other anagram work tooling one
might find is that mine allows cheating. It'll remark 'extra letters'
when you are using letters not available. There's no other consequence.