成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

花樣招聘面試題

e10101 / 1464人閱讀

摘要:由于我們得到摩斯密碼沒(méi)有空格隔開(kāi),所以解密后有可能不止一種。完整的代碼得到結(jié)果如下,根據(jù)圖片中的提示,該單詞與面試有關(guān),那么應(yīng)該是無(wú)疑。上面的代碼我們用了層嵌套循環(huán),確實(shí)有點(diǎn)多,但是只有條件成立,才會(huì)進(jìn)入深層的循環(huán)。

殘缺的地圖

今天在微信群里面看到一張招聘圖片,如下

尋找鑰匙

被玷污的殘缺的婀娜多姿的二維碼,蘊(yùn)藏著通往神秘國(guó)度大門的鑰匙。利用微信自帶截圖工具,憑借著我手繪天賦,很快就還原了二維碼。

然后查看圖片,長(zhǎng)按。居然是可以識(shí)別的二維碼,掃一掃,得到下面的摩斯密碼

.--..-......
找到答案

于是,百度摩斯密碼對(duì)照表。

由于我們得到摩斯密碼沒(méi)有空格隔開(kāi),所以解密后有可能不止一種。這個(gè)時(shí)候,身為攻城虱當(dāng)然想到是用程序解決了。

既然,圖片中說(shuō)到是4個(gè)字的單詞,等于這段密碼可以分為4段。

[part1][part2][part3][part4]

如果4段密碼分別都能匹配上,那么連起來(lái)整個(gè)密碼也能匹配上(廢話)。最先想到是用4層循環(huán)窮舉法

for(){
    for(){
        for(){
            for(){
    
            }
        }
    }
}

可是如何把這段密碼分成四段呢?很簡(jiǎn)單,如果電碼符號(hào)與密碼前幾個(gè)字符能完全匹配,這里就分一段,然后繼續(xù)匹配下一段。

for(){
    // 匹配成功
    if([part1][part2][part3][part4].indexOf(xcode[i]) === 0 ){
        for(){
            if([part2][part3][part4].indexOf(xcode[j]) === 0 ){
                
            }
        }
    }
    
}

第四段,也就是最后一段匹配不能再用[indexOf],而是用[===]。

核心匹配代碼

for(i = 0; i < morseCodeNum; i ++){
    if(mission1.indexOf(morseCodeMap[i]) === 0 ){
        firstMatchPart = morseCodeMap[i];
        mission2 = secretCode.slice(firstMatchPart.length);

        for(j = 0; j < morseCodeNum; j ++){

            if(mission2.indexOf(morseCodeMap[j]) === 0 ){
                secondMatchPart = morseCodeMap[j];
                mission3 = secretCode.slice(firstMatchPart.length+secondMatchPart.length);

                for(k = 0; k < morseCodeNum; k ++){
                    if(mission3.indexOf(morseCodeMap[k]) === 0 ){
                        thirdMatchPart = morseCodeMap[k];
                        mission4 = secretCode.slice(firstMatchPart.length+secondMatchPart.length+thirdMatchPart.length);

                        for(n = 0; n < morseCodeNum; n ++){
                            if(mission4 === morseCodeMap[n]){
                                fourthMatchPart = morseCodeMap[n];
                                console.log([firstMatchPart, secondMatchPart, thirdMatchPart, fourthMatchPart].join(""));
                                result.push([letters[i], letters[j], letters[k], letters[n]].join(""));
                                }
                            }
                        }
                    }
                }
            }
        }
    }

注: mission1表示處于匹配第一段密碼,以此類推。

完整的代碼

var morseCodeMap = [
    ".-", "-...", "-.-.", "-..",
    ".",  "..-.", "--.", "....",
    "..", ".---", "-.-", ".-..",
    "--", "-.", "---", ".--.",
    "--.-", ".-.", "...", "-",
    "..-", "...-", ".--", "-..-",
    "-.--", "--.."
], 
secretCode = ".--..-......",
morseCodeNum = morseCodeMap.length,
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

var result = [],
    firstMatchPart,
    secondMatchPart,
    thirdMatchPart,
    fourthMatchPart,
    mission1,
    mission2,
    mission3,
    mission4;

function deCodeMorse(){
    var i, j, k, n;
    mission1 = secretCode;
    for(i = 0; i < morseCodeNum; i ++){
        if(mission1.indexOf(morseCodeMap[i]) === 0 ){
            firstMatchPart = morseCodeMap[i];
            mission2 = secretCode.slice(firstMatchPart.length);

            for(j = 0; j < morseCodeNum; j ++){

                if(mission2.indexOf(morseCodeMap[j]) === 0 ){
                    secondMatchPart = morseCodeMap[j];
                    mission3 = secretCode.slice(firstMatchPart.length+secondMatchPart.length);

                    for(k = 0; k < morseCodeNum; k ++){
                        if(mission3.indexOf(morseCodeMap[k]) === 0 ){
                            thirdMatchPart = morseCodeMap[k];
                            mission4 = secretCode.slice(firstMatchPart.length+secondMatchPart.length+thirdMatchPart.length);

                            for(n = 0; n < morseCodeNum; n ++){
                                if(mission4 === morseCodeMap[n]){
                                    fourthMatchPart = morseCodeMap[n];
                                    console.log([firstMatchPart, secondMatchPart, thirdMatchPart, fourthMatchPart].join(""));
                                    result.push([letters[i], letters[j], letters[k], letters[n]].join(""));
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

deCodeMorse();
console.log(result);    

得到結(jié)果如下,根據(jù)圖片中的提示,該單詞與面試有關(guān),那么應(yīng)該是pass無(wú)疑。

上面的代碼我們用了4層for嵌套循環(huán),確實(shí)有點(diǎn)多,但是只有if條件成立,才會(huì)進(jìn)入深層的循環(huán)。因?yàn)橐笏薪?,是避免不了?

延伸

假如,我們得到的密碼可能不是4段,不確定是幾段,這個(gè)時(shí)候就不能用嵌套for循環(huán)了,可以用遞歸。
核心代碼邏輯

function deCodeMorse(mission[j]){
    for (var i = 0; i < morseCodeNum; i++) {
        if( morseCode.indexOf(morseCodeMap[i]) === 0 ){
            if( morseCode === morseCodeMap[i]){
                // 輸出匹配結(jié)果
            }else{
                deCodeMorse(mission[j+1]);
            }
        }
    }
}

使用遞歸的完整代碼

var morseCodeMap = [
        ".-", "-...", "-.-.", "-..",
        ".",  "..-.", "--.", "....",
        "..", ".---", "-.-", ".-..",
        "--", "-.", "---", ".--.",
        "--.-", ".-.", "...", "-",
        "..-", "...-", ".--", "-..-",
        "-.--", "--.."
    ], 
    secretCode = ".--..-......",
    morseCodeNum = morseCodeMap.length,
    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
    result = [],


function deCodeMorse(morseCode, deCodeResult, stack){
    stack = stack || [];
    for (var i = 0; i < morseCodeNum; i++) {
        if( morseCode.indexOf(morseCodeMap[i]) === 0 ){
            if( morseCode === morseCodeMap[i]){
                deCodeResult.push(stack.concat(letters[i]).join(""));
            }else{
                deCodeMorse(morseCode.slice(morseCodeMap[i].length), deCodeResult, stack.concat(letters[i]));
            }
        }
    }
}

deCodeMorse(secretCode, result);
console.log(result);

我們還可以傳一個(gè)數(shù)字參數(shù)給函數(shù)deCodeMorse,表示密碼由幾段組成,不傳則沒(méi)有限制。那么deCodeMorse函數(shù)可以這樣寫

function deCodeMorse(morseCode, deCodeResult, limit, stack){
    stack = stack || [];
    for (var i = 0; i < morseCodeNum; i++) {
        if( morseCode.indexOf(morseCodeMap[i]) === 0 ){
            if( morseCode === morseCodeMap[i]){
                if(limit){
                    stack.length +1 === limit && deCodeResult.push(stack.concat(letters[i]).join(""));
                }else{
                    deCodeResult.push(stack.concat(letters[i]).join(""));
                }
            }else{
                if(limit){
                    if(stack.length < limit){
                        deCodeMorse(morseCode.slice(morseCodeMap[i].length), deCodeResult, limit, stack.concat(letters[i]));
                    }
                }else{
                    deCodeMorse(morseCode.slice(morseCodeMap[i].length), deCodeResult, limit, stack.concat(letters[i]));
                }
                
            }
        }
    }
}

deCodeMorse(secretCode, result, 4);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98005.html

相關(guān)文章

  • 如何招聘一名優(yōu)秀的前端

    摘要:如何考察一個(gè)人是不是經(jīng)驗(yàn)豐富我們需要在問(wèn)答式的面試中,對(duì)其項(xiàng)目經(jīng)驗(yàn)進(jìn)行挖掘。如何設(shè)置筆試題現(xiàn)在網(wǎng)上有大量的面經(jīng)的存在,對(duì)于我們面試是一個(gè)巨大的挑戰(zhàn)。尊重應(yīng)聘者我們要尊重每一個(gè)來(lái)應(yīng)聘的人,不要輕視別人,或者故意刁難別人。 時(shí)光荏苒,2個(gè)月前,我才剛總結(jié)了如何應(yīng)對(duì)面試官,現(xiàn)在的我開(kāi)始總結(jié)如何面試別人了。笑哭.png 1.我們需要什么樣的人 招聘肯定要有標(biāo)準(zhǔn),這樣我們才能更快的找到我們需要的...

    Mr_houzi 評(píng)論0 收藏0
  • 寒冬中,中級(jí)Android成功跳槽的面經(jīng)

    摘要:在歷時(shí)半個(gè)月,面試失敗了次以后,我拿到了滿意的,薪資同比增長(zhǎng)不止。一定要明確目標(biāo)公司的類型,目的為導(dǎo)向。合適的著裝,對(duì)面試官保持尊敬。所在的公司真的是面過(guò)的公司中規(guī)模待遇最好的。不要因?yàn)楸痪芙^而懷疑自己,最好的在后面。在歷時(shí)半個(gè)月,面試失敗了9次以后,我拿到了滿意的Offer,薪資同比增長(zhǎng)50%不止。 來(lái)北京已經(jīng)一年多了,因?yàn)樵诶蠔|家沒(méi)有太重的開(kāi)發(fā)壓力,讓我有更多的時(shí)間去學(xué)習(xí)Android的...

    waruqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<