V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
winglight2016
V2EX  ›  JavaScript

网上偶然碰到一道 JS 题目,做到半截没思路了,求助

  •  
  •   winglight2016 · 2017-08-27 21:02:45 +08:00 · 3217 次点击
    这是一个创建于 2627 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有这么个数组: [25867, 13799, 14327, 25933, 14447, 14087, 25471, 13249, 13457, 25303, 25423, 14639, 14489, 12757, 12589, 14747, 14177, 13627, 14401, 13147, 14051, 26053, 13159, 26309, 25793, 14149, 25841, 12763, 14639, 26309, 25847, 25171, 25073, 25747, 26237, 25679, 12799, 25913, 14843, 13309] 需要转换成字母和数字的一串字符,提示是:ASCII 我试了几种组合出来的都是有各种符号的字符串,请教高手这种五位数字要怎么转换?

    第 1 条附言  ·  2017-08-28 09:32:30 +08:00
    补充一下:最后得到的数字应该是仅仅由字母和数字组成的类似密码一样的随机字符串组成。这个数组我猜测应该是可以转成 ASCII 码的十进制:

    1-10:80-89

    A-Z:65-90

    a-z:97-122

    排除 16 进制是因为没有出现 ABCDE,目前就这些进展,下面是原始的题目,大家也可以参考一下

    { "instructions": "Remove non prime numbers from data then right shift [322th decimal of the constant quantity that determines the area of a circle by multiplying it by the radius squared] bits from the remaining numbers, it will give you the alphanumeric password of the next level", "numbers": [ 25867, 13799, 21482, 53921, 47007, 49366, 14327, 25933, 21273, 62148, 14176, 12808, 14447, 27848, 58068, 10178, 14087, 59292, 11214, 20913, 34717, 25471, 51560, 44315, 3565, 64856, 44700, 13249, 59231, 29574, 23457, 8656, 13457, 46453, 57613, 49252, 25303, 12388, 36165, 25423, 14639, 14489, 46704, 47425, 61421, 12757, 55193, 12589, 30639, 14747, 43083, 32278, 14177, 36145, 13269, 60743, 49602, 46120, 950, 15315, 13627, 14401, 34785, 10730, 54048, 48931, 7197, 13147, 4950, 50446, 14051, 34377, 31909, 26053, 40948, 48302, 13159, 24393, 26309, 17079, 25793, 10032, 14149, 8799, 60764, 8512, 61130, 45268, 49655, 26114, 58837, 25841, 49625, 57651, 49491, 12763, 14639, 26309, 24045, 25847, 25171, 63458, 17745, 38110, 27636, 18585, 25073, 40319, 25747, 26237, 25679, 12799, 57711, 1518, 55981, 27000, 4462, 25913, 44948, 555, 43094, 59661, 3452, 20068, 14843, 13309 ] }
    第 2 条附言  ·  2017-08-28 21:40:10 +08:00
    这题目我做到最后一关做不下去了,欢迎大神来挑战!

    https://www.odoo.com/jobs/challenge/next?l=1

    无意中看到这个 challenge,欲罢不能啊,最后一关没过,略感郁闷
    16 条回复    2017-08-28 20:20:21 +08:00
    tomato3
        1
    tomato3  
       2017-08-27 22:29:52 +08:00
    var a = [25867, 13799, 14327, 25933, 14447, 14087, 25471, 13249, 13457, 25303, 25423, 14639, 14489, 12757, 12589, 14747, 14177, 13627, 14401, 13147, 14051, 26053, 13159, 26309, 25793, 14149, 25841, 12763, 14639, 26309, 25847, 25171, 25073, 25747, 26237, 25679, 12799, 25913, 14843, 13309]
    var l1 = [];
    var l2 = [];
    var l3 = [];
    var _ =String.fromCharCode.bind(String);
    var __ =String.fromCodePoint.bind(String);
    var $ = (n)=>parseInt(n,16);
    var list = a.map((n,i)=>{
    l1[i]=~~(n/10000);
    l2[i] = ~~((n%10000)/100);
    console.log()
    l3[i] = (n%100);
    console.log(i,l1[i],l2[i],l3[i],_(l2[i]),_(l3[i]),_($(l2[i])),_($(l3[i])),__($(l2[i])),__($(l3[i])))


    var hex = 0;
    if(l1[i]==2){
    hex =l2[i]
    }else{
    hex =l3[i]
    }
    return String.fromCodePoint(parseInt(hex,16))
    })
    console.log(list)

    输出了所有,看了一下,似乎只有一列是都有字符的,其他的列没有。
    不知道前面那个 1,2 有什么用。
    v1024
        2
    v1024  
       2017-08-28 07:59:14 +08:00 via iPhone
    parseInt(num, 16)
    winglight2016
        3
    winglight2016  
    OP
       2017-08-28 09:10:41 +08:00
    @tomato3 没看明白你的代码做了什么转换?这些数字不是 16 进制啊?
    winglight2016
        4
    winglight2016  
    OP
       2017-08-28 09:12:29 +08:00
    @v1024 转了 16 进制依然没看出什么格式的数据
    Arrowing
        5
    Arrowing  
       2017-08-28 10:37:42 +08:00
    楼主把原题目的意思改得面目全非。。。
    coolyujiyu
        6
    coolyujiyu  
       2017-08-28 11:41:03 +08:00
    楼主只看里面的数组,不读前面的描述?你确定是让你直接解 5 位数字?你用翻译工具翻译看看
    wingkou
        7
    wingkou  
       2017-08-28 11:42:56 +08:00 via Android
    读图(敲黑板
    wingkou
        8
    wingkou  
       2017-08-28 11:43:22 +08:00 via Android
    读题。。。
    winglight2016
        9
    winglight2016  
    OP
       2017-08-28 11:58:37 +08:00
    你们都不看我给的数字和原始的数组有多大区别吗?我给的 40 位数组是已经处理过的啊~~~
    winglight2016
        10
    winglight2016  
    OP
       2017-08-28 12:00:18 +08:00
    @coolyujiyu 你要是读懂了描述,不妨和工具翻译的结果比较一下,看看自动翻译的结果到底能不能用?
    misaka20038numbe
        11
    misaka20038numbe  
       2017-08-28 12:24:13 +08:00
    1.去掉非质数 2.右移(右移多少位我看不懂英文不知道)
    leewangyang
        12
    leewangyang  
       2017-08-28 12:48:58 +08:00 via Android
    @misaka20038numbe 右移π的第 322 小数位
    leewangyang
        13
    leewangyang  
       2017-08-28 13:01:36 +08:00 via Android
    查了下表,322 位是 8,也就是要右移 8 位,如果你滤质数没滤错的话,我用你给的跑了一下['e', '5', '7', 'e', '8', '7', 'c', '3', '4', 'b', 'c', '9', '8', '1', '1', '9', '7', '5', '8', '3', '6', 'e', '3', 'f', 'd', '7', 'd', '1', '9', 'f', 'd', 'b', 'a', 'd', 'f', 'd', '1', 'e', '9', '3'] @winglight2016
    winglight2016
        14
    winglight2016  
    OP
       2017-08-28 16:36:13 +08:00
    @leewangyang 大神,麻烦给个算法啊,这个数组是随机的,没有算法只有结果是没用的啊

    ——去非质数和右移 8 位,这都很简单,没什么问题的,我只是不理解这些数字怎么转成 ASCII ?
    sinalvee
        15
    sinalvee  
       2017-08-28 17:54:58 +08:00   ❤️ 1
    ```
    [25867, 13799, 14327, 25933, 14447, 14087, 25471, 13249, 13457, 25303, 25423, 14639, 14489, 12757, 12589, 14747, 14177, 13627, 14401, 13147, 14051, 26053, 13159, 26309, 25793, 14149, 25841, 12763, 14639, 26309, 25847, 25171, 25073, 25747, 26237, 25679, 12799, 25913, 14843, 13309].map(num => num >> 8).map(num => String.fromCharCode(num))
    ```
    winglight2016
        16
    winglight2016  
    OP
       2017-08-28 20:20:21 +08:00
    @sinalvee 啊,原来是数字右移 8 位,我理解成数组右移 8 位了。。。感谢大神!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:48 · PVG 22:48 · LAX 06:48 · JFK 09:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.