Skip to content

Commit 977b87a

Browse files
committed
reorg
1 parent f8277a3 commit 977b87a

12 files changed

Lines changed: 191 additions & 83 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
.PHONY = test
22

33
test:
4-
pytest -v test.py
4+
pytest -xv test.py
File renamed without changes.
Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@ def get_args() -> argparse.Namespace:
2727
return parser.parse_args()
2828

2929

30+
# --------------------------------------------------
31+
def main():
32+
"""Make a jazz noise here"""
33+
34+
args = get_args()
35+
words = regex_solution(args.pattern, args.wordlist)
36+
37+
if words:
38+
for i, word in enumerate(words, start=1):
39+
print('{:3}: {}'.format(i, word))
40+
else:
41+
print('Found no words matching "{}".'.format(args.pattern))
42+
43+
3044
# --------------------------------------------------
3145
def regex_solution(pattern: str, wordlist: TextIO) -> List[str]:
3246
"""Using regular expressions"""
@@ -44,44 +58,6 @@ def test_regex_solution():
4458
assert regex_solution('c_e_ry', text()) == ['cherry']
4559

4660

47-
# --------------------------------------------------
48-
def manual_solution(pattern: str, wordlist: TextIO) -> List[str]:
49-
"""Not using regular expressions"""
50-
51-
letters = filter(lambda t: t[1] != '_', enumerate(pattern))
52-
wanted_len = len(pattern)
53-
54-
return list(
55-
filter(
56-
lambda word: len(word) == wanted_len and all(
57-
[word[i] == char for i, char in letters]),
58-
wordlist.read().split()))
59-
60-
61-
# --------------------------------------------------
62-
def test_manual_solution():
63-
"""Test manual_solution"""
64-
65-
text = lambda: io.StringIO('apple banana cherry date')
66-
assert manual_solution('_ppl_', text()) == ['apple']
67-
assert manual_solution('c_e_ry', text()) == ['cherry']
68-
69-
70-
# --------------------------------------------------
71-
def main():
72-
"""Make a jazz noise here"""
73-
74-
args = get_args()
75-
words = regex_solution(args.pattern, args.wordlist)
76-
#words = manual_solution(args.pattern, args.wordlist)
77-
78-
if words:
79-
for i, word in enumerate(words, start=1):
80-
print('{:3}: {}'.format(i, word))
81-
else:
82-
print('Found no words matching "{}".'.format(args.pattern))
83-
84-
8561
# --------------------------------------------------
8662
if __name__ == '__main__':
8763
main()

