Skip to content

Commit af1a7b8

Browse files
committed
Day 23: fix typos, simplify if check, and add tests
1 parent 22b398f commit af1a7b8

File tree

1 file changed

+43
-19
lines changed

1 file changed

+43
-19
lines changed

day23/stringsRearrangement.py

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,53 @@ def stringsRearrangement(inputArray):
99
def neighborsDifferByOne(inputArray):
1010
if len(inputArray) <= 1:
1111
return True
12-
return differByOne(inputArray[0], inputArray[1]) and neighborsDifferByOne(inputArray[2:])
12+
return differByOne(inputArray[0], inputArray[1]) and neighborsDifferByOne(inputArray[1:])
1313

1414
def differByOne(word, anotherWord):
15-
if len(word) != len(anotherWord):
16-
return False
17-
1815
differencesCount = 0
1916
for i in xrange(len(word)):
20-
if word[i] != anotherWord[j]:
17+
if word[i] != anotherWord[i]:
2118
differencesCount += 1
22-
23-
if differencesCount == 0 or differencesCount >= 2:
24-
return False
25-
26-
return True
27-
19+
if differencesCount > 1:
20+
return False
21+
22+
return differencesCount == 1
23+
24+
def testDifferByOne():
25+
assert not differByOne("", "")
26+
assert not differByOne("a", "a")
27+
assert not differByOne("aaa", "aaa")
28+
assert not differByOne("abcdeff", "abcedff")
29+
assert differByOne("a", "b")
30+
assert differByOne("abc", "abb")
31+
assert differByOne("abc", "bbc")
32+
assert differByOne("abcdefg", "abcdefz")
33+
34+
def testNeighborsDifferByOne():
35+
assert neighborsDifferByOne([])
36+
assert neighborsDifferByOne([""])
37+
assert neighborsDifferByOne(["a", "b"])
38+
assert neighborsDifferByOne(["a", "b", "c"])
39+
assert neighborsDifferByOne(["ab", "bb"])
40+
assert neighborsDifferByOne(["ab", "bb", "bc"])
41+
assert neighborsDifferByOne(["ab", "bb", "bc", "ba"])
42+
assert neighborsDifferByOne(["abc", "bbc", "bac", "bad"])
43+
assert not neighborsDifferByOne(["a", "a"])
44+
45+
def testStringsRearrangement():
46+
assert stringsRearrangement([])
47+
assert not stringsRearrangement(["aba", "bbb", "bab"])
48+
assert stringsRearrangement(["ab", "bb", "aac"])
49+
assert not stringsRearrangement(["qq", "qq", "qq"])
50+
assert stringsRearrangement(["aaa", "aba", "aaa", "aba", "aaa"])
51+
assert not stringsRearrangement(["ab", "ad", "ef", "eg"])
52+
assert stringsRearrangement(["abc", "abx", "axx", "abx", "abc"])
53+
assert stringsRearrangement(["f", "g", "a", "h"])
2854

2955
def main():
30-
assert stringsRearrangement([], True)
31-
assert stringsRearrangement(["aba", "bbb", "bab"], False)
32-
assert stringsRearrangement(["ab", "bb", "aa"], True)
33-
assert stringsRearrangement(["qq", "qq", "qq"], False)
34-
assert stringsRearrangement(["aaa", "aba", "aaa", "aba", "aaa"], True)
35-
assert stringsRearrangement(["ab", "ad", "ef", "eg"], False)
36-
assert stringsRearrangement(["abc", "abx", "axx", "abx", "abc"], True)
37-
assert stringsRearrangement(["f", "g", "a", "h"], True)
56+
testDifferByOne()
57+
testNeighborsDifferByOne()
58+
testStringsRearrangement()
59+
60+
if __name__ == "__main__":
61+
main()

0 commit comments

Comments
 (0)