## chatGPT 10 題
學習[條件判斷](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/if...else),並且了解[邏輯運算子](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Expressions_and_Operators)。藉由包裝生活中常見的基礎算式來練習邏輯能力。
### 題目一:多重條件
一週有七天,請製作一個函式可輸入不同的星期日數,並回傳當天的心情小語,如下例:
``` =JavaScript
// input 輸入
myThought(1)
myThought(7)
myThought(8)
// output 輸出
"星期一:穿新衣。"
"星期日:來考試。"
"一周只有七天,輸入錯囉"
```
**(心情小語內容可自訂、必須使用 [Switch](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/switch) 語法來達成。)**
在函式中,我們使用 switch 語法將輸入的星期日數對應到相應的心情小語,並將其存儲在 thought 變數中。最後,函式返回 thought 變數的值。如果輸入的星期日數不在 1 到 7 的範圍內,函式會返回一個錯誤訊息。
### 題目二:飲酒測試
最低法定飲酒年齡為 18 歲,請撰寫一個函式來測驗輸入的年齡是否能飲酒。
``` =JavaScript
// input 輸入
isDrinkable(7)
isDrinkable(18)
// output 輸出
false
true
```
**(必須使用[條件運算子](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Operators/Conditional_Operator)來達成。)**
### 題目三:發燒檢測
人的中心體溫通常會自動調節在 37 ℃ 左右,只要 ≥ 38度就代表可能發燒了!請製作一個探測人體溫度是否發燒的函式。
``` =JavaScript
// input 輸入
isFever(37)
isFever(39)
// output 輸出
False
True
```
函式接收一個表示體溫的參數 temp,如果 temp 大於等於 38,就會回傳 true 代表發燒,否則就回傳 false。
### 題目四:溫標轉換
目前常見的溫度標示有攝氏(°C)與華氏(°F),請撰寫兩個函式可以轉換彼此四捨五入至小數第一位,如下範例。
* 攝氏轉華氏: (10°C x 9/5) + 32 = 50°F
* 華氏轉攝氏: (10°F − 32) × 5/9 = -12.2°C
``` =JavaScript
// input 輸入
CtoF(10)
FtoC(10)
// output 輸出
50
-12.2
```
### 題目五:餵食青蛙
請幫遊戲內的青蛙角色設計被餵食飼料時的反應,輸入不同種類單位大小的飼料,讓青蛙做出相對應的回饋,如下範例:
* 飼料太小(<=5) 回傳 "嘓!"
* 飼料太大(>=50) 回傳 "嘔"
* 如果以上都不是,回傳 "..."
``` =JavaScript
// input 輸入
frogEat(1)
frogEat(100)
frogEat(10)
// output 輸出
"嘓!"
"嘔"
"..."
```
### 題目六:計算球體體積
請製作一個球體積計算函式,參數為半徑,回傳計算後四捨五入取至第一位小數的結果。
球體積 = 4 / 3 x π x 球半徑³
``` =JavaScript
// input 輸入
sphereVolume(1)
sphereVolume(10)
sphereVolume(20)
// output 輸出
4.2
4188.8
33510.3
```
可參考:[球體積計算機](https://www.google.com/search?client=firefox-b-d&q=sphereVolume+calc)
### 題目七:BMI 計算
BMI 稱為身體質量指數(Body Mass Index,縮寫為BMI),是目前美國疾病管制局及世界衛生組織所認可,利用身高為基礎來測量體重是否符合標準。請套用以下公式製作一個 BMI 計算函式。
<div style="text-align: center; padding: 4rem">
BMI = 體重(公斤) / 身高的平方(公尺)
</div>

``` =JavaScript
// input 輸入 bmi(cm,kg)
bmi(178,20)
bmi(178,65)
bmi(178,77)
bmi(178,89)
bmi(178,100)
bmi(178,200)
// BMI(身高,體重)
// output 輸出
"體重過輕"
"正常範圍"
"異常範圍"
"異常範圍"
"異常範圍"
"異常範圍"
```
延伸思考:可將過重、輕度肥胖、中度肥胖、重度肥胖、腰圍功能判斷也完成。
### 題目八:斜邊計算
直角三角形的斜邊長度公式為:x² + y² = z²,請製作一個輸入兩邊邊長並回傳四捨五入取至小數第一位斜邊的函式。
``` =JavaScript
// input 輸入
calcHypotenuse(10, 10)
// output 輸出
14.1
```
### 題目九:FizzBuzz
FizzBuzz 是一個簡單的小遊戲,給定一串從 1 到 100 的數字:
* 如果是 3 的倍數,就印出 “Fizz”
* 如果是 5 的倍數,就印出 “Buzz”
* 如果同時是 3 和 5 的倍數,就印出 “FizzBuzz”
* 將結果回傳為一個陣列。
``` =JavaScript
// Todo 待完成
function fizzBuzz100(){
let result = []
let count = 1
while (count <= 100) {
//
// 在此的程式將會被執行 100 次
// 請撰寫判斷將 FizzBuzz 與數字放入 result 陣列之中
//
count ++
}
return result
}
// input 輸入
fizzBuzz100()
// output 輸出
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"......後續省略]
```
### 題目十:蜘蛛下網

蜘蛛在一個由四個支撐點構成,11x11 單位的正方形蜘蛛網上。請製作一個函式以蜘蛛的座標為參數並依循以下規則回傳結果:
* 計算出距離蜘蛛最近的點並回傳"哪裡是最近的支撐點 + 最短路徑距離"。
* 如果蜘蛛超出蜘蛛網外,回傳"蜘蛛不在網上了"。
``` =JavaScript
// input 輸入
spiderLeaveWeb(8, 3)
spiderLeaveWeb(5, 5)
spiderLeaveWeb(6, 5)
spiderLeaveWeb(5, 6)
spiderLeaveWeb(6, 6)
spiderLeaveWeb(20, 20)
spiderLeaveWeb(0, 0)
spiderLeaveWeb(11, 0)
spiderLeaveWeb(0, 11)
spiderLeaveWeb(11, 11)
// output 輸出
"右上角為最近的支撐點,距離 4.2 單位"
"左上為最近的支撐點,距離 7.1 單位"
"右上角為最近的支撐點,距離 7.1 單位"
"左下角為最近的支撐點,距離 7.1 單位"
"右下角為最近的支撐點,距離 7.1 單位"
"蜘蛛不在網上了"
"左上為最近的支撐點,距離 0 單位"
"右上角為最近的支撐點,距離 0 單位"
"左下角為最近的支撐點,距離 0 單位"
"右下角為最近的支撐點,距離 0 單位"
```
延伸思考:可以將蜘蛛網的尺寸(最大x、最大y)作為參數帶入函式中,思考會遇到什麼樣的情境並撰寫判斷回應。
答案:
以下是 spiderLeaveWeb 函式的範例實作,計算距離的部分使用了勾股定理。
```
function spiderLeaveWeb(x, y, maxX = 10, maxY = 10) {
// 判斷蜘蛛是否在蜘蛛網上
if (x < 0 || y < 0 || x > maxX || y > maxY) {
return "蜘蛛不在網上了";
}
// 計算四個支撐點與蜘蛛座標的距離
const distances = [
{ point: "左上角", distance: Math.sqrt(x * x + y * y) },
{ point: "右上角", distance: Math.sqrt((maxX - x) * (maxX - x) + y * y) },
{ point: "左下角", distance: Math.sqrt(x * x + (maxY - y) * (maxY - y)) },
{
point: "右下角",
distance: Math.sqrt((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y)),
},
];
// 找出距離最短的支撐點
const nearest = distances.reduce((prev, current) =>
prev.distance < current.distance ? prev : current
);
return `${nearest.point}為最近的支撐點,距離 ${nearest.distance.toFixed(1)} 單位`;
}
```
考慮輸入的參數為蜘蛛網的尺寸 maxX 與 maxY 時,我們需要修改判斷蜘蛛是否在網上的部分,判斷蜘蛛的座標是否超出蜘蛛網的範圍:
```
function spiderLeaveWeb(x, y, maxX, maxY) {
// 判斷蜘蛛是否在蜘蛛網上
if (x < 0 || y < 0 || x > maxX || y > maxY) {
return "蜘蛛不在網上了";
}
// 計算四個支撐點與蜘蛛座標的距離
const distances = [
{ point: "左上角", distance: Math.sqrt(x * x + y * y) },
{ point: "右上角", distance: Math.sqrt((maxX - x) * (maxX - x) + y * y) },
{ point: "左下角", distance: Math.sqrt(x * x + (maxY - y) * (maxY - y)) },
{
point: "右下角",
distance: Math.sqrt((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y)),
},
];
// 找出距離最短的支撐點
const nearest = distances.reduce((prev, current) =>
prev.distance < current
```