Skip to content

Instantly share code, notes, and snippets.

@carymrobbins
Created February 7, 2022 16:20
Show Gist options
  • Save carymrobbins/76f5c66c828ad5c2bb50679beae23638 to your computer and use it in GitHub Desktop.
Save carymrobbins/76f5c66c828ad5c2bb50679beae23638 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import itertools
import sys
import re
vowels=set('aeiou')
alpha_only = re.compile('^[a-z]+$')
class BCOLORS:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def piglatin(s):
s = s.lower()
if not s:
raise ValueError('Cannot piglatin an empty string!')
if not alpha_only.match(s):
raise ValueError(f'Cannot piglatin non-alpha characters in word: {s}')
if s[0] in vowels:
return s + 'yay'
pieces = [
''.join(s)
for _, s in itertools.groupby(s, lambda c: c in 'aeiou')
]
return ''.join(pieces[1:]) + pieces[0] + 'ay'
args = sys.argv[1:]
if args:
for i, arg in enumerate(sys.argv[1:]):
if i != 0:
sys.stdout.write(' ')
sys.stdout.write(piglatin(arg))
sys.stdout.write('\n')
exit()
print('Press Ctrl-D to quit')
while True:
try:
print(
f'🐷 {BCOLORS.BOLD}{BCOLORS.OKGREEN}' +
' '.join(piglatin(w) for w in input('> ').split()) +
f'{BCOLORS.ENDC}'
)
except ValueError as e:
sys.stderr.write(f'{BCOLORS.FAIL}{e}{BCOLORS.ENDC}\n')
except (EOFError, KeyboardInterrupt):
exit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment