D21_修正第二週作業、繼續第三週


Posted by Christy on 2021-05-10

改第二週作業

改第二週作業,把本地端改好以後,強制推上遠端,出現錯誤訊息:

fatal: The current branch week2 has no upstream branch.
To push the current branch and set the remote as upstream, use

接著我用 git push --set-upstream origin week2,出現第二個錯誤訊息:

 ! [rejected]        week2 -> week2 (non-fast-forward)
error: failed to push some refs to 'https://github.com/Lidemy/mentor-program-5th-LPGUEI.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

後來參考了 Git 文件跟 Google,最後用了 git push -f -u origin week2;因為開始第三週影片,裝了 eslint,改了三次才被認可

恩...好像有點複雜,但是真的是遇到問題才是了解 Git 的開始...我也不確定到底解決問題了沒 😱

跟 eslint 小公主初次見面,妳好妳好。


感謝助教的耐心,提點我作業六的缺失,把它改成下面的版本了:

function isValid(arr) {
  for(var i=0; i<arr.length; i++) {
    if (arr[i] <= 0) return 'invalid'
  }
  for(var i=2; i<arr.length; i++) {
    if (arr[i] !== arr[i-1] + arr[i-2]) return 'invalid'
  }
  return 'valid'
}

isValid([3, 5, 8, 13, 22, 35])

題目:
寫一個叫做 isValid 的函式,傳進一個叫做 arr 的陣列為參數,
判斷該陣列是否為費波那契數列(Fibonacci sequence)
(即陣列前兩項的和是否等於第三項)
如果是,則回傳 'valid';否或者陣列的數小於等於零,則回傳 'invalid'

感謝助教的提醒,這裡特別要注意的是:「這段程式碼真正執行的時候是當呼叫 arr.length 時才去看當下 arr.length 的值。」
所以其實下面的每個 6,應該寫成「檢查 i 是否 < arr.length」;也有可能在其他情況下,arr.length 每次被拿掉一個元素,那長度就會變動了。

執行流程
  1. 把 [3, 5, 8, 13, 22, 35] 這個陣列傳進 isValid 這個函式裡面,總共有 6 個元素,陣列的長度為 6
  2. 執行第一行,i = 0,檢查 i 是否 < 6,是,繼續,開始第一圈迴圈
  3. 執行第二行,檢查陣列第一個元素是否 <= 0,但 3 > 0,否,第一圈結束,回到上一行
  4. 執行第一行,i ++,開始第二圈,i = 1,檢查 i 是否 < 6,是,繼續往下
  5. 執行第二行,檢查陣列第二個元素是否 <= 0,但 5 > 0,否,第二圈結束,回到上一行
  6. 執行第一行,i ++,開始第三圈,i = 2,檢查 i 是否 < 6,是,繼續往下
  7. 執行第二行,檢查陣列第三個元素是否 <= 0,但 8 > 0,否,第三圈結束,回到上一行
  8. 執行第一行,i ++,開始第四圈,i = 3,檢查 i 是否 < 6,是,繼續往下
  9. 執行第二行,檢查陣列第四個元素是否 <= 0,但 13 > 0,否,第四圈結束,回到上一行
  10. 執行第一行,i ++,開始第五圈,i = 4,檢查 i 是否 < 6,是,繼續往下
  11. 執行第二行,檢查陣列第五個元素是否 <= 0,但 22 > 0,否,第五圈結束,回到上一行
  12. 執行第一行,i ++,開始第六圈,i = 5,檢查 i 是否 < 6,是,繼續往下
  13. 執行第二行,檢查陣列第六個元素是否 <= 0,但 35 > 0,否,第六圈結束,回到上一行
  14. 執行第一行,i ++,開始第七圈,i = 6,檢查 i 是否 < 6,否,結束迴圈,繼續往下一行執行
  15. 執行第二個 for 迴圈,i = 2,檢查 i 是否 < 6,是,開始第一圈
  16. 執行下一行,檢查陣列第三個元素 8 是否不等於陣列的第二個元素 5 加上陣列的第一個元素 3,否,第一圈結束,回到上一行
  17. i ++,開始第二圈,i = 3,檢查 i 是否 < 6,是,繼續往下
  18. 執行下一行,檢查陣列第四個元素 13 是否不等於陣列的第三個元素 8 加上陣列的第二個元素 5,否,第二圈結束,回到上一行
  19. i ++,開始第三圈,i = 4,檢查 i 是否 < 6,是,繼續往下
  20. 執行下一行,檢查陣列第五個元素 22 是否不等於陣列的第四個元素 13 加上陣列的第三個元素 8,是,回傳 'invalid',結束迴圈,結束函式。

LIOJ 1027 信用卡號驗證

  • 解題想法:因為連字號阻礙了運算規則,所以最好的方法應該是寫一個把連字號去掉的函式,接著再實作這一題會比較簡單。運算細節:卡號奇數位乘以二,如果大於十,該位數減去九,所有位數相加以及偶數位相加,這兩個相加的總和對十取餘數,整除則檢查碼為零;或者用 10 減去餘數就等於檢查碼。
  • 大方向想法:首先取得 lines 陣列第一位 -> lines[0],總和就等於奇數位加上偶數位。令 ans 為總和對 10 取餘數,如果 ans 不等於零,檢查碼就是 10 - ans;如果檢查碼不等於卡號最後一位,輸出 'INVALID';如果卡號第一位等於 5,輸出 ‘MASTER_CARD’,不然就輸出 ‘VISA’。
  • 寫出函式一:去掉連字號;函式二:偶數位相加;函式三:奇數位相加
var readline = require('readline');

var lines = []
var rl = readline.createInterface({
  input: process.stdin
});

rl.on('line', function (line) {
  lines.push(line)
});

rl.on('close', function() {
  solve(lines)
})

function solve(lines) {
    let input = removeDash(lines[0])
    let sum = evenDigitsCount(input) + oddDigitsCount(input)
    let ans = sum % 10
    if (ans !== 0) {
        ans = 10 - ans
    }
    if (ans !== Number(input[15])) {
        console.log('INVALID')
    } else {
        if (input[0] === '5') {
            console.log('MASTER_CARD')
        } else {
            console.log('VISA')
        }
    }
}

function removeDash(str) {
    let result = ''
    for(i = 0; i < str.length; i++) {
        if(str[i] >= 0 && str[i] <= 9) {
            result += str[i]
        }
    }
    return result
}

function evenDigitsCount(input) {
    let sum = 0
    for (a = 1; a <= 13; a+=2) {
        sum += Number(input[a])
    }
    return sum
}

function oddDigitsCount(input) {
    let sum = 0
    for (i = 0; i <= 15; i+=2) {
        let p = Number(input[i]) * 2
        if (p >= 10) {
            p = p - 9
        }
        sum += p
    }
    return sum
}









Related Posts

S.O.L.I.D 設計原則(一) 內聚力&耦合力

S.O.L.I.D 設計原則(一) 內聚力&耦合力

遍歷節點、操作節點

遍歷節點、操作節點

筆記、[NET101] 網路基礎概論 (1)

筆記、[NET101] 網路基礎概論 (1)


Comments