Last active
December 26, 2015 21:49
-
-
Save bric3/7219119 to your computer and use it in GitHub Desktop.
Another reason to not use java.util.Random for serious random data ;)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Random; | |
public class EasterEgg { | |
public static void main(String[] args) { | |
System.out.println(new EasterEgg()); | |
} | |
public String toString() { | |
return String.format( | |
"%s %s %s %s %s!\n\tSigned by %s, %s, %s, %s, %s, %s, %s, %s%s, %s, %s, %s, %s", | |
prettyString(9168705, 'a'), | |
prettyString(623241, ']'), | |
prettyString(121394, '['), | |
prettyString(156312575, '\\'), | |
prettyString(2773044, '\\'), | |
prettyString(1203740, '\\'), | |
prettyString(669708568, '^'), | |
prettyString(10807722, '`'), | |
prettyString(221827436, '['), | |
prettyString(-70136084, 'e'), | |
prettyString(602660054, 'X'), | |
prettyString(-91532585, ']'), | |
prettyString(900001449, 'Z'), | |
prettyString(900432017, 'l'), | |
prettyString(301097935, '_'), | |
prettyString(-99997884, 'a'), | |
prettyString(378414549, '\\'), | |
prettyString(512314520, '`') | |
); | |
} | |
public static String prettyString(long i, char base) { | |
Random ran = new Random(i); | |
StringBuilder sb = new StringBuilder(); | |
for (int n = 0; ; n++) { | |
int k = ran.nextInt(27); | |
if (k == 0) break; | |
sb.append((char) (base + k)); | |
} | |
return sb.toString(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Random; | |
public class EasterEggGenerator { | |
public static void main(String[] args) { | |
long time = System.currentTimeMillis(); | |
generate("hello", 0L, 1_000_000_000L); | |
generate("from", 0L, 1_000_000_000L); | |
generate("the", 0L, 1_000_000_000L); | |
generate("libon", 0L, 1_000_000_000L); | |
generate("team", 0L, 1_000_000_000L); | |
generate("brice", 0L, 1_000_000_000L); | |
generate("arnaud", 0L, 1_000_000_000L); | |
generate("fabien", 0L, 1_000_000_000L); | |
generate("pierre", 500_000L, 1_000_000_000L); | |
generate("pierre", 500_000_000L, 1_000_000_000L); | |
generate("mimix", -100_000_000L, 1_000_000_000L); | |
generate("tiger", -100_000_000L, 1_000_000_000L); | |
generate("alex", 300_000_000L, 1_000_000_000L); | |
generate("al", 900_000_000L, 1_000_000_000L); | |
generate("nour", 900_000_000L, 1_000_000_000L); | |
generate("pj", -100_000_000L, 1_000_000_000L); | |
generate("romain", -100_000_000L, 1_000_000_000L); | |
generate("duyhai", 500_000L, 1_000_000_000L); | |
System.out.println("Took " + (System.currentTimeMillis() - time) + " ms"); | |
} | |
private static void generate(String goal, long minValue, long maxValue) { | |
long[] seed = generateSeed(goal, minValue, maxValue); | |
System.out.println("prettyString(" + seed[0] + ", '" + (char) seed[1] + "'),\t// => " + prettyString(seed[0], (char) seed[1])); | |
} | |
public static long[] generateSeed(String goal, long start, long finish) { | |
char[] input = goal.toCharArray(); | |
char[] pool = new char[input.length]; | |
label: | |
for (long seed = start; seed < finish; seed++) { | |
Random random = new Random(seed); | |
for (int i = 0; i < input.length; i++) | |
pool[i] = (char) random.nextInt(27); | |
if (random.nextInt(27) == 0) { | |
int base = input[0] - pool[0]; | |
for (int i = 1; i < input.length; i++) { | |
if (input[i] - pool[i] != base) | |
continue label; | |
} | |
return new long[]{seed, base}; | |
} | |
} | |
return null; // sorry got nothing | |
} | |
public static String prettyString(long i, char base) { | |
Random ran = new Random(i); | |
StringBuilder sb = new StringBuilder(); | |
for (int n = 0; ; n++) { | |
int k = ran.nextInt(27); | |
if (k == 0) | |
break; | |
sb.append((char) (base + k)); | |
} | |
return sb.toString(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment