# [Numpy-discussion] A bit long, but would appreciate anyone's help, if time permits!

Fri Jul 23 07:31:07 CDT 2004

Hi.  Like my previous post, my question is not directly related to
Numpy, but I couldn't help posting it since many people here deal with
numbers.  I have a question that requires a bit of explanation.  I
would highly appreciate it if anyone could read this and offer any
suggestions, whenever time permits.

I'm trying to write a program that 1) gives all possible rotations of
an ordered list, 2) chooses the ordering that has the smallest
difference from first to last element of the rotation, and 3) continues
to compare the difference from first to second-to-last element, and so
on, if there was a tie in step 2.

The following is the output of a function I wrote.  The first 6 lines
are all possible rotations of [0,1,3,6,7,10], and this takes care of
step 1 mentioned above.  The last line provides the differences (mod
12).  If the last line were denoted as r, r[0] lists the differences
from first to last element of each rotation (p0 through p5), r[1] the
differences from first to second-to-last element, and so on.

>>> from normal import normal
>>> normal([0,1,3,6,7,10])
[0, 1, 3, 6, 7, 10]	#p0
[1, 3, 6, 7, 10, 0]	#p1
[3, 6, 7, 10, 0, 1]	#p2
[6, 7, 10, 0, 1, 3]	#p3
[7, 10, 0, 1, 3, 6]	#p4
[10, 0, 1, 3, 6, 7]	#p5

[[10, 11, 10, 9, 11, 9], [7, 9, 9, 7, 8, 8], [6, 6, 7, 6, 6, 5], [3, 5,
4, 4, 5, 3], [1, 2, 3, 1, 3, 2]]     #r

Here is my question.  I'm having trouble realizing step 2 (and 3, if
necessary).  In the above case, the smallest number in r[0] is 9, which
is present in both r[0][3] and r[0][5].  This means that p3 and p5 and
only p3 and p5 need to be further compared.  r[1][3] is 7, and r[1][5]
is 8, so the comparison ends here, and the final result I'm looking for
is p3, [6,7,10,0,1,3] (the final 'n' value for 'pn' corresponds to the
final 'y' value for 'r[x][y]').

How would I find the smallest values of a list r[0], take only those
values (r[0][3] and r[0][5]) for further comparison (r[1][3] and
r[1][5]), and finally print a p3?

let me know.

Best,
Kye

My code begins here:
#normal.py
def normal(s):
s.sort()
r = []
q = []
v = []

for x in range(0, len(s)):
k = s[x:]+s[0:x]
r.append(k)

for y in range(0, len(s)):
print r[y], '\t'
d = []
for yy in range(len(s)-1, 0, -1):
w = (r[y][yy]-r[y][0])%12
d.append(w)
q.append(d)

for z in range(0, len(s)-1):
d = []
for zz in range(0, len(s)):
w = q[zz][z]
d.append(w)
v.append(d)
print '\n', v