Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // lifted from bigevildan's pastebin script @ http://pastebin.com/0jGihztm
- int moonsign() {
- switch (my_sign()) {
- case "Mongoose": return 1;
- case "Wallaby": return 2;
- case "Vole": return 3;
- case "Platypus": return 4;
- case "Opossum": return 5;
- case "Marmot": return 6;
- case "Wombat": return 7;
- case "Blender": return 8;
- case "Packrat": return 9;
- case "Bad Moon": return 10;
- default:
- print("Unknown moon sign, guessing 11 as the number.", "red");
- return 11;
- }
- }
- // Euclid's extended GCD algorithm to compute modular inverses.
- int [3] gcd(int a, int b) {
- int [3] ret;
- int s = 0,
- old_s = 1,
- t = 1,
- old_t = 0;
- while (min(a, b) > 0) {
- int c = a;
- int q = a / b;
- a = b;
- b = c % b;
- c = old_s;
- old_s = s;
- s = c - s*q;
- c = old_t;
- old_t = t;
- t = c - t*q;
- }
- ret[0] = max(a, b);
- ret[1] = old_s;
- ret[2] = old_t;
- return ret;
- }
- int invert(int num) {
- num = num % 100;
- num = num >= 0 ? num : num + 100;
- int a = (my_spleen_use() + my_level()) % 100;
- int b = (a * (my_ascensions() + moonsign()) + my_adventures()) % 100;
- int [3] gcd = gcd(100, a);
- if (num < 0 || (num - b) % gcd[0] != 0) {
- print(num + " is not a possible result!", "red");
- } else {
- int temp = (100 + num - b) / gcd[0];
- int val = (100 + gcd(100 / gcd[0], a / gcd[0])[2]) * temp % 100;
- print("To get [" + num + "], enter " + val + " (result: " + (a * val + b) + ")", "green");
- print("(" + a + ", " + b + ")");
- return val;
- }
- return -1;
- }
- void main(int num) {
- invert(num);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement