[到codewars打怪獸]我偷了一個會說話的行李箱

[5 kyu]Simple digit code breaker

我偷了一個會說話的行李箱⌚️2016.03.15javascript

怪獸的屬性:

[5 kyu]Simple digit code breaker-問題描述
[5 kyu]Simple digit code breaker-問題描述
&
[5 kyu]Simple digit code breaker-解題區html

怪獸的技能:

[5 kyu]Simple digit code breaker-驗證方式

大木博士的圖鑑:

你今天照常在火車站偷東西,此次的收穫是一個行李箱。正打算依具《偷術大全》裏面的建議,強行把她拆開。但卻在拍乾淨手掌,蹲下身子,準備把她舉到頭上的時候,你忽然聽到有人在說話。java

「喂」git

環顧四周卻又沒有看到什麼人。segmentfault

「把我放下來!」數組

聲音又響起來,你感受聲音是從上方傳來的,不由擡頭看了看手上的行李箱。閉包

你趕忙把箱子放了下了,這個過程當中,箱子裏還有隱約有「哎颯喲颯」的嘟囔。「裏面難道有人?」你內心忽然冒出這樣一個奇怪而可怕的猜想,那麼爲何有我的呢?函數

...具體情節請看《箱之少女》...spa

最後,你瞭解到,這個箱子的密碼會在每十次嘗試以後再自動隨機生成一個新密碼。code

  1. 一開始他回返回個‘空(null)’給你,你得處理這個‘空(null)’,再返回給他一個由0~9三個正整數組成的數組。

  2. 這個數組將會和密碼匹配後再返回一個數組(咱們喚其爲 差距數組)。差距數組表示輸入數與密碼數之間的差距:

    • 輸入數 < 密碼數 --> +1

    • 輸入數 > 密碼數 --> -1

    • 輸入數 = 密碼數 --> 0

  3. 10次嘗試不成功以後,舊密碼失效,新密碼將從新生成。

快快想出辦法來,拯救箱中的少女,而後作些♨️羞羞的事情吧!

戰鬥記錄儀回放:

var guess = [5, 5, 5];①

function tryCode(indications) {
    if (indications != null) {
        for (var i = 0; i <= 2; i++) {
            guess[i] += indications[i];
        }
    }
    return guess;②
}

?竹節:

  1. 這個應當能夠放入 tryCode 方法中去,單獨放置在外面,略微不合適。

  2. 實現單一出口。

  3. ✨兩處均可以簡化,由於 差距數組 的值,就是 猜想數組 要進行的調整。

var guess = [5, 5, 5];
function tryCode(indications) {
    if (indications != null) {
        for (var i = 0; i <= 2; i++) {
            if (indications[i] == 1)✨
                ++guess[i];
            if (indications[i] == -1)✨
                --guess[i];
        }
    }
    return guess;
}
  1. 失誤,‘=’ 和 ‘==’ 。

var guess = [5, 5, 5];
function tryCode(indications) {
    if (indications != null) {
        for (var i = 0; i <= 2; i++) {
            if (indications[i] = 1)✨
                ++guess[i];
            if (indications[i] = -1)✨
                --guess[i];
        }
    }
    return guess;
}
  1. 一開始只把 差距數組 當作表達 大小關係。因而想着用 二分法 來進行調整,最後發現比較複雜,須要考慮的太多。

國際戰場的經典錄像

zarjay

var tryCode = (function() {
  var guess = [5, 5, 5];
  ②return function(indication) {
    guess = indication ?③ guess.map④(function(d, i) { return d + indication[i]; }):guess;
    return guess;
  }
})();①

?竹節:

  1. (function(){})(); ?

  2. function(){return funciton(){}}?

  3. ? & :?

    • 條件(三元目])運算符----[(condition)? expr1 : expr2

    • 是 JavaScript 僅有的使用三個操做數的運算符。本運算符常常做爲 if 語句的簡短形式來使用。

    • 若是條件值爲真值(true),運算符就會返回 expr1 的值;不然, 就會返回 expr2 的值。

  4. map()?


adolfo7x, chunghanliou

var digits = [5, 5, 5];

function tryCode(indications) {
  if (!①indications){ 
    digits = [5, 5, 5];
    return digits;
  }
  
  return digits = digits.map(function(value, index){
    return value + indications[index];
  });
}

竹節:

  1. !?

    • !:邏輯非

      • !(expr)

        • 若是單個表達式能轉換true 的話返回 false ,不然返回 true .

        • 可以轉換爲false的表達式有: null , 0 , ""undefined .

    • ∴ 原表達式 = if(indications == false)

  2. map()?

    • JQ的一個遍歷方法。

    • 《串串香》中的 map 的筆記

    • 若是調用該方法的數據是數組A則 從數組A吃一個數,進行加工並把加工的結果吐出到一個新數組B中去,待吐完最後一個數後把數組B返回去。


MaximeDesRoches

function tryCode(indications) {
  if(indications == null) {
    tryCode.test = [5,5,5];①
    return tryCode.test;
  }
  return tryCode.test = tryCode.test.map(function(c, i){
    if (indications[i] === 0) return c;
    return (indications[i] === 1) ? ++c : --c;
  });
}

竹節:

  1. 爲何tryCode.test在運行結束以後沒有被回收呢?

相關文章
相關標籤/搜索