cross/solution1.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/env python3
2+
"""Crossword helper"""
3+
4+
import argparse
5+
import io
6+
import re
7+
from typing import List, TextIO
8+
9+
10+
# --------------------------------------------------
11+
def get_args() -> argparse.Namespace:
12+
"""Get command-line arguments"""
13+
14+
parser = argparse.ArgumentParser(
15+
description='Crossword helper',
16+
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
17+
18+
parser.add_argument('pattern', metavar='str', help='The pattern to search')
19+
20+
parser.add_argument('-w',
21+
'--wordlist',
22+
help='Wordlist to search',
23+
metavar='str',
24+
type=argparse.FileType('r'),
25+
default='/usr/share/dict/words')
26+
27+
return parser.parse_args()
28+
29+
30+
# --------------------------------------------------
31+
def main():
32+
"""Make a jazz noise here"""
33+
34+
args = get_args()
35+
words = regex_solution(args.pattern, args.wordlist)
36+
37+
if words:
38+
for i, word in enumerate(words, start=1):
39+
print('{:3}: {}'.format(i, word))
40+
else:
41+
print('Found no words matching "{}".'.format(args.pattern))
42+
43+
44+
# --------------------------------------------------
45+
def regex_solution(pattern: str, wordlist: TextIO) -> List[str]:
46+
"""Using regular expressions"""
47+
48+
regex = r'\b{}\b'.format(pattern.replace('_', '.'))
49+
return re.findall(regex, wordlist.read())
50+
51+
52+
# --------------------------------------------------
53+
def test_regex_solution():
54+
"""Test regex_solution"""
55+
56+
text = lambda: io.StringIO('apple banana cherry date')
57+
assert regex_solution('_ppl_', text()) == ['apple']
58+
assert regex_solution('c_e_ry', text()) == ['cherry']
59+
60+
61+
# --------------------------------------------------
62+
if __name__ == '__main__':
63+
main()

cross/solution2.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/usr/bin/env python3
2+
"""Crossword helper"""
3+
4+
import argparse
5+
import io
6+
from typing import List, TextIO
7+
8+
9+
# --------------------------------------------------
10+
def get_args() -> argparse.Namespace:
11+
"""Get command-line arguments"""
12+
13+
parser = argparse.ArgumentParser(
14+
description='Crossword helper',
15+
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
16+
17+
parser.add_argument('pattern', metavar='str', help='The pattern to search')
18+
19+
parser.add_argument('-w',
20+
'--wordlist',
21+
help='Wordlist to search',
22+
metavar='str',
23+
type=argparse.FileType('r'),
24+
default='/usr/share/dict/words')
25+
26+
return parser.parse_args()
27+
28+
29+
# --------------------------------------------------
30+
def main():
31+
"""Make a jazz noise here"""
32+
33+
args = get_args()
34+
words = manual_solution(args.pattern, args.wordlist)
35+
36+
if words:
37+
for i, word in enumerate(words, start=1):
38+
print('{:3}: {}'.format(i, word))
39+
else:
40+
print('Found no words matching "{}".'.format(args.pattern))
41+
42+
43+
# --------------------------------------------------
44+
def manual_solution(pattern: str, wordlist: TextIO) -> List[str]:
45+
"""Not using regular expressions"""
46+
47+
letters = list(filter(lambda t: t[1] != '_', enumerate(pattern)))
48+
wanted_len = len(pattern)
49+
50+
def wanted(word):
51+
return len(word) == wanted_len and all(
52+
[word[i] == char for i, char in letters])
53+
54+
return list(filter(wanted, wordlist.read().split()))
55+
56+
57+
# --------------------------------------------------
58+
def test_manual_solution():
59+
"""Test manual_solution"""
60+
61+
text = lambda: io.StringIO('apple banana cherry date')
62+
assert manual_solution('_ppl_', text()) == ['apple']
63+
assert manual_solution('c_e_ry', text()) == ['cherry']
64+
65+
66+
# --------------------------------------------------
67+
if __name__ == '__main__':
68+
main()
Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#!/usr/bin/env python3
2-
"""tests for helper.py"""
2+
"""tests for cross.py"""
33

44
import re
55
import os
66
import random
77
import string
88
from subprocess import getstatusoutput
99

10-
prg = './helper.py'
10+
prg = './cross.py'
1111

1212

1313
# --------------------------------------------------
@@ -22,24 +22,35 @@ def test_usage():
2222
"""usage"""
2323

2424
for flag in ['-h', '--help']:
25-
rv, out = getstatusoutput('{} {}'.format(prg, flag))
25+
rv, out = getstatusoutput(f'{prg} {flag}')
2626
assert rv == 0
2727
assert out.lower().startswith('usage')
2828

2929

30+
# --------------------------------------------------
31+
def test_bad_wordlist():
32+
"""bad wordlist"""
33+
34+
bad = random_string()
35+
rv, out = getstatusoutput(f'{prg} -w {bad} _t_ed')
36+
assert rv != 0
37+
assert re.search(f"No such file or directory: '{bad}'", out)
38+
39+
3040
# --------------------------------------------------
3141
def test_01():
3242
"""steed"""
3343

34-
rv, out = getstatusoutput('{} _t_ed'.format(prg))
44+
rv, out = getstatusoutput(f'{prg} _t_ed')
3545
assert rv == 0
3646
assert out.rstrip() == ' 1: steed'
3747

48+
3849
# --------------------------------------------------
3950
def test_02():
4051
"""another test"""
4152

42-
rv, out = getstatusoutput('{} ex___s'.format(prg))
53+
rv, out = getstatusoutput(f'{prg} ex___s')
4354
assert rv == 0
4455
expected = """ 1: excess
4556
2: excuss
@@ -49,3 +60,11 @@ def test_02():
4960
6: exomis
5061
""".rstrip()
5162
assert out.rstrip() == expected
63+
64+
65+
# --------------------------------------------------
66+
def random_string():
67+
"""generate a random string"""
68+
69+
k = random.randint(5, 10)
70+
return ''.join(random.choices(string.ascii_letters + string.digits, k=k))

gematria/asciitbl.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import sys
77
import string
88
from itertools import zip_longest
9+
from tabulate import tabulate
910

1011

1112
# --------------------------------------------------
@@ -20,7 +21,9 @@ def main():
2021
def cell(n):
2122
"""Format a cell"""
2223

23-
return '{:3} {:2}'.format(n, chr(n) if n >= 33 else 'NA')
24+
return '{:3} {:5}'.format(
25+
n, 'SPACE'
26+
if n == 32 else 'DEL' if n == 127 else chr(n) if n >= 33 else 'NA')
2427

2528

2629
# --------------------------------------------------

mommys_little_helper/unit.py

Lines changed: 0 additions & 21 deletions
This file was deleted.
File renamed without changes.

0 commit comments

Comments
 (0)