[Edu-sig] Group Theory for Girl Scouts (and Boys too)
Kirby Urner
kurner at oreillyschool.com
Sat Jul 20 06:54:42 CEST 2013
> There's some playfulness here, with duck typing, in that the parameter
> name suggests a set, yet we pass a string, then work with listifications.
> This allows more types of input, yet the output should always be: a dict,
> a mapping, a permutation. Running it now, I get:
>
> P1: {'1': '6', '0': '1', '3': '8', '2': '5', '5': '3', '4': '0', '7':
> '2', '6': '4', '9': '9', '8': '7'}
> P2: {'1': '0', '0': '5', '3': '6', '2': '4', '5': '8', '4': '3', '7':
> '2', '6': '7', '9': '9', '8': '1'}
>
> So what's cyclic notation again? I hadn't gotten that far, as we needed
> an easy way to get permutations. Thanks Python.
>
> Lets work on P1. You start a tuple going (1, 6, 4, 0). See what I did?
> I started with 1, arbitrarily and found it maps to 6. Then I looked up 6
> and found it mapped to 4. I keep following that trail until I either get
> back to where I started, meaning the last element is deemed to connect to
> the first. It's a circle, a cycle. But maybe we're not done. 2 is not
> mentioned so lets start there. 2 maps to 5 maps to 3 maps to 8 maps to 7
> maps to 2. Another circle: (2, 5, 3, 8, 7). Anyone missing? 9, where's
> 9. 9 maps to itself, so (9,) -- using Python notation. And we're done:
> P1 may be expressed as ((0, 1, 6, 4), (2, 5, 3, 8, 7), (9,)). I can start
> with the lowest number in each cycle and sort the cycles by lowest
> leftmost, if I want a canonical order. The above is canonical and unique
> for P1.
>
>
P1 = {'1': '6', '0': '1', '3': '8', '2': '5', '5': '3', '4': '0', '7':
'2', '6': '4', '9': '9', '8': '7'}
P2 = {'1': '0', '0': '5', '3': '6', '2': '4', '5': '8', '4': '3', '7':
'2', '6': '7', '9': '9', '8': '1'}
def get_cyclic(codedict):
"""
Return Permutation dict as a tuple of cyclic tuples, e.g.
(('A','R','C'),('D','Q')...)
"""
dictkeys = list(codedict.keys())
result = []
for i in list(dictkeys): # using copy of dictkeys
newtuple = ()
if i in dictkeys:
initval,nextval = i,i
while True:
newtuple += (nextval,)
dictkeys.remove(nextval)
nextval = codedict[nextval]
if nextval==initval: # cycle complete
break
result.append(newtuple)
return tuple(result)
print(get_cyclic(P1))
print(get_cyclic(P2))
Running....
(('1', '6', '4', '0'), ('3', '8', '7', '2', '5'), ('9',))
(('1', '0', '5', '8'), ('3', '6', '7', '2', '4'), ('9',))
Process finished with exit code 0
Kirby
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20130719/ebc860c4/attachment.html>
More information about the Edu-sig
mailing list