Convert simple Python code to Java method

I found a piece of code that gives me exactly what I want in an automatic tournament bracket generator: AN ARRAY.

There is a problem. I do not read or write python, but I own (enough) in Java. I do not know if this is the wrong etiquette, but I ask someone to help in converting 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 

What returns pleasant

 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 type of array of increments in two, each of which is one game.

+4
source share
1 answer

A direct translation would be something like this:

 public static List<Integer> cbSeed(int n) { List<Integer> ol = new ArrayList<Integer>(); ol.add(1); int max = (int) Math.ceil(Math.log(n) / Math.log(2)); for (int i = 0; i < max; i++) { int l = 2 * ol.size() + 1; List<Integer> newOl = new ArrayList<Integer>(ol.size() * 2); for (int el : ol) { int e = el; newOl.add(e <= n ? e : 0); e = l - el; newOl.add(e <= n ? e : 0); } ol = newOl; } return ol; } 

As you can see, Java is more verbose :)


You can see that it gives identical results as a Python function:

 for (int i = 2; i < 9; i++) System.out.println(i + "\t" + cbSeed(i)); 
  2 [1, 2]
 3 [1, 0, 2, 3]
 4 [1, 4, 2, 3]
 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]
+5
source

Source: https://habr.com/ru/post/1496673/


All Articles