I found a code snippet that gives me exactly what I want in a automated tournament bracket generator: AN ARRAY.
There is an issue. I do not read nor write python, but I am proficient (enough) in Java. I don't know if this is bad stack overflow etiquette, but I am asking for someone to assist in the conversion of this code to a Java method.
def CBseed( n ):
#returns list of n in standard tournament seed order
#Note that n need not be a power of 2 - 'byes' are returned as zero
ol = [1]
for i in range( int(ceil( log(n) / log(2) ) )):
l = 2*len(ol) + 1
ol = [e if e <= n else 0 for s in [[el, l-el] for el in ol] for e in s]
return ol
Which returns a nice
2 [1, 2] #seed 1 plays seed 2
3 [1, 0, 2, 3] #seed 1 gets a 'by' game and seed 2 plays seed 3
4 [1, 4, 2, 3] #ETC.
5 [1, 0, 4, 5, 2, 0, 3, 0]
6 [1, 0, 4, 5, 2, 0, 3, 6]
7 [1, 0, 4, 5, 2, 7, 3, 6]
8 [1, 8, 4, 5, 2, 7, 3, 6]
#and so on and so forth till this
31 [1, 0, 16, 17, 8, 25, 9, 24, 4, 29, 13, 20, 5, 28, 12, 21, 2, 31, 15, 18, 7, 26, 10, 23, 3, 30, 14, 19, 6, 27, 11, 22]
32 [1, 32, 16, 17, 8, 25, 9, 24, 4, 29, 13, 20, 5, 28, 12, 21, 2, 31, 15, 18, 7, 26, 10, 23, 3, 30, 14, 19, 6, 27, 11, 22]
So the array kind of increments in twos, with every two being one game.
for in
loop,range()
,int()
cast,log()
,len
,if else
, and a return.[e if e <= n else 0 for s in [[el, l-el] for el in ol] for e in s]
is somewhat convoluted for someone who's not fluent in Python.