Splice ./universe directory into ./
Manually merging: - README.md: I added the description from universe/README.md into the heading of dotfiles/README.md. - .envrc: dotfiles/.envrc was a superset of universe/.envrc - .gitignore: Adding some of the ignored patterns from universe/.gitignore to dotfiles/.gitignore Everything else here should be a simple rename.
This commit is contained in:
parent
fb9380ba26
commit
5c9079a410
133 changed files with 17 additions and 7979 deletions
|
|
@ -1,83 +0,0 @@
|
|||
import unittest
|
||||
|
||||
|
||||
################################################################################
|
||||
# Answer
|
||||
################################################################################
|
||||
class Node(object):
|
||||
def __init__(self, value, children=set()):
|
||||
self.value = value
|
||||
self.children = children
|
||||
|
||||
|
||||
# treeify :: Char -> Set(Char) -> Node(Char)
|
||||
def treeify(x, xs):
|
||||
return Node(x, [treeify(c, xs - {c}) for c in xs])
|
||||
|
||||
|
||||
# dft :: Node(Char) -> [String]
|
||||
def dft(node):
|
||||
result = []
|
||||
s = []
|
||||
|
||||
s.append(('', node))
|
||||
|
||||
while s:
|
||||
p, n = s.pop()
|
||||
p += str(n.value)
|
||||
|
||||
if not n.children:
|
||||
result.append(p)
|
||||
else:
|
||||
for c in n.children:
|
||||
s.append((p, c))
|
||||
|
||||
return result
|
||||
|
||||
|
||||
# main :: String -> Set(String)
|
||||
def get_permutations(xs):
|
||||
if xs == '':
|
||||
return set([''])
|
||||
|
||||
ys = set(xs)
|
||||
trees = []
|
||||
|
||||
for y in ys:
|
||||
trees.append(treeify(y, ys - {y}))
|
||||
|
||||
result = set()
|
||||
|
||||
for t in trees:
|
||||
for d in dft(t):
|
||||
result.add(d)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
################################################################################
|
||||
# Tests
|
||||
################################################################################
|
||||
class Test(unittest.TestCase):
|
||||
def test_empty_string(self):
|
||||
actual = get_permutations('')
|
||||
expected = set([''])
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_one_character_string(self):
|
||||
actual = get_permutations('a')
|
||||
expected = set(['a'])
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_two_character_string(self):
|
||||
actual = get_permutations('ab')
|
||||
expected = set(['ab', 'ba'])
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_three_character_string(self):
|
||||
actual = get_permutations('abc')
|
||||
expected = set(['abc', 'acb', 'bac', 'bca', 'cab', 'cba'])
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
|
||||
unittest.main(verbosity=2)
|
||||
Loading…
Add table
Add a link
Reference in a new issue