Josephus problem: Difference between revisions
Content added Content deleted
Line 1,087: | Line 1,087: | ||
2 5 8 11 14 17 20 23 26 29 32 35 38 0 4 9 13 18 22 27 31 36 40 6 12 19 25 33 39 7 16 28 37 10 24 1 21 3 |
2 5 8 11 14 17 20 23 26 29 32 35 38 0 4 9 13 18 22 27 31 36 40 6 12 19 25 33 39 7 16 28 37 10 24 1 21 3 |
||
Survivors: [15, 30, 34]</pre> |
Survivors: [15, 30, 34]</pre> |
||
{{trans|Javascript}} |
|||
<lang java5>import java.util.ArrayList; |
|||
import java.util.List; |
|||
public class Josephus { |
|||
public static void main(String[] args) { |
|||
execute(5, 1); |
|||
execute(41, 2); |
|||
execute(23482, 3342, 3); |
|||
} |
|||
public static int[][] execute(int n, int k) { |
|||
return execute(n, k, 1); |
|||
} |
|||
public static int[][] execute(int n, int k, int s) { |
|||
List<Integer> ps = new ArrayList<Integer>(n); |
|||
for (int i=0; i<n; i+=1) ps.add(i); |
|||
List<Integer> ks = new ArrayList<Integer>(n-s); |
|||
for (int i=k; ps.size()>s; i=(i+k)%ps.size()) ks.add(ps.remove(i)); |
|||
System.out.printf("Josephus(%d,%d,%d) -> %s / %s\n", n, k, s, toString(ps), toString(ks)); |
|||
return new int[][] { |
|||
ps.stream().mapToInt(Integer::intValue).toArray(), |
|||
ks.stream().mapToInt(Integer::intValue).toArray() |
|||
}; |
|||
} |
|||
private static String toString(List <Integer> ls) { |
|||
String dot = ""; |
|||
if (ls.size() >= 45) { |
|||
dot = ", ..."; |
|||
ls = ls.subList(0, 45); |
|||
} |
|||
String s = ls.toString(); |
|||
return s.substring(1, s.length()-1) + dot; |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Josephus(5,1,1) -> 2 / 1, 3, 0, 4 |
|||
Josephus(41,2,1) -> 30 / 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 0, 4, 9, 13, 18, 22, 27, 31, 36, 40, 6, 12, 19, 25, 33, 39, 7, 16, 28, 37, 10, 24, 1, 21, 3, 34, 15 |
|||
Josephus(23482,3342,3) -> 1087, 1335, 13317 / 3342, 6685, 10028, 13371, 16714, 20057, 23400, 3261, 6605, 9949, 13293, 16637, 19981, 23325, 3187, 6532, 9877, 13222, 16567, 19912, 23257, 3120, 6466, 9812, 13158, 16504, 19850, 23196, 3060, 6407, 9754, 13101, 16448, 19795, 23142, 3007, 6355, 9703, 13051, 16399, 19747, 23095, 2961, 6310, 9659, ... |
|||
</pre> |
|||
=={{header|JavaScript}}== |
=={{header|JavaScript}}== |