import java.math.BigInteger;
import java.util.Random;
{
private long min, max;
public StringToSeed
(String targetString,
long min,
long max
) {
this.targetString = targetString;
this.min = min;
this.max = max;
System.
out.
println("Core: " + min
+ " to " + max
); }
public static void main
(String[] args
) {
System.
out.
println(getASeed
("martijn")); }
public static long getASeed
(String str
) {
int cores
= Runtime.
getRuntime().
availableProcessors();
System.
out.
println("Cores: " + cores
); System.
out.
println("Seeds/Core: " + chunkSizePerCore
);
for (int i = 0; i < cores; ++i)
{
StringToSeed sts
= new StringToSeed
(str, min.
add(chunkSizePerCore.
multiply(BigInteger.
valueOf(i
))).
longValue(), min.
add(chunkSizePerCore.
multiply(BigInteger.
valueOf(i
+ 1))).
longValue()); t.start();
}
return 0;
}
@Override
public void run()
{
char[] str = targetString.toCharArray();
seeds: for (long l = min; l != max; l++)
{
r.setSeed(l);
for (int i = 0; i < str.length; i++)
{
if (r.nextInt(26) + 'a' != str[i])
continue seeds;
}
return;
}
}
}
aW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwppbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKCmNsYXNzIFN0cmluZ1RvU2VlZCBpbXBsZW1lbnRzIFJ1bm5hYmxlCnsKCQoJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0U3RyaW5nOwoJcHJpdmF0ZSBsb25nIG1pbiwgbWF4OwoJCglwdWJsaWMgU3RyaW5nVG9TZWVkKFN0cmluZyB0YXJnZXRTdHJpbmcsIGxvbmcgbWluLCBsb25nIG1heCkKCXsKCQl0aGlzLnRhcmdldFN0cmluZyA9IHRhcmdldFN0cmluZzsKCQl0aGlzLm1pbiA9IG1pbjsKCQl0aGlzLm1heCA9IG1heDsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcmU6ICIgKyBtaW4gKyAiIHRvICIgKyBtYXgpOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKGdldEFTZWVkKCJtYXJ0aWpuIikpOwoJfQoKCXB1YmxpYyBzdGF0aWMgbG9uZyBnZXRBU2VlZChTdHJpbmcgc3RyKQoJewoJCUJpZ0ludGVnZXIgbWF4ID0gbmV3IEJpZ0ludGVnZXIoTG9uZy50b1N0cmluZyhMb25nLk1BWF9WQUxVRSkpOwoJCUJpZ0ludGVnZXIgbWluID0gbmV3IEJpZ0ludGVnZXIoTG9uZy50b1N0cmluZyhMb25nLk1JTl9WQUxVRSkpOwoJCQoJCUJpZ0ludGVnZXIgYW1vdW50ID0gbWF4LnN1YnRyYWN0KG1pbik7CgkJaW50IGNvcmVzID0gUnVudGltZS5nZXRSdW50aW1lKCkuYXZhaWxhYmxlUHJvY2Vzc29ycygpOwoJCUJpZ0ludGVnZXIgY2h1bmtTaXplUGVyQ29yZSA9IGFtb3VudC5kaXZpZGUobmV3IEJpZ0ludGVnZXIoSW50ZWdlci50b1N0cmluZyhjb3JlcykpKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcmVzOiAiICsgY29yZXMpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiU2VlZHMvQ29yZTogIiArIGNodW5rU2l6ZVBlckNvcmUpOwoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDwgY29yZXM7ICsraSkKCQl7CgkJCVN0cmluZ1RvU2VlZCBzdHMgPSBuZXcgU3RyaW5nVG9TZWVkKHN0ciwgbWluLmFkZChjaHVua1NpemVQZXJDb3JlLm11bHRpcGx5KEJpZ0ludGVnZXIudmFsdWVPZihpKSkpLmxvbmdWYWx1ZSgpLCBtaW4uYWRkKGNodW5rU2l6ZVBlckNvcmUubXVsdGlwbHkoQmlnSW50ZWdlci52YWx1ZU9mKGkgKyAxKSkpLmxvbmdWYWx1ZSgpKTsKCQkJVGhyZWFkIHQgPSBuZXcgVGhyZWFkKHN0cyk7CgkJCXQuc3RhcnQoKTsKCQl9CgkJCgkJcmV0dXJuIDA7CgkJCgl9CgkKCUBPdmVycmlkZQoJcHVibGljIHZvaWQgcnVuKCkKCXsKCQlSYW5kb20gciA9IG5ldyBSYW5kb20oKTsKCQljaGFyW10gc3RyID0gdGFyZ2V0U3RyaW5nLnRvQ2hhckFycmF5KCk7CgkJc2VlZHM6IGZvciAobG9uZyBsID0gbWluOyBsICE9IG1heDsgbCsrKQoJCXsKCQkJci5zZXRTZWVkKGwpOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykKCQkJewoJCQkJaWYgKHIubmV4dEludCgyNikgKyAnYScgIT0gc3RyW2ldKQoJCQkJCWNvbnRpbnVlIHNlZWRzOwoJCQl9CgkJCVN5c3RlbS5vdXQucHJpbnRsbihsKTsKCQkJcmV0dXJuOwoJCX0KCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwoJfQp9Cg==