/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
/**
*
* @param numberOfDigits {int}
* @return ArrayList of Integer
*/
public ArrayList<Integer> vdf(int numberOfDigits) {
if ((numberOfDigits % 2) == 1) {
//or throw Exception of unrecognised format/variable?
System.
out.
println("cant operate on odd argument"); return new ArrayList<>();
}
long maxRange = 9;
for (int i = 1; i < numberOfDigits; i++) {
maxRange *= 10;
maxRange += 9;
}//numberOfDigits==4 then maxRange==9999, nOD==5 then maxRange==99999,..
long minRange = 1;
for (int i = 1; i < numberOfDigits; i++) {
minRange *= 10;
}//nOD==4 then minRange==1000, nOD==5 then minRange==10000, ..
ArrayList<Integer> ret = new ArrayList<>();
for (long i = minRange; i < maxRange; i++) {
long a = i;
long[] b = new long[numberOfDigits];
for (int j = numberOfDigits-1; j >= 0 ; j--) {
long c = a % 10;
a = a / 10;
b[j] = c;
}
int x = 0;
int y = 0;
ArrayList<long[]> list = permutations(b);
b = null; //dont need now
for(long[] s : list) {
for (int j = 0; j < numberOfDigits/2; j++) {
x
+= s
[(numberOfDigits
/2)-j
-1] * Math.
pow(10, j
); y
+= s
[numberOfDigits
-j
-1] * Math.
pow(10, j
); }
StringBuilder builder = new StringBuilder();
for (long t : s) {
builder.append(t);
}
String v
= builder.
toString();
if ((v.charAt((v.length()/2)-1) != '0'||
v.charAt(v.length()-1) != '0') &&
x * y == i) {
ret.add(x);
ret.add(y);
System.
out.
println(x
*y
+" "+x
+" "+y
); break;
}
x = y = 0;
}
}
System.
out.
printf("%d vampire numbers found\n", ret.
size()/2); return ret;
}
/**
*
*@return vdf(4)
*/
public ArrayList<Integer> vdf() {
return vdf(4);//without trailing zeros
}
/* permutation code copied from
* johk95
* http://stackoverflow.com/a/20906510
*/
private static ArrayList<long[]> permutations(long[] lol) {
ArrayList<long[]> ret = new ArrayList<>();
permutation(lol, 0, ret);
return ret;
}
private static void permutation(long[] arr, int pos, ArrayList<long[]> list){
if(arr.length - pos == 1)
list.add(arr.clone());
else
for(int i = pos; i < arr.length; i++){
swap(arr, pos, i);
permutation(arr, pos+1, list);
swap(arr, pos, i);
}
}
private static void swap(long[] arr, int pos1, int pos2){
long h = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = h;
}
public static void main
(String[] args
) { Ideone a = new Ideone();
try{
a.vdf(4);
System.
err.
println(e.
getMessage()); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCSAvKioKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBudW1iZXJPZkRpZ2l0cyB7aW50fQogICAgICAgICAqIEByZXR1cm4gQXJyYXlMaXN0IG9mIEludGVnZXIKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgQXJyYXlMaXN0PEludGVnZXI+IHZkZihpbnQgbnVtYmVyT2ZEaWdpdHMpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgobnVtYmVyT2ZEaWdpdHMgJSAyKSA9PSAxKSB7IAogICAgICAgICAgICAgICAgLy9vciB0aHJvdyBFeGNlcHRpb24gb2YgdW5yZWNvZ25pc2VkIGZvcm1hdC92YXJpYWJsZT8KICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FudCBvcGVyYXRlIG9uIG9kZCBhcmd1bWVudCIpOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvbmcgbWF4UmFuZ2UgPSA5OwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1iZXJPZkRpZ2l0czsgaSsrKSB7CiAgICAgICAgICAgICAgICBtYXhSYW5nZSAqPSAxMDsKICAgICAgICAgICAgICAgIG1heFJhbmdlICs9IDk7CiAgICAgICAgICAgIH0vL251bWJlck9mRGlnaXRzPT00IHRoZW4gbWF4UmFuZ2U9PTk5OTksIG5PRD09NSB0aGVuIG1heFJhbmdlPT05OTk5OSwuLgogICAgICAgICAgICAKICAgICAgICAgICAgbG9uZyBtaW5SYW5nZSA9IDE7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bWJlck9mRGlnaXRzOyBpKyspIHsKICAgICAgICAgICAgICAgIG1pblJhbmdlICo9IDEwOwogICAgICAgICAgICB9Ly9uT0Q9PTQgdGhlbiBtaW5SYW5nZT09MTAwMCwgbk9EPT01IHRoZW4gbWluUmFuZ2U9PTEwMDAwLCAuLgogICAgICAgCiAgICAgICAgICAgIEFycmF5TGlzdDxJbnRlZ2VyPiByZXQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgZm9yIChsb25nIGkgPSBtaW5SYW5nZTsgaSA8IG1heFJhbmdlOyBpKyspIHsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgbG9uZyBhID0gaTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgbG9uZ1tdIGIgPSBuZXcgbG9uZ1tudW1iZXJPZkRpZ2l0c107CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBudW1iZXJPZkRpZ2l0cy0xOyBqID49IDAgOyBqLS0pIHsKICAgICAgICAgICAgICAgICAgICBsb25nIGMgPSBhICUgMTA7CiAgICAgICAgICAgICAgICAgICAgYSA9IGEgLyAxMDsKICAgICAgICAgICAgICAgICAgICBiW2pdID0gYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW50IHggPSAwOwogICAgICAgICAgICAgICAgaW50IHkgPSAwOwogICAgICAgICAgICAgICAgQXJyYXlMaXN0PGxvbmdbXT4gbGlzdCA9IHBlcm11dGF0aW9ucyhiKTsKICAgICAgICAgICAgICAgIGIgPSBudWxsOyAvL2RvbnQgbmVlZCBub3cKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yKGxvbmdbXSBzIDogbGlzdCkgewogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtYmVyT2ZEaWdpdHMvMjsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc1sobnVtYmVyT2ZEaWdpdHMvMiktai0xXSAqIE1hdGgucG93KDEwLCBqKTsKICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzW251bWJlck9mRGlnaXRzLWotMV0gKiBNYXRoLnBvdygxMCwgaik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChsb25nIHQgOiBzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoKHYuY2hhckF0KCh2Lmxlbmd0aCgpLzIpLTEpICE9ICcwJ3x8CiAgICAgICAgICAgICAgICAgICAgICAgIHYuY2hhckF0KHYubGVuZ3RoKCktMSkgIT0gJzAnKSAmJgogICAgICAgICAgICAgICAgICAgICAgICB4ICogeSA9PSBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5hZGQoeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5hZGQoeSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4KnkrIiAgIit4KyIgIit5KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHggPSB5ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiJWQgdmFtcGlyZSBudW1iZXJzIGZvdW5kXG4iLCByZXQuc2l6ZSgpLzIpOwogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKioKICAgICAgICAgKiAKICAgICAgICAgKkByZXR1cm4gdmRmKDQpCiAgICAgICAgICovCiAgICAgICAgcHVibGljIEFycmF5TGlzdDxJbnRlZ2VyPiB2ZGYoKSB7CiAgICAgICAgICAgIHJldHVybiB2ZGYoNCk7Ly93aXRob3V0IHRyYWlsaW5nIHplcm9zCiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIHBlcm11dGF0aW9uIGNvZGUgY29waWVkIGZyb20gIAogICAgICAgICAqIGpvaGs5NQogICAgICAgICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIwOTA2NTEwCiAgICAgICAgICovCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0PGxvbmdbXT4gcGVybXV0YXRpb25zKGxvbmdbXSBsb2wpIHsKICAgICAgICAgICAgQXJyYXlMaXN0PGxvbmdbXT4gcmV0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgICAgIHBlcm11dGF0aW9uKGxvbCwgMCwgcmV0KTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwZXJtdXRhdGlvbihsb25nW10gYXJyLCBpbnQgcG9zLCBBcnJheUxpc3Q8bG9uZ1tdPiBsaXN0KXsKICAgICAgICAgICAgaWYoYXJyLmxlbmd0aCAtIHBvcyA9PSAxKQogICAgICAgICAgICAgICAgbGlzdC5hZGQoYXJyLmNsb25lKCkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSBwb3M7IGkgPCBhcnIubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgICAgIHN3YXAoYXJyLCBwb3MsIGkpOwogICAgICAgICAgICAgICAgICAgIHBlcm11dGF0aW9uKGFyciwgcG9zKzEsIGxpc3QpOwogICAgICAgICAgICAgICAgICAgIHN3YXAoYXJyLCBwb3MsIGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzd2FwKGxvbmdbXSBhcnIsIGludCBwb3MxLCBpbnQgcG9zMil7CiAgICAgICAgICAgIGxvbmcgaCA9IGFycltwb3MxXTsKICAgICAgICAgICAgYXJyW3BvczFdID0gYXJyW3BvczJdOwogICAgICAgICAgICBhcnJbcG9zMl0gPSBoOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgIElkZW9uZSBhID0gbmV3IElkZW9uZSgpOwogICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICBhLnZkZig0KTsKICAgICAgICAgICAgfWNhdGNoIChqYXZhLmxhbmcuT3V0T2ZNZW1vcnlFcnJvciBlKXsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgp9