我正试图解决一个挑战,我得到了这个剧本:
<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来查看警报的方法。
任何想法?
答案 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