第三週作業確認
- 原來這個樣子的程式碼可讀性還不錯,那我要繼續維持這樣的方式。
要記得找時間看一下 《程式英文》 English for Programmers
第三週作業部分:
原本寫這樣
function solve(lines) {
const data = lines[0].split(' ')
for (let i = Number(data[0]); i <= Number(data[1]); i++) {
if (isNarcissistic(i)) {
console.log(i)
}
}
}
- 經過助教提醒,建議可以先用 map 轉換型態
function solve(lines) {
const data = lines[0].split(' ').map(Number) // map()
for (let i = data[0]; i <= data[1]; i++) {
if (isNarcissistic(i)) {
console.log(i)
}
}
}
- 另外如果可以的話,其實三元運算子可以取代 if...else...
求小於 n 的質數,為什麼求到 Math.sqrt(n) 就可以了?
質數除餘範圍,LIOJ 1020,可以只求到 Math.sqrt(n),參考資料:質數有多重要?數學家歐拉和高斯是如何研究質數的?
4'15" 開始,原理在 5'00" 這裡,「如果最大的數是 n 的話,其中比較小的那個因數,肯定小於 √n,把小於 √n 的質數的倍數刪去,剩下的就全部都是質數了。」
例如令 n = 16,開根號以後是 4,小於 4 的質數為 2, 3,把這兩個數的倍數刪去,剩下的就是質數:1, 2, 3,
4, 5,6, 7,8,9,10, 11,12, 13,14,15,16,只剩下 1, 2, 3, 5, 7, 11, 13,其中 1 不是質數也不是合數,因此答案是:2, 3, 5, 7, 11, 13
- Mac 開根號怎麼打:
打任意次根号:
option+shift+v,输入根的次数,按确定,就可以接着输入根号内数字。
二次根号:
option+v
function isPrime(n) {
const sqrtCache = Math.sqrt(n);// 這樣寫會更簡潔
if (n === 1) {
return false
}
for (let i = 2; i <= sqrtCache; i++) {
if (n % i === 0) {
return false
}
}
return true
}
還有助教說:「javascript 的 function 不作為物件藍本的話,通常是小寫開頭哦!」
可以用解構語法進行賦值,這簡直帥炸了,解構賦值
if (p === -1) {
const temp = a
a = b
b = temp
}
// 寫這樣更簡潔
if (p === -1) {
[a, b] = [b, a]
}
- 天啊,我居然得到助教的值得參考標籤,受寵若驚 ❤️
- 一大早看到助教的留言,立馬笑噴,一整天心情都超好的~
MTR05 function 額外補充:part2
把函式當作參數傳的講解
map() 可以傳三個參數,MDN
let arr = [-1, -2, 1, 2, 3]
arr.map(function(currentValue, index, array)) {
console.log(currentValue, index, array)
}
// 會印出
-1 0 [-1, -2, 1, 2, 3]
-2 1 [-1, -2, 1, 2, 3]
1 2 [-1, -2, 1, 2, 3]
2 3 [-1, -2, 1, 2, 3]
3 4 [-1, -2, 1, 2, 3]
傳的參數是按照順序的,跟寫什麼字沒有關係 (不寫 currentValue, index, array 也可以)
NET101
protocol: 為什麼我們需要協定(protocol)?因為透過規範彼此才能溝通。
HTTP Method:
- Get 取得資料
- Head 跟 Get 很像,很少用,只拿 header 不要 body
- Patch 修改部分資料,不會取代所有資料
- Put 修改資料,會取代所有資料
- Post 執行一些動作
- Delete 刪除資料
- Options 回傳這個 server 支援哪些方法
常見的 HTTP Status code
- 1 開頭:比較少見,客戶端需要處理 Hold on
- 2 開頭:成功 Here you go
- 204: 成功處理請求,但沒有內容;例如刪除資源成功
- 3 開頭:重新導向 Go away
- 301: 永久的移到新的位置
- 302: 暫時的移到新的位置
- 4 開頭:客戶端有錯 You fucked up
- 語法錯誤
- 404: Not Found 你要的東西這裡沒有
- 5 開頭:server 端錯誤 I fucked up
- 503: 伺服器有問題
- 知道常見的 Code 及每個號碼開頭什麼意思
實作一個超簡易 HTTP Server
- 這裡的程式碼再多看幾遍
- 下面的程式碼來自助教 Yakim 的 筆記,寫得好美好棒啊,謝謝助教~
let http = require('http'); // 引用 library: http
let server = http.createServer(handleRequest);
function handleRequest(req, res) {
console.log('request url: ', req.url);
if (req.url === '/') {
res.writeHead(200, { // 更改 response header
'info': 'index'
})
res.write('index'); // 更改 response body
res.end();
return;
}
if (req.url === '/redirect') {
res.writeHead(301, {
// 'Location': '/category' // 轉址到 /category
'Location': 'https://google.com' // 轉址到 google.com
});
res.end();
return;
}
if (req.url === '/category') {
res.writeHead(200, {
'info': 'category'
})
res.write('category')
res.end();
return;
}
res.writeHead(404);
res.end();
return;
}
server.listen(5000); // 監聽 5000 這個 port