Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.lang.reflect.Field;
- public class Energy {
- private static double espeed = 50;
- private static double ecap = 7000000;
- private static double ebars = 220;
- private static double epower = 320;
- private static double espeedMult1 = 1;
- private static double ecapMult1 = 1.2214;
- private static double ebarsMult1 = 2.619;
- private static double epowerMult1 = 5.026;
- private static double espeedMult2 = 1;
- private static double ecapMult2 = 1.3211;
- private static double ebarsMult2 = 2.0;
- private static double epowerMult2 = 5.168;
- private static double espeedMult3 = 1;
- private static double ecapMult3 = 1.3633;
- private static double ebarsMult3 = 2.000;
- private static double epowerMult3 = 5.585;
- private static double mspeed = 50;
- private static double mcap = 1300000;
- private static double mbars = 45;
- private static double mpower = 55;
- private static double mspeedMult1 = 1;
- private static double mcapMult1 = 1.1726;
- private static double mbarsMult1 = 2.774;
- private static double mpowerMult1 = 4.099;
- private static double mspeedMult2 = 1;
- private static double mcapMult2 = 1.4848;
- private static double mbarsMult2 = 1.595;
- private static double mpowerMult2 = 5.409;
- private static double mspeedMult3 = 1;
- private static double mcapMult3 = 1.5484;
- private static double mbarsMult3 = 1.673;
- private static double mpowerMult3 = 5.86;
- private static double richJerk = 36;
- private static double NGUEnergyFactor = 0.5;
- private static double augmentUpgradeEnergy = 200000;
- private static double preGold = 20330000;
- private static double postGold = 76480000;
- private static int minBlood = 2;
- private static int maxBlood = 3;
- private static boolean ascending = true;
- private static int usedAugment = 1;
- private static double[] NGULevels = { 30, 30, 56 };
- private static double wandoosOSLevel = 30;
- private static double runTime = 720;
- public static void stuff() {
- int max = 6;
- int skill = 1;
- int ticksNeeded = skill * 100;
- double stuff = 0;
- for (int x = 1; x <= 3600; x++) {
- ticksNeeded--;
- stuff += skill * 50;
- if (ticksNeeded == 0 && skill < max) {
- skill++;
- ticksNeeded = skill * 100;
- }
- if ((x % 60) == 0) {
- System.out.println(x / 60 + " min: " + stuff / 10000);
- }
- }
- }
- public static void main(String[] args) {
- try {
- if (1 == 1) {
- }
- // bestPath();
- // for (int x = 0; x<=1800;x+=30){
- Result r = getBest(false, espeed * espeedMult1, ecap * ecapMult1,
- ebars * ebarsMult1, epower * epowerMult1,
- mspeed * mspeedMult1, mcap * mcapMult1, mbars * mbarsMult1,
- mpower * mpowerMult1, 1);
- // System.out.print(x+" :");
- System.out.println("a");
- System.out.println(r.timeMachineTime);
- System.out.println(r.maxTimeMachineMagic);
- System.out.println(r.switch1Time);
- System.out.println(r.switch2Time);
- System.out.println(r.wandoosTime);
- System.out.println(r.efficiency);
- System.out.println("a");
- getEfficiencies();
- // }
- } catch (NoSuchFieldException | SecurityException
- | IllegalArgumentException | IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- class Result {
- double timeMachineTime;
- double efficiency;
- double maxTimeMachineMagic;
- double switch1Time;
- double switch2Time;
- double wandoosTime;
- private Result(double pTimeMachineTime, double pEfficiency,
- double pMaxTimeMachineMagic, double pSwitch1Time,
- double pSwitch2Time, double pWandoosTime) {
- timeMachineTime = pTimeMachineTime;
- efficiency = pEfficiency;
- maxTimeMachineMagic = pMaxTimeMachineMagic;
- switch1Time = pSwitch1Time;
- switch2Time = pSwitch2Time;
- wandoosTime = pWandoosTime;
- }
- }
- enum Blood {
- Blood1(3 * Math.pow(10, 7), 2 * Math.pow(10, 6), 1), Blood2(
- 1 * Math.pow(10, 10), 2 * Math.pow(10, 7),
- 50), Blood3(2 * Math.pow(10, 12), 2 * Math.pow(10, 8),
- 2000), Blood4(4 * Math.pow(10, 14), 2 * Math.pow(10, 9),
- 60000), Blood5(8 * Math.pow(10, 16),
- 2 * Math.pow(10, 10),
- 1200000), Blood6(1.6 * Math.pow(10, 19),
- 2 * Math.pow(10, 11),
- 18000000), Blood7(
- 3.2 * Math.pow(10, 21),
- 2 * Math.pow(10, 12),
- 250000000);
- double cost;
- double time;
- double gain;
- Blood(double cost, double time, double gain) {
- this.cost = cost;
- this.time = time;
- this.gain = gain;
- }
- }
- enum Augment {
- Augment1(1 * Math.pow(10, 4), 4 * Math.pow(10, 5), 1 * Math.pow(10, 0),
- 1.0), Augment2(2 * Math.pow(10, 5), 7.2 * Math.pow(10, 6),
- 2.5 * Math.pow(10, 1),
- 1.1), Augment3(4 * Math.pow(10, 6),
- 1.28 * Math.pow(10, 8), 6.25 * Math.pow(10, 2),
- 1.2), Augment4(8 * Math.pow(10, 7),
- 2.2 * Math.pow(10, 9),
- 1.5625 * Math.pow(10, 4),
- 1.3), Augment5(1.6 * Math.pow(10, 9),
- 4.2 * Math.pow(10, 10),
- 3.90625 * Math.pow(10, 5), 1.4);
- double cost;
- double time;
- double gain;
- double factor;
- Augment(double cost, double time, double gain, double factor) {
- this.cost = cost;
- this.time = time;
- this.gain = gain;
- this.factor = factor;
- }
- }
- enum AugmentUpgrade {
- AugmentUpgrade1(1 * Math.pow(10, 7), 1), AugmentUpgrade2(
- 5 * Math.pow(10, 8), 1), AugmentUpgrade3(2.5 * Math.pow(10, 10),
- 1), AugmentUpgrade4(1.25 * Math.pow(10, 12),
- 1), AugmentUpgrade5(6.25 * Math.pow(10, 13), 1);
- double cost;
- double time;
- AugmentUpgrade(double cost, double time) {
- this.cost = cost;
- this.time = time;
- }
- }
- private static void getEfficiencies()
- throws NoSuchFieldException, SecurityException,
- IllegalArgumentException, IllegalAccessException {
- double currentEfficiency = getBest(true, espeed * espeedMult1,
- ecap * ecapMult1, ebars * ebarsMult1, epower * epowerMult1,
- mspeed * mspeedMult1, mcap * mcapMult1, mbars * mbarsMult1,
- mpower * mpowerMult1, 1).efficiency;
- String[] fieldNames = {
- /*
- * "espeed", "espeed", "espeed", "espeed", "espeed", "espeed",
- */ "ecap", "ecap", "ebars", "epower",
- "epower",
- /*
- * "mspeed", "mspeed", "mspeed", "mspeed", "mspeed", "mspeed",
- */ "mcap", "mcap", "mbars", "mbars", "mpower", "mpower",
- "mpower", "richJerk" };
- double[] addedValues = { /* 0.1, 0.5, 1, 5, 12.5, 25, */ 100000,
- 1000000, 10, 10, 50,
- /* 0.1, 0.5, 1, 5, 12.5, 25, */ 100000, 1000000, 1, 10, 1, 10,
- 50, 1 };
- double[] addedCost = { /* 2, 10, 20, 100, 250, 500, */ 400, 4000,
- 800, 1500, 7500, /* 3, 15, 30, 150, 375, 750, */ 1200,
- 12000, 240, 2400, 450, 4500, 22500, 600 };
- Energy energy = new Energy();
- for (int x = 0; x < fieldNames.length; x++) {
- System.out.print(fieldNames[x] + "(" + addedValues[x] + ")" + ": ");
- Double addValue = addedValues[x];
- Double cost = addedCost[x];
- Field field = energy.getClass().getDeclaredField(fieldNames[x]);
- Double value = field.getDouble(energy);
- field.setDouble(energy, value + addValue);
- double nguSpeedup = 1;
- if (fieldNames[x].equals("ecap")
- || fieldNames[x].equals("epower")) {
- nguSpeedup = (value + addValue) / value;
- }
- System.out.println(1 + ((getBest(true, espeed * espeedMult1,
- ecap * ecapMult1, ebars * ebarsMult1, epower * epowerMult1,
- mspeed * mspeedMult1, mcap * mcapMult1, mbars * mbarsMult1,
- mpower * mpowerMult1, nguSpeedup).efficiency
- / currentEfficiency) - 1) / cost * 1000);
- field.setDouble(energy, value);
- }
- }
- private static Result getBest(boolean silent, double pESpeed, double pECap,
- double pEBars, double pEPower, double pMSpeed, double pMCap,
- double pMBars, double pMPower, double pNguSpeedup)
- throws NoSuchFieldException, SecurityException,
- IllegalArgumentException, IllegalAccessException {
- double bestEff = 0;
- double bestTimeMachineTime = 0;
- double bestTimeMachineMagicCap = 0;
- double bestWandoosTime = 0;
- for (double x = 0.3 * runTime; x <= 0.7 * runTime; x += 0.01
- * runTime) {
- for (double y = 0.3 * runTime; y <= 0.7 * runTime; y += 0.01
- * runTime) {
- for (double w = 0 ; w <= 10 ; w += 10) {
- double newEff = efficiency(x, y, pESpeed, pECap, pEBars,
- pEPower, pMSpeed, pMCap, pMBars, pMPower, true,
- pNguSpeedup, w).efficiency;
- if (newEff > bestEff) {
- bestEff = newEff;
- bestTimeMachineTime = x;
- bestTimeMachineMagicCap = y;
- bestWandoosTime = w;
- }}
- }
- }
- Result res = efficiency(bestTimeMachineTime, bestTimeMachineMagicCap,
- pESpeed, pECap, pEBars, pEPower, pMSpeed, pMCap, pMBars,
- pMPower, silent, pNguSpeedup, bestWandoosTime);
- Energy energy = new Energy();
- return energy.new Result(bestTimeMachineTime, bestEff,
- bestTimeMachineMagicCap, res.switch1Time, res.switch2Time, res.wandoosTime);
- }
- private static Result efficiency(double timeMachineEnergyTime,
- double timeMachineMagicTime, double pESpeed, double pECap,
- double pEBars, double pEPower, double pMSpeed, double pMCap,
- double pMBars, double pMPower, boolean silent, double pNguSpeedup,
- double pWandoosTime) {
- double baseAugmentUpgradeCost = AugmentUpgrade.values()[usedAugment
- - 1].cost;
- double baseAugmentTime = Augment.values()[usedAugment - 1].time
- / pEPower;
- double baseTimeMachineEnergyTime = 1000000000 / pEPower;
- double baseTimeMachineMagicTime = 1000000000 / pMPower;
- double gold = 0;
- double time = 0;
- double energy = 0;
- double magic = 0;
- double timeMachineEnergyLevel = 0;
- double timeMachineMagicLevel = 0;
- double blood = 0;
- double augmentLevel = 0;
- double augmentUpgradeLevel = 0;
- double timeMachineEnergyProgress = 0;
- double timeMachineMagicProgress = 0;
- double augmentProgress = 0;
- boolean[] hasPaidForCurrentBlood = { false, false, false, false, false,
- false, false };
- double switch1Time = 0;
- double switch2Time = 0;
- boolean swapped1 = false;
- boolean swapped2 = false;
- double wandoosTimeNeeded = 500000000;
- double wandoosEnergyProgress = 0;
- double wandoosMagicProgress = 0;
- double wandoosEnergyLevels = 0;
- double wandoosMagicLevels = 0;
- int[] bloodCounter = { 0, 0, 0, 0, 0, 0, 0 };
- double[] bloodGains = { 0, 0, 0, 0, 0, 0, 0 };
- double baseGold = preGold;
- while (time < runTime) {
- time++;
- energy += (pEBars * 50d / Math.max(1, Math.ceil(50d / pESpeed)));
- energy = Math.min(energy, pECap);
- magic += (pMBars * 50d / Math.max(1, Math.ceil(50d / pMSpeed)));
- magic = Math.min(magic, pMCap);
- gold += baseGold * Math.min(50, (1 + timeMachineEnergyLevel))
- * Math.max(1, (timeMachineEnergyLevel - 49))
- * (1 + timeMachineMagicLevel);
- if (!swapped1 && (energy == pECap || magic == pMCap)) {
- pESpeed *= espeedMult2 / espeedMult1;
- pECap *= ecapMult2 / ecapMult1;
- pEBars *= ebarsMult2 / ebarsMult1;
- pEPower *= epowerMult2 / epowerMult1;
- pMSpeed *= mspeedMult2 / mspeedMult1;
- pMCap *= mcapMult2 / mcapMult1;
- pMBars *= mbarsMult2 / mbarsMult1;
- pMPower *= mpowerMult2 / mpowerMult1;
- swapped1 = true;
- switch1Time = time;
- baseAugmentTime *= epowerMult1 / epowerMult2;
- baseTimeMachineEnergyTime *= epowerMult1 / epowerMult2;
- baseTimeMachineMagicTime *= mpowerMult1 / mpowerMult2;
- }
- if (time < timeMachineMagicTime) {
- for (int x = 0; x < 50; x++) {
- timeMachineMagicProgress += magic / 50;
- if (timeMachineMagicProgress > (1 + timeMachineMagicLevel)
- * baseTimeMachineMagicTime) {
- timeMachineMagicProgress = 0;
- timeMachineMagicLevel++;
- }
- }
- } else if (time <= runTime - pWandoosTime) {
- double remainingMagic = magic;
- for (int x = (ascending ? minBlood : maxBlood); ascending
- ? x <= maxBlood
- : x >= minBlood; x += (ascending ? 1 : -1)) {
- if (remainingMagic <= 100) {
- break;
- }
- double bloodCost = Blood.values()[x - 1].cost;
- double bloodTime = Blood.values()[x - 1].time / pMPower;
- double acc = 0;
- double usedMagic = 0;
- double ticks = 0;
- while (true) {
- ticks++;
- acc += remainingMagic / 50;
- if (acc >= bloodTime) {
- usedMagic = remainingMagic / (acc / bloodTime);
- remainingMagic -= usedMagic;
- break;
- }
- }
- if (!silent && time == -1 && x == 2) {
- System.out.println(ticks);
- System.out.println(usedMagic);
- }
- double completions = (int) (50 / ticks);
- double rest = 50 % ((int) ticks);
- double canPayFor = (int) (gold / bloodCost);
- double auto = Math.min(completions, canPayFor);
- gold -= bloodCost * auto;
- blood += Blood.values()[x - 1].gain * auto;
- bloodGains[x - 1] += Blood.values()[x - 1].gain * auto;
- for (int y = 0; y < rest
- + (completions - auto) * ticks; y++) {
- if (!hasPaidForCurrentBlood[x - 1]) {
- if (gold >= bloodCost) {
- gold -= bloodCost;
- hasPaidForCurrentBlood[x - 1] = true;
- } else {
- break;
- }
- }
- if (hasPaidForCurrentBlood[x - 1]) {
- bloodCounter[x - 1]++;
- if (bloodCounter[x - 1] >= ticks) {
- hasPaidForCurrentBlood[x - 1] = false;
- blood += Blood.values()[x - 1].gain;
- bloodGains[x - 1] += Blood.values()[x - 1].gain;
- bloodCounter[x - 1] = 0;
- }
- }
- }
- }
- }
- if (time < timeMachineEnergyTime) {
- for (int x = 0; x < 50; x++) {
- timeMachineEnergyProgress += energy / 50;
- if (timeMachineEnergyProgress > (1 + timeMachineEnergyLevel)
- * baseTimeMachineEnergyTime) {
- timeMachineEnergyProgress = 0;
- timeMachineEnergyLevel++;
- }
- }
- } else {
- if (time > timeMachineEnergyTime + 15 && !swapped2) {
- baseGold = postGold;
- pESpeed *= espeedMult3 / espeedMult2;
- pECap *= ecapMult3 / ecapMult2;
- pEBars *= ebarsMult3 / ebarsMult2;
- pEPower *= epowerMult3 / epowerMult2;
- pMSpeed *= mspeedMult3 / mspeedMult2;
- pMCap *= mcapMult3 / mcapMult2;
- pMBars *= mbarsMult3 / mbarsMult2;
- pMPower *= mpowerMult3 / mpowerMult2;
- swapped2 = true;
- switch2Time = time;
- baseAugmentTime *= epowerMult2 / epowerMult3;
- baseTimeMachineEnergyTime *= epowerMult2 / epowerMult3;
- baseTimeMachineMagicTime *= mpowerMult2 / mpowerMult3;
- }
- if (time <= runTime - pWandoosTime) {
- double usableEnergy = energy * (1 - NGUEnergyFactor)
- - augmentUpgradeEnergy;
- for (int x = 0; x < 50; x++) {
- augmentProgress += usableEnergy / 50;
- if (augmentProgress > baseAugmentTime
- * (augmentLevel + 1)) {
- augmentLevel++;
- augmentProgress = 0;
- }
- }
- }
- for (int x = 0; x < 50; x++) {
- if (gold > baseAugmentUpgradeCost
- * Math.pow(augmentUpgradeLevel + 1, 2)) {
- gold -= baseAugmentUpgradeCost
- * Math.pow(augmentUpgradeLevel + 1, 2);
- augmentUpgradeLevel++;
- } else {
- break;
- }
- }
- }
- if (time > runTime - pWandoosTime) {
- double usableEnergy = energy - augmentUpgradeEnergy;
- for (int x = 0; x < 50; x++) {
- wandoosEnergyProgress += usableEnergy / 50d / 3600d * time;
- wandoosMagicProgress += magic / 50d / 3600d * time;
- if (wandoosEnergyProgress >= wandoosTimeNeeded
- / (1 + wandoosOSLevel)) {
- wandoosEnergyProgress = 0;
- wandoosEnergyLevels++;
- }
- if (wandoosMagicProgress >= wandoosTimeNeeded
- / (1 + wandoosOSLevel)) {
- wandoosMagicProgress = 0;
- wandoosMagicLevels++;
- }
- }
- }
- }
- if (!silent) {
- System.out.println("TME: " + timeMachineEnergyLevel);
- System.out.println("TMM: " + timeMachineMagicLevel);
- System.out.println("Blood: " + blood);
- System.out.println("Augment: " + augmentLevel);
- System.out.println("Upgrade: " + augmentUpgradeLevel);
- // for (int x = 0; x < 7; x++) {
- // System.out.println(bloodGains[x]);
- // }
- }
- double NGUFactor = 1;
- NGUFactor *= (1 + 0.05 * NGULevels[2] * Math.sqrt(pNguSpeedup))
- / (1 + 0.05 * NGULevels[2]);
- NGUFactor *= (1 + 0.01 * NGULevels[0] * Math.sqrt(pNguSpeedup))
- / (1 + 0.01 * NGULevels[0]);
- NGUFactor *= Math
- .pow(((1 + 0.01 * NGULevels[1] * Math.sqrt(pNguSpeedup))
- / (1 + 0.01 * NGULevels[1])), 0.85);
- double wandoosFactor = Math.pow((1 + wandoosEnergyLevels * 0.01)
- * (1 + wandoosMagicLevels * 0.04), 0.8);
- double eff = (1 + (Math.pow(augmentLevel,
- Augment.values()[usedAugment - 1].factor)
- * Augment.values()[usedAugment - 1].gain)) * (1 + blood)
- * (1 + Math.pow(augmentUpgradeLevel, 2)) * richJerk * NGUFactor
- * wandoosFactor;
- Energy energy1 = new Energy();
- return energy1.new Result(0, eff, 0, switch1Time, switch2Time, pWandoosTime);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement