Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pkg15shit;
- import java.math.BigInteger;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Random;
- public class Main {
- public static void main(String[] args) {
- ArrayList<BigInteger> mylist = new ArrayList<BigInteger>();
- mylist.add(new BigInteger("1"));
- mylist.add(new BigInteger("2"));
- mylist.add(new BigInteger("4"));
- mylist.add(new BigInteger("10"));
- mylist.add(new BigInteger("24"));
- mylist.add(new BigInteger("54"));
- mylist.add(new BigInteger("107"));
- mylist.add(new BigInteger("212"));
- mylist.add(new BigInteger("446"));
- mylist.add(new BigInteger("946"));
- mylist.add(new BigInteger("1948"));
- mylist.add(new BigInteger("3938"));
- mylist.add(new BigInteger("7808"));
- mylist.add(new BigInteger("15544"));
- mylist.add(new BigInteger("30821"));
- mylist.add(new BigInteger("60842"));
- mylist.add(new BigInteger("119000"));
- mylist.add(new BigInteger("231844"));
- mylist.add(new BigInteger("447342"));
- mylist.add(new BigInteger("859744"));
- mylist.add(new BigInteger("1637383"));
- mylist.add(new BigInteger("3098270"));
- mylist.add(new BigInteger("5802411"));
- mylist.add(new BigInteger("10783780"));
- mylist.add(new BigInteger("19826318"));
- mylist.add(new BigInteger("36142146"));
- mylist.add(new BigInteger("65135623"));
- mylist.add(new BigInteger("116238056"));
- mylist.add(new BigInteger("204900019"));
- mylist.add(new BigInteger("357071928"));
- mylist.add(new BigInteger("613926161"));
- mylist.add(new BigInteger("1042022040"));
- mylist.add(new BigInteger("1742855397"));
- mylist.add(new BigInteger("2873077198"));
- mylist.add(new BigInteger("4660800459"));
- mylist.add(new BigInteger("7439530828"));
- mylist.add(new BigInteger("11668443776"));
- mylist.add(new BigInteger("17976412262"));
- mylist.add(new BigInteger("27171347953"));
- mylist.add(new BigInteger("40271406380"));
- mylist.add(new BigInteger("58469060820"));
- mylist.add(new BigInteger("83099401368"));
- mylist.add(new BigInteger("115516106664"));
- mylist.add(new BigInteger("156935291234"));
- mylist.add(new BigInteger("208207973510"));
- mylist.add(new BigInteger("269527755972"));
- mylist.add(new BigInteger("340163141928"));
- mylist.add(new BigInteger("418170132006"));
- mylist.add(new BigInteger("500252508256"));
- mylist.add(new BigInteger("581813416256"));
- mylist.add(new BigInteger("657076739307"));
- mylist.add(new BigInteger("719872287190"));
- mylist.add(new BigInteger("763865196269"));
- mylist.add(new BigInteger("784195801886"));
- mylist.add(new BigInteger("777302007562"));
- mylist.add(new BigInteger("742946121222"));
- mylist.add(new BigInteger("683025093505"));
- mylist.add(new BigInteger("603043436904"));
- mylist.add(new BigInteger("509897148964"));
- mylist.add(new BigInteger("412039723036"));
- mylist.add(new BigInteger("317373604363"));
- mylist.add(new BigInteger("232306415924"));
- mylist.add(new BigInteger("161303043901"));
- mylist.add(new BigInteger("105730020222"));
- mylist.add(new BigInteger("65450375310"));
- mylist.add(new BigInteger("37942606582"));
- mylist.add(new BigInteger("20696691144"));
- mylist.add(new BigInteger("10460286822"));
- mylist.add(new BigInteger("4961671731"));
- mylist.add(new BigInteger("2144789574"));
- mylist.add(new BigInteger("868923831"));
- mylist.add(new BigInteger("311901840"));
- mylist.add(new BigInteger("104859366"));
- mylist.add(new BigInteger("29592634"));
- mylist.add(new BigInteger("7766947"));
- mylist.add(new BigInteger("1508596"));
- mylist.add(new BigInteger("272198"));
- mylist.add(new BigInteger("26638"));
- mylist.add(new BigInteger("3406"));
- mylist.add(new BigInteger("70"));
- mylist.add(new BigInteger("17"));
- ArrayList<BigInteger> n = makeNak(mylist);
- int lose = 0;
- int overall = 100000;
- for (int gameId = 0; gameId < overall; gameId++) {
- ArrayList<Integer> movecounts = new ArrayList<Integer>();
- double minavg = 9999;
- for (int i = 1; i <= 100; i++) {
- movecounts.add(getRandomOpt(n));
- if (i >= 5) {
- double avg = smartAverage(movecounts, 1);
- if (minavg > avg) {
- minavg = avg;
- }
- movecounts.remove(0);
- }
- }
- if (minavg >= 50) {
- lose++;
- }
- }
- // System.out.println(lose + " of " + overall);
- double unbeatable = 100 - (double) lose * 100 / (double) overall;
- System.out.println(unbeatable + "%");
- }
- public static double smartAverage(ArrayList<Integer> mylist, int outliers) {
- ArrayList<Integer> sortedlist = new ArrayList<Integer>();
- for (int i = 0; i < mylist.size(); i++) {
- sortedlist.add(mylist.get(i));
- }
- Collections.sort(sortedlist);
- double sum = 0;
- for (int i = outliers; i < mylist.size() - outliers; i++) {
- sum += sortedlist.get(i);
- }
- return (sum / (double) (mylist.size() - 2 * outliers));
- }
- public static int getRandomOpt(ArrayList<BigInteger> newlist) {
- return getCleverRandom(newlist);
- }
- public static int getCleverRandom(ArrayList<BigInteger> nakList) {
- // System.out.println(nakList.get(nakList.size() - 1));
- BigInteger r = getR(nakList.get(nakList.size() - 1));
- for (int i = 0; i <= nakList.size() - 1; i++) {
- //System.out.println("mmmh");
- if (r.compareTo(nakList.get(i)) == -1) //r < el
- {
- return i;
- }
- }
- return (nakList.size() - 1);
- }
- public static BigInteger getR(BigInteger n) {
- Random rand = new Random();
- BigInteger result = new BigInteger(n.bitLength(), rand);
- while (result.compareTo(n) >= 0) {
- result = new BigInteger(n.bitLength(), rand);
- }
- return result.add(BigInteger.ONE);
- }
- public static ArrayList<BigInteger> makeNak(ArrayList<BigInteger> old) {
- BigInteger sum = BigInteger.ZERO;
- ArrayList<BigInteger> ar = new ArrayList<BigInteger>();
- for (int i = 0; i <= old.size() - 1; i++) {
- //System.out.println(old.get(i));
- sum = sum.add(old.get(i));
- //System.out.println(sum);
- ar.add(sum);
- }
- return ar;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement