Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.91 KB | None | 0 0
  1. package pkg15shit;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.Random;
  7.  
  8. public class Main {
  9.  
  10. public static void main(String[] args) {
  11.  
  12. ArrayList<BigInteger> mylist = new ArrayList<BigInteger>();
  13.  
  14. mylist.add(new BigInteger("1"));
  15. mylist.add(new BigInteger("2"));
  16. mylist.add(new BigInteger("4"));
  17. mylist.add(new BigInteger("10"));
  18. mylist.add(new BigInteger("24"));
  19. mylist.add(new BigInteger("54"));
  20. mylist.add(new BigInteger("107"));
  21. mylist.add(new BigInteger("212"));
  22. mylist.add(new BigInteger("446"));
  23. mylist.add(new BigInteger("946"));
  24. mylist.add(new BigInteger("1948"));
  25. mylist.add(new BigInteger("3938"));
  26. mylist.add(new BigInteger("7808"));
  27. mylist.add(new BigInteger("15544"));
  28. mylist.add(new BigInteger("30821"));
  29. mylist.add(new BigInteger("60842"));
  30. mylist.add(new BigInteger("119000"));
  31. mylist.add(new BigInteger("231844"));
  32. mylist.add(new BigInteger("447342"));
  33. mylist.add(new BigInteger("859744"));
  34. mylist.add(new BigInteger("1637383"));
  35. mylist.add(new BigInteger("3098270"));
  36. mylist.add(new BigInteger("5802411"));
  37. mylist.add(new BigInteger("10783780"));
  38. mylist.add(new BigInteger("19826318"));
  39. mylist.add(new BigInteger("36142146"));
  40. mylist.add(new BigInteger("65135623"));
  41. mylist.add(new BigInteger("116238056"));
  42. mylist.add(new BigInteger("204900019"));
  43. mylist.add(new BigInteger("357071928"));
  44. mylist.add(new BigInteger("613926161"));
  45. mylist.add(new BigInteger("1042022040"));
  46. mylist.add(new BigInteger("1742855397"));
  47. mylist.add(new BigInteger("2873077198"));
  48. mylist.add(new BigInteger("4660800459"));
  49. mylist.add(new BigInteger("7439530828"));
  50. mylist.add(new BigInteger("11668443776"));
  51. mylist.add(new BigInteger("17976412262"));
  52. mylist.add(new BigInteger("27171347953"));
  53. mylist.add(new BigInteger("40271406380"));
  54. mylist.add(new BigInteger("58469060820"));
  55. mylist.add(new BigInteger("83099401368"));
  56. mylist.add(new BigInteger("115516106664"));
  57. mylist.add(new BigInteger("156935291234"));
  58. mylist.add(new BigInteger("208207973510"));
  59. mylist.add(new BigInteger("269527755972"));
  60. mylist.add(new BigInteger("340163141928"));
  61. mylist.add(new BigInteger("418170132006"));
  62. mylist.add(new BigInteger("500252508256"));
  63. mylist.add(new BigInteger("581813416256"));
  64. mylist.add(new BigInteger("657076739307"));
  65. mylist.add(new BigInteger("719872287190"));
  66. mylist.add(new BigInteger("763865196269"));
  67. mylist.add(new BigInteger("784195801886"));
  68. mylist.add(new BigInteger("777302007562"));
  69. mylist.add(new BigInteger("742946121222"));
  70. mylist.add(new BigInteger("683025093505"));
  71. mylist.add(new BigInteger("603043436904"));
  72. mylist.add(new BigInteger("509897148964"));
  73. mylist.add(new BigInteger("412039723036"));
  74. mylist.add(new BigInteger("317373604363"));
  75. mylist.add(new BigInteger("232306415924"));
  76. mylist.add(new BigInteger("161303043901"));
  77. mylist.add(new BigInteger("105730020222"));
  78. mylist.add(new BigInteger("65450375310"));
  79. mylist.add(new BigInteger("37942606582"));
  80. mylist.add(new BigInteger("20696691144"));
  81. mylist.add(new BigInteger("10460286822"));
  82. mylist.add(new BigInteger("4961671731"));
  83. mylist.add(new BigInteger("2144789574"));
  84. mylist.add(new BigInteger("868923831"));
  85. mylist.add(new BigInteger("311901840"));
  86. mylist.add(new BigInteger("104859366"));
  87. mylist.add(new BigInteger("29592634"));
  88. mylist.add(new BigInteger("7766947"));
  89. mylist.add(new BigInteger("1508596"));
  90. mylist.add(new BigInteger("272198"));
  91. mylist.add(new BigInteger("26638"));
  92. mylist.add(new BigInteger("3406"));
  93. mylist.add(new BigInteger("70"));
  94. mylist.add(new BigInteger("17"));
  95. ArrayList<BigInteger> n = makeNak(mylist);
  96.  
  97. int lose = 0;
  98. int overall = 100000;
  99.  
  100. for (int gameId = 0; gameId < overall; gameId++) {
  101. ArrayList<Integer> movecounts = new ArrayList<Integer>();
  102. double minavg = 9999;
  103. for (int i = 1; i <= 100; i++) {
  104. movecounts.add(getRandomOpt(n));
  105. if (i >= 5) {
  106. double avg = smartAverage(movecounts, 1);
  107. if (minavg > avg) {
  108. minavg = avg;
  109. }
  110. movecounts.remove(0);
  111. }
  112. }
  113. if (minavg >= 50) {
  114. lose++;
  115. }
  116.  
  117. }
  118. // System.out.println(lose + " of " + overall);
  119. double unbeatable = 100 - (double) lose * 100 / (double) overall;
  120.  
  121. System.out.println(unbeatable + "%");
  122. }
  123.  
  124. public static double smartAverage(ArrayList<Integer> mylist, int outliers) {
  125. ArrayList<Integer> sortedlist = new ArrayList<Integer>();
  126. for (int i = 0; i < mylist.size(); i++) {
  127. sortedlist.add(mylist.get(i));
  128. }
  129.  
  130. Collections.sort(sortedlist);
  131. double sum = 0;
  132. for (int i = outliers; i < mylist.size() - outliers; i++) {
  133. sum += sortedlist.get(i);
  134. }
  135. return (sum / (double) (mylist.size() - 2 * outliers));
  136. }
  137.  
  138. public static int getRandomOpt(ArrayList<BigInteger> newlist) {
  139. return getCleverRandom(newlist);
  140. }
  141.  
  142. public static int getCleverRandom(ArrayList<BigInteger> nakList) {
  143. // System.out.println(nakList.get(nakList.size() - 1));
  144. BigInteger r = getR(nakList.get(nakList.size() - 1));
  145.  
  146. for (int i = 0; i <= nakList.size() - 1; i++) {
  147. //System.out.println("mmmh");
  148. if (r.compareTo(nakList.get(i)) == -1) //r < el
  149. {
  150. return i;
  151.  
  152. }
  153.  
  154. }
  155. return (nakList.size() - 1);
  156. }
  157.  
  158. public static BigInteger getR(BigInteger n) {
  159. Random rand = new Random();
  160. BigInteger result = new BigInteger(n.bitLength(), rand);
  161. while (result.compareTo(n) >= 0) {
  162. result = new BigInteger(n.bitLength(), rand);
  163. }
  164.  
  165. return result.add(BigInteger.ONE);
  166. }
  167.  
  168. public static ArrayList<BigInteger> makeNak(ArrayList<BigInteger> old) {
  169. BigInteger sum = BigInteger.ZERO;
  170. ArrayList<BigInteger> ar = new ArrayList<BigInteger>();
  171. for (int i = 0; i <= old.size() - 1; i++) {
  172. //System.out.println(old.get(i));
  173. sum = sum.add(old.get(i));
  174. //System.out.println(sum);
  175. ar.add(sum);
  176. }
  177. return ar;
  178. }
  179.  
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement