[Tutor] A bit long, but would appreciate anyone's help, if time permits! (original) (raw)
Roel Schroeven rschroev_nospam_ml at fastmail.fm
Sat Jul 24 21:05:00 CEST 2004
- Previous message: [Tutor] A bit long, but would appreciate anyone's help, if time permits!
- Next message: [Tutor] A bit long, but would appreciate anyone's help, if time permits!
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hee-Seng Kye wrote:
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.
I have the impression that the task gets much simpler when the differences are stored differently. I would store all the differences from the first rotation in r[0], all the differences from the second rotation in r[1], etc.
>>> 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
That would become (when using tuples instead of lists, but that's not important):
[(10, 7, 6, 3, 1), (11, 9, 6, 5, 2), (10, 9, 7, 4, 3), (9, 7, 6, 4, 1), (11, 8, 6, 5, 3), (9, 8, 5, 3, 2)]
A simple sort() will put the element you want in the first spot, unless there's something I'm missing. Problem solved!
Just add this to the end of normal(s):
transposed = zip(*v)
print '\n', transposed
withindices = zip(transposed, range(len(transposed)))
result = min(withindices)[1]
print '\n\n', result, r[result](I added the indices to keep track of which element got selected by min())
Result is:
------begin------ [0, 1, 3, 6, 7, 10] [1, 3, 6, 7, 10, 0] [3, 6, 7, 10, 0, 1] [6, 7, 10, 0, 1, 3] [7, 10, 0, 1, 3, 6] [10, 0, 1, 3, 6, 7]
[[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]]
[(10, 7, 6, 3, 1), (11, 9, 6, 5, 2), (10, 9, 7, 4, 3), (9, 7, 6, 4, 1), (11, 8, 6, 5, 3), (9, 8, 5, 3, 2)]
3 [6, 7, 10, 0, 1, 3] --------end-------
which I think is what you're looking for.
Instead of transposing via zip(*v) it might also be possible to generate the data in that way in the first place.
-- "Codito ergo sum" Roel Schroeven
- Previous message: [Tutor] A bit long, but would appreciate anyone's help, if time permits!
- Next message: [Tutor] A bit long, but would appreciate anyone's help, if time permits!
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]