如何将这个区块链脚本变成一行?
how to turn this blockchain script in a one liner?
我知道如何在服务器上使用这个区块链脚本,但我不知道如何将它 minify 成一个函数(只有一个 return),最好是一个 liner :
String.prototype.hashCode = function(){
if(this.length ==0){
return 0;
}else{
return parseInt(this.split('').map(function(char){
return char.charCodeAt(0);
}).reduce(function(current, previous){
return previous + current;
}))+ (this.substr(1, this.length)).hashCode();
}
};
nonce = 0;
while(true){
hash = (transaction + nonce).hashCode() % 1234;
if (hash ==0){
break;
}
nonce++;
}
return nonce;
当然,交易是一个字符串。
我试图用散列替换它,但是由于散列码函数调用自身,我不知道如何在没有函数的情况下管理这个循环。
您的结果必须在上面的缩小 link 中有效:)
这是对原代码的直接翻译
function findNonce( data ){
var buffer, i, hash, nonce = -1;
data = '' + ( data || '' );
do {
hash = 0;
nonce++;
buffer = data + nonce;
i = buffer.length;
while(i--) hash += buffer.charCodeAt(i) * (i+1);
} while ( hash % 1234 );
return nonce;
};
并且,一旦缩小,
function findNonce(n){var e,o,r,t=-1;n=""+(n||"");do for(r=0,t++,e=n+t,o=e.length;o--;)r+=e.charCodeAt(o)*(o+1);while(r%1234);return t}
但如果需要更好的性能,则应对此进行优化,首先计算输入字符串的哈希值,然后仅对每个随机数值进行计算。
function findNonceFast( data ){
var preHash, noncePos, nonce = -1, code;
function hashCalc( s, hash, pos ){
var i = s.length; while(i--) hash += s.charCodeAt(i) * (i+pos+1);
return hash;
};
data = '' + ( data || '' );
preHash = hashCalc( data, 0, 0 );
noncePos = data.length;
do {
nonce++;
code = hashCalc( ''+nonce, preHash, noncePos );
} while (code % 1234)
return nonce;
};
缩小
function findNonceFast(n){function r(n,r,t){for(var e=n.length;e--;)r+=n.charCodeAt(e)*(e+t+1);return r}var t,e,o,a=-1;n=""+(n||""),t=r(n,0,0),e=n.length;do a++,o=r(""+a,t,e);while(o%1234);return a}
我知道如何在服务器上使用这个区块链脚本,但我不知道如何将它 minify 成一个函数(只有一个 return),最好是一个 liner :
String.prototype.hashCode = function(){
if(this.length ==0){
return 0;
}else{
return parseInt(this.split('').map(function(char){
return char.charCodeAt(0);
}).reduce(function(current, previous){
return previous + current;
}))+ (this.substr(1, this.length)).hashCode();
}
};
nonce = 0;
while(true){
hash = (transaction + nonce).hashCode() % 1234;
if (hash ==0){
break;
}
nonce++;
}
return nonce;
当然,交易是一个字符串。 我试图用散列替换它,但是由于散列码函数调用自身,我不知道如何在没有函数的情况下管理这个循环。
您的结果必须在上面的缩小 link 中有效:)
这是对原代码的直接翻译
function findNonce( data ){
var buffer, i, hash, nonce = -1;
data = '' + ( data || '' );
do {
hash = 0;
nonce++;
buffer = data + nonce;
i = buffer.length;
while(i--) hash += buffer.charCodeAt(i) * (i+1);
} while ( hash % 1234 );
return nonce;
};
并且,一旦缩小,
function findNonce(n){var e,o,r,t=-1;n=""+(n||"");do for(r=0,t++,e=n+t,o=e.length;o--;)r+=e.charCodeAt(o)*(o+1);while(r%1234);return t}
但如果需要更好的性能,则应对此进行优化,首先计算输入字符串的哈希值,然后仅对每个随机数值进行计算。
function findNonceFast( data ){
var preHash, noncePos, nonce = -1, code;
function hashCalc( s, hash, pos ){
var i = s.length; while(i--) hash += s.charCodeAt(i) * (i+pos+1);
return hash;
};
data = '' + ( data || '' );
preHash = hashCalc( data, 0, 0 );
noncePos = data.length;
do {
nonce++;
code = hashCalc( ''+nonce, preHash, noncePos );
} while (code % 1234)
return nonce;
};
缩小
function findNonceFast(n){function r(n,r,t){for(var e=n.length;e--;)r+=n.charCodeAt(e)*(e+t+1);return r}var t,e,o,a=-1;n=""+(n||""),t=r(n,0,0),e=n.length;do a++,o=r(""+a,t,e);while(o%1234);return a}