aboutsummaryrefslogtreecommitdiff
path: root/challenge-014/paulo-custodio/python/ch-2.py
blob: 03b7edc5f0b33f04adbbcf9167d0dafed8a64347 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/usr/bin/python3

# Challenge 014
#
# Challenge #2
# Using only the official postal (2-letter) abbreviations for the 50 U.S.
# states, write a script to find the longest English word you can spell? Here
# is the list of U.S. states abbreviations as per wikipedia page. This challenge
# was proposed by team member Neil Bowers.
#
# For example,
# Pennsylvania + Connecticut = PACT
# Wisconsin + North Dakota = WIND
# Maine + Alabama = MEAL
# California + Louisiana + Massachusetts + Rhode Island = Calamari

import re
import sys

us_states = {
    'AL':'Alabama',
    'AK':'Alaska',
    'AZ':'Arizona',
    'AR':'Arkansas',
    'CA':'California',
    'CO':'Colorado',
    'CT':'Connecticut',
    'DE':'Delaware',
    'FL':'Florida',
    'GA':'Georgia',
    'HI':'Hawaii',
    'ID':'Idaho',
    'IL':'Illinois',
    'IN':'Indiana',
    'IA':'Iowa',
    'KS':'Kansas',
    'KY':'Kentucky',
    'LA':'Louisiana',
    'ME':'Maine',
    'MD':'Maryland',
    'MA':'Massachusetts',
    'MI':'Michigan',
    'MN':'Minnesota',
    'MS':'Mississippi',
    'MO':'Missouri',
    'MT':'Montana',
    'NE':'Nebraska',
    'NV':'Nevada',
    'NH':'New Hampshire',
    'NJ':'New Jersey',
    'NM':'New Mexico',
    'NY':'New York',
    'NC':'North Carolina',
    'ND':'North Dakota',
    'OH':'Ohio',
    'OK':'Oklahoma',
    'OR':'Oregon',
    'PA':'Pennsylvania',
    'RI':'Rhode Island',
    'SC':'South Carolina',
    'SD':'South Dakota',
    'TN':'Tennessee',
    'TX':'Texas',
    'UT':'Utah',
    'VT':'Vermont',
    'VA':'Virginia',
    'WA':'Washington',
    'WV':'West Virginia',
    'WI':'Wisconsin',
    'WY':'Wyoming',
}

def read_file(filename):
    with open(filename) as f:
        return f.readlines()

def read_words(lines):
    words = []
    for line in lines:
        word = line.strip()
        if not re.search(r"\W", word):
            words.append(word)
    return words

def word_regexp():
    state_abbr = []
    for state in us_states:
        state_abbr.append(state)
    return r"(?i:^("+"|".join(state_abbr)+r")+$)"

def words_like_states(words):
    matched = []
    regexp = word_regexp()
    for word in words:
        if re.match(regexp, word):
            matched.append(word)
    return matched

def longest_words(words):
    longest = []
    size = 0
    for word in words:
        if len(word) > size:
            longest = [word]
            size = len(word)
        elif len(word) == size:
            longest.append(word)
    return longest

def word_to_states(word):
    states = []
    for i in range(0, len(word), 2):
        cc = word[i:i+2].upper()
        states.append(us_states[cc])
    return " + ".join(states)

words = longest_words(words_like_states(read_words(read_file(sys.argv[1]))))
for word in words:
    print(word+" = "+word_to_states(word))