import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
String url
= "https://m...content-available-to-author-only...a.com/shop/face-wash-facial-cleanser"; System.
out.
println(getPageHash
(url
)); }
long hash = 0L;
char[] characterArray = url.toCharArray();
for (int characterOrd : characterArray) {
long temp1 = getSignedNumber(hash << 5);
long temp2 = getSignedNumber(temp1 - hash);
hash = getSignedNumber(temp2 + (long) characterOrd);
hash = getSignedNumber(hash);
}
return hash
< 0L
? String.
format("0%s",
-hash
) : String.
format("%s", hash
); }
private static long getSignedNumber(long number) {
int bitLength = 32;
long mask
= (long) (Math.
pow(2.0D,
(double) bitLength
) - 1.0D
); long testMask = 1L << bitLength - 1;
return (number & testMask) != 0L ? number | ~mask : number & mask;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUgewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKCQlTdHJpbmcgdXJsID0gImh0dHBzOi8vbS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYS5jb20vc2hvcC9mYWNlLXdhc2gtZmFjaWFsLWNsZWFuc2VyIjsKCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0UGFnZUhhc2godXJsKSk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBhZ2VIYXNoKFN0cmluZyB1cmwpIHsKICAgICAgICBsb25nIGhhc2ggPSAwTDsKICAgICAgICBjaGFyW10gY2hhcmFjdGVyQXJyYXkgPSB1cmwudG9DaGFyQXJyYXkoKTsKICAgICAgICBmb3IgKGludCBjaGFyYWN0ZXJPcmQgOiBjaGFyYWN0ZXJBcnJheSkgewogICAgICAgICAgICBsb25nIHRlbXAxID0gZ2V0U2lnbmVkTnVtYmVyKGhhc2ggPDwgNSk7CiAgICAgICAgICAgIGxvbmcgdGVtcDIgPSBnZXRTaWduZWROdW1iZXIodGVtcDEgLSBoYXNoKTsKICAgICAgICAgICAgaGFzaCA9IGdldFNpZ25lZE51bWJlcih0ZW1wMiArIChsb25nKSBjaGFyYWN0ZXJPcmQpOwogICAgICAgICAgICBoYXNoID0gZ2V0U2lnbmVkTnVtYmVyKGhhc2gpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFzaCA8IDBMID8gU3RyaW5nLmZvcm1hdCgiMCVzIiwgLWhhc2gpIDogU3RyaW5nLmZvcm1hdCgiJXMiLCBoYXNoKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBsb25nIGdldFNpZ25lZE51bWJlcihsb25nIG51bWJlcikgewogICAgICAgIGludCBiaXRMZW5ndGggPSAzMjsKICAgICAgICBsb25nIG1hc2sgPSAobG9uZykgKE1hdGgucG93KDIuMEQsIChkb3VibGUpIGJpdExlbmd0aCkgLSAxLjBEKTsKICAgICAgICBsb25nIHRlc3RNYXNrID0gMUwgPDwgYml0TGVuZ3RoIC0gMTsKICAgICAgICByZXR1cm4gKG51bWJlciAmIHRlc3RNYXNrKSAhPSAwTCA/IG51bWJlciB8IH5tYXNrIDogbnVtYmVyICYgbWFzazsKICAgIH0KfQo=