了解某个JS脚本

时间:2017-04-21 13:01:40

标签: javascript

我正试图解决一个挑战,我得到了这个剧本:

<script>
function r(){
for(var r=0,e=0,a="",l=0;l<n.length;l++)
    if(n[l].toLowerCase()!=n[l]&&(r+=1),8==++e){
        if(!t)
        return;
        a+=String.fromCharCode(r),r=0,e=0
        } else r<<=1;return a
}
var e=!1,t=!1,a=setInterval(function(){
    e&&(t=!0,alert("Your flag is: "+r()),clearInterval(a));t=!1
    },1e3)
    ,n="kACgqAPgqVQbTCycnTVmofqPnOKzvBSPhLAHYtUFsBwykxefnUhiJPdugBmkHCqwrFqDAVPIjJtSShzOnyVAnwkefSZJqXmIfWPWanLtpYeFKJHRuNZgbrWsiAyjsvemyOQSiqFEsiMUraVJfQvWGNWPuSIpjpnBpHYDvoMufeHRfaPWwMrZJJWMgHvlnzTmdPDamBoDfPnpYNtrmmDPjunyxAWvSWZdrQyarFXWhCfYNQMNsxGZoWPXjEUoMAMIuXtGJDWKgPbYlMrCxBBCkhZOiKFSAQvS";
</script>

它说&#34;你的旗帜是:......&#34; 我试图以一种向我显示预期警报的方式执行代码,但我似乎找不到启动setinterval来查看警报的方法。

任何想法?

1 个答案:

答案 0 :(得分:0)

格式化代码:

function r(){
    var r=0,e=0,a="";
    for(l=0;l<n.length;l++){
        if(n[l]!=n[l].toLowerCase()){
            r++;
        }
        e++;
        if(8==e){
           a+=String.fromCharCode(r);
           r=0,e=0;
        } else {
           r<<=1;
        }
    }
    return a;
}

http://jsbin.com/temuqosayo/edit?console

所以你必须在8个字符块中读取它然后转换它:

"kACgqAPg" //=> one char

所以每个大字母都会增加1,从左到右的每次迭代都会有一个leftshift,它等于* 2。所以事实上,每个小写字母都是0,而每个大字母都是1:

"kACgqAPg" 
 01100110

然后转换为char&#34; f&#34;等等。所以你的代码也可能是这样的:

var solution=
n.split("").map(el=>el!=el.toLowerCase()?"1":"0")//small letters=0, big letters=1
.reduce((str,el,i)=>str+el+(!((i+1)%8)?",":""),"").split(",")//group in 8 char strings
.reduce((str,el)=>str+String.fromCharCode(parseInt(el,2),"") //convert one group to its char

http://jsbin.com/rahokinepi/edit?console