Lu-yeom / mentor-program-5th-self-learning

0 stars 0 forks source link

week5(2021/5/10~2021/5/16) #5

Open Lu-yeom opened 3 years ago

Lu-yeom commented 3 years ago

日期:110年5月10日(星期一) 今日進度:

課程筆記:

今日心得:今天真的身體不是很舒服,先養精蓄銳明天再加油。

Lu-yeom commented 3 years ago

日期:110年5月11日(星期二)20:00~22:30 今日進度:LIOJ解題

課程筆記: 一、靈魂伴侶:判斷陣列中兩個數字是否相同 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) { const tmp = lines[0].split(' ') //因為是陣列 要分開 const a = Number(tmp[0]) const b = Number(tmp[1]) if (a === b) { console.log('Yes') } else { console.log('No') } }

二、音速小子:秒數*340 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) { const tmp = lines[0].split(' ') const s = Number(tmp[0]) console.log(s*340) }

今日心得:過了一週沒有碰LIOJ,真的就全忘了,這個記憶力實在是太可怕...不過雖然解得很慢,但是錯錯錯就對了(?),想到自己薄弱的邏輯竟然可以AC,真的滿神奇的。

Lu-yeom commented 3 years ago

日期:110年5月12日(星期三)20:30~22:30 今日進度:LIOJ解題

課程筆記: 一、印出聖誕樹 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 n = Number(lines[0]) for(let i =1; i<=n;i++) { printTree(i,n) } for(let i =1; i<=n-1; i++) { printBottom(n) } }

function printTree(i, n) { console.log( repeat(' ', n-i) + repeat('', 2i-1) ) }

function printBottom(n) { console.log(repeat(' ', n-1) + '|') }

function repeat(str, n) { let result = '' for(let i =1; i<=n, i++) { result += str } return result }

二、NN 乘法表:考驗抽象化能力 var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin });

var lines = []

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

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

// 拿到所有資料 function solve(lines) { let N = Number(lines[0]) let M = Number(lines[1]) for(let k=1; k<=N; k++) { for(let i=1; i<=M; i++) { console.log(k + '' + i + '=' + ki) // console.log(${k}*${i}=${k*i}) } } }

今日心得:今天本來想解貪婪演算法的題目,但是看了提示影片,還有其他學長姐的說明文章花了一個小時,還是不懂原理是什麼,只好先做其他題目,然後雙重迴圈我真的很弱...

Lu-yeom commented 3 years ago

日期:110年5月13日(星期四)21:00~22:50 今日進度:LIOJ解題

課程筆記: 一、不合群的人 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 n = Number(lines[0]) let aCount = 0 for(let i = 1; i<lines.length; i++) { if (line[i] === 'A') { aCount++ } } let bCount = n - aCount //只要扣掉A,就可以得出B的數量 if (aCount === bCount) { console.log('PEACE') } else if (aCount === bCount || aCount === 0 || bCount ===0){ //如果全部為A或B的情形也要印出PEACE console.log('PEACE') } else { let aLose = aCount < bCount for(let i = 1; i<lines.length; i++) { if (aLose && lines[i] === 'A') { console.log(i) // 印出不合群的A的位置 } else { if(!aLose && lines[i] === 'B') { console.log(i) //印出不合群的B的位置 } } } } } 紅字部分可以再精簡: let whoLose = aCount < bCount ? 'A' : 'B' for(let i = 1; i<lines.length; i++) { if (whoLose === lines[i]) { console.log(i) // 印出不合群的A或B的位置 } } } }

二、等差數列 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 n = Number(lines[0]) let arr = lines[1].split(' ') if (isValid(arr)) { console.log('YES') } else { console.log('No') } }

function isValid(arr) { let d = arr[1] / arr[0]
for(let i=1;i<arr.length; i++) { if(arr[i] / arr[i -1] !== d) { return false } } return true
}

今日心得:今天練習幾個題目都沒有AC,就算參考解說影片的程式碼也是失敗,不知道是怎麼一回事。

Lu-yeom commented 3 years ago

日期:110年5月14日(星期五)21:00~23:00 今日進度:Lidemy HTTP Challenge

課程筆記: 第0關:送分題,照著貼上網址就對了。 第1關:除了 token 以外順便把 name 一起帶上來,所以要在網址列加上    https://lidemy-http-challenge.herokuapp.com/lv1?token={GOGOGO}&name=Luyeom 第2關:下一關的 token 是 {HellOWOrld},所以第2關要輸入/lv2?token={HellOWOrld} 第3關:書本的id介於54-58之間,一個一個試看看吧! /lv2?token={HellOWOrld}&id=54-58,最後找到是在id=56 第4關:下一關的 token 為{5566NO1},所以要在網址列加上/lv3?token={5566NO1} 第5關:上架書名《大腦喜歡這樣學》,ISBN 為 9789863594475,參考API文件要使用POST的指令 const request = require('request');

const apiurl = 'https://lidemy-http-challenge.herokuapp.com/api/books';

request.post({ url: apiurl, form: { name: '大腦喜歡這樣學', ISBN: '9789863594475', } }, function (error,response,body) { console.log(body) }) 得到{"message":"新增成功","id":"1989"},在網址列加上 /lv3?token={5566NO1}&id=1989 第6關:下一關的 token 為 {LEarnHOWtoLeArn},所以第4關要輸入/lv4?token={LEarnHOWtoLeArn}

今日心得:LIOJ題目一直沒成功,所以放棄來玩HTTP challenge,用闖關的方式來複習真的很有趣,而且成功進到下一關也很有成就感。

Lu-yeom commented 3 years ago

日期:110年5月15日(星期六)22:00~00:30 今日進度:Lidemy HTTP Challenge

課程筆記: 第7關:找錯書了,要找的是書名有:「世界」兩字,而且是村上春樹寫的,回傳id const request = require('request'); const apiurl = encodeURI('https://lidemy-http-challenge.herokuapp.com/api/books?q=世界&author=村上春樹'); //因為用中文查詢會沒有結果,所以用encodeURI轉碼 request.get( apiurl, function (error,response,body) { console.log(body) }) 得出以下資訊: [{"id":2,"name":"當我想你時,全世界都救不了我","author":"肆一","ISBN":"554917349 5"},{"id":27,"name":"從你的全世界路過","author":"張嘉佳","ISBN":"8426216529"},{" id":79,"name":"世界末日與冷酷異境","author":"村上春樹","ISBN":"9571313408"},{"id ":90,"name":"文學的40堂公開課:從神話到當代暢銷書,文學如何影響我們、帶領我們理解這個世界","author":"約翰.薩德蘭","ISBN":"7978376866"}] 發現有'世界’的書名id是79,網址列輸入https://lidemy-http-challenge.herokuapp.com/lv4?token={LEarnHOWtoLeArn}&id=79 進入下一關:https://lidemy-http-challenge.herokuapp.com/lv5?token={HarukiMurakami}

第8關:刪掉id是23的書籍 const request = require('request');

request.delete( 'https://lidemy-http-challenge.herokuapp.com/api/books/23', function (error,response,body) { console.log(body) }) 得到以下訊息: {"message":"\n咦...是刪掉了沒錯,但總覺得哪裡怪怪的,算了,先這樣吧!下一關的 token 為 {CHICKENCUTLET}\n"} 進入下一關:https://lidemy-http-challenge.herokuapp.com/lv6?token={CHICKENCUTLET}

第9關:要先登入才能刪除,得到新的API文件 依照API文件說明,帳密要先經過HTTP認證後才可以,輸入方式為admin:admin123,利用線上網址轉換後得到YWRtaW46YWRtaW4xMjM=

const request = require('request');

const option = { url: 'https://lidemy-http-challenge.herokuapp.com/api/v2/me', headers : { 'Authorization': 'Basic YWRtaW46YWRtaW4xMjM=' } }

function callback (error,response,body) { console.log(body) }

request.get(option, callback)

得到{"username":"admin","email":"lib@lidemy.com"} 把email放入query string就可以了https://lidemy-http-challenge.herokuapp.com/lv6?token={CHICKENCUTLET}&email=lib@lidemy.com 進入下一關:https://lidemy-http-challenge.herokuapp.com/lv7?token={SECurityIsImPORTant}

第10關:這次要把id為89的書籍刪除 const request = require('request');

const option = { url: 'https://lidemy-http-challenge.herokuapp.com/api/v2/books/89', headers : { 'Authorization': 'Basic YWRtaW46YWRtaW4xMjM=' } }

function callback (error,response,body) { console.log(body) }

request.delete(option, callback)

得到以下訊息:{"message":"\n希望下一次進這本書的時候不會再被偷走了。下一關的 token 為 {HsifnAerok}\n"} 進入下一關:https://lidemy-http-challenge.herokuapp.com/lv8?token={HsifnAerok}

第11關:ISBN輸入錯了,要找到書的名字裡面有個「我」,作者的名字是四個字,把最後一碼7改成3 const request = require('request'); const url = encodeURI('https://lidemy-http-challenge.herokuapp.com/api/v2/books?q=我') const option = { url, headers : { 'Authorization': 'Basic YWRtaW46YWRtaW4xMjM=' } }

function callback (error,response,body) { console.log(body) }

request.get(option, callback) 得到以下資訊: [{"id":2,"name":"當我想你時,全世界都救不了我","author":"肆一","ISBN":"5549173495"},{"id":3,"name" :"我殺的人與殺我的人","author":"東山彰良","ISBN":"9262228645"},{"id":7,"name":"你已走遠,我還在練 習道別","author":"渺渺","ISBN":"3722233689"},{"id":9,"name":"你是我最熟悉的陌生人","author":"Middl e","ISBN":"9765734253"},{"id":22,"name":"我輩中人:寫給中年人的情書","author":"張曼娟","ISBN":"724 1428897"},{"id":38,"name":"我和我追逐的垃圾車","author":"謝子凡","ISBN":"7797349452"},{"id":57,"na me":"我的櫻花戀人","author":"宇山佳佑","ISBN":"2947749939"},{"id":60,"name":"你走慢了我的時間","au thor":"張西","ISBN":"8811544334"},{"id":66,"name":"我是許涼涼","author":"李維菁","ISBN":"838919346 4"},{"id":72,"name":"日日好日:茶道教我的幸福15味【電影書腰版】","author":"森下典子","ISBN":"99818 35427"},{"id":90,"name":"文學的40堂公開課:從神話到當代暢銷書,文學如何影響我們、帶領我們理解這個 世界","author":"約翰.薩德蘭","ISBN":"7978376866"},{"id":95,"name":"我想吃掉你的胰臟【電影珍藏版】 ","author":"住野夜","ISBN":"2615985356"},{"id":100,"name":"慢情書:我們會在更好的地方相遇嗎?","au thor":"林達陽","ISBN":"7418527246"}] 符合條件的為id72的書籍,再修改ISBN const request = require('request'); const url = encodeURI('https://lidemy-http-challenge.herokuapp.com/api/v2/books/72') const option = { url, headers : { 'Authorization': 'Basic YWRtaW46YWRtaW4xMjM=' }, form: { ISBN:'9981835423', } }

function callback (error,response,body) { console.log(body) }

request.patch(option, callback)

得到以下訊息: {"message":"\n希望之後他們能引進語音輸入系統,我就只要講講話就好。下一關的 token 為 {NeuN}\n"} 進入下一關:https://lidemy-http-challenge.herokuapp.com/lv9?token={NeuN}

今日心得:從第5關開始就是挑戰了呢,對我來說是難關,查了相關說明也是會一直失敗...尤其是第6關以後都要經過HTTP認證,這個不查學長姐的資料真的是不懂啊...不過也是一個很重要的資訊,要好好記住,明天要破完最後兩關,並完成作業。

Lu-yeom commented 3 years ago

日期:110年5月16日(星期日)15:00-17:30、19:00-22:00 今日進度:Lidemy HTTP Challenge + 寫作業

課程筆記: 第12關:要用帶上一個 X-Library-Number 的 header,拿回回傳值 const request = require('request');

const option = { url:'https://lidemy-http-challenge.herokuapp.com/api/v2/sys_info', //依據API手冊,取得獲取系統資訊要輸入sys_info headers : { 'Authorization': 'Basic YWRtaW46YWRtaW4xMjM=', 'X-Library-Number': '20', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)' //查詢這個網站轉換成從IE6送出的request }, }

function callback (error,response,body) { console.log(body) }

request.get(option, callback)

得到以下資訊: {"message":"success","version":"1A4938Jl7","owner":"lib","createdAt":"1212903293 01"} 找到version的欄位,輸入進query string就可以了https://lidemy-http-challenge.herokuapp.com/lv9?token={NeuN}&version=1A4938Jl7 進入下一關:https://lidemy-http-challenge.herokuapp.com/lv10?token={duZDsG3tvoA}

第13關:猜數字 找到數字為9613,https://lidemy-http-challenge.herokuapp.com/lv10?token={duZDsG3tvoA}&num=9613

今日心得:HTTP Challenge先挑戰到第10關,Huli有新增了關卡,但是能力不足先PASS了。作業是前4週的心得還有閱讀前幾期學長姐的心得文後寫下感想,整體來說這4週的課程我學得滿開心的,雖然作業寫得不好,但是收獲很大,而且看了許多學長姐的心得,發現他們也曾經跟我現在一樣遇到同樣的難關,讓我覺得不孤單。