###### tags:`ALPHACampWeek1`
猜數字 & 產生隨機英文單字
===========
熱身題
---
* 我是莊家,給電腦猜數字。
* 功能
* 指定介於 1-100 之間的數字,存在 answer 變數裡
* 設定一個 guess 變數,代表挑戰者 (電腦) 猜的數字
* 電腦可重覆「猜數字」
* 比對 guess 和 answer,判斷太大或太小
* 若兩者相等(猜對)則結束遊戲,且結束時須計算電腦猜了幾次
* 規格
* 程式碼開頭先宣告三個變數:
* answer:正確數字
* guess: 挑戰者 (電腦) 猜的數字
* count:當前回合數
* 程式執行的過程中,請用 console.log() 把猜數字的過程輸出到 console 裡觀察
* 運用 while 迴圈來讓電腦能持續猜數字,直到猜中時才跳出 while 迴圈
* 運用 if/else 來根據太大、太小、猜對等狀況,切換不同的流程
* 使用嚴格的 === 而非寬鬆的 ==
* 解答
* https://replit.com/@ks0dcongra/A7-Jing-Dian-Cai-Shu-Zi-initial-code#%E7%8C%9C%E6%95%B8%E5%AD%97/guessNum1.js
進階題
---
* 演算法:
1. 流程圖
2. 運算思維
1. 助教的運算思維
2. 納豆的運算思維
3. Marcus第一次的運算思維
- 利用 Math.random() * ( max - min ) + min 產生每次猜的數字
- 紀錄每個回合的回傳結果,回答太小則紀錄為最小值,回答太大則紀錄為最大值
- 下次再猜的時候,再利用前一次獲得最大最小值產生猜的數字,這樣就可以有效的縮小範圍
4. Marcus第一次的運算思維
- 利用 Math.floor(( max + min ) / 2) 產生每次猜的數字
- 紀錄每個回合的回傳結果,回答太小則紀錄為最小值,回答太大則紀錄為最大值
- 下次再猜的時候,再利用每次獲得的最大值與最小值相加除以二,這樣就可以有效的縮小範圍
3. 虛擬碼 - Marcus的虛擬碼

* 功能
* 指定介於 1-100 之間的數字,存在 answer 變數裡
* 設定一個 guess 變數,代表挑戰者 (電腦) 猜的數字
* 電腦可重覆「猜數字」
* 比對 guess 和 answer,判斷太大或太小
* 若兩者相等(猜對)則結束遊戲,且結束時須計算電腦猜了幾次
* 規格
* 讓電腦在 10 次以內猜中答案的限制,邏輯中需要包括根據「亂數測試的結果」縮小「猜測範圍」。
* 解答
* https://replit.com/@ks0dcongra/A7-Jing-Dian-Cai-Shu-Zi-initial-code#%E7%8C%9C%E6%95%B8%E5%AD%97/guessNum2.js
產生隨機亂數 Math
---
Math無條件捨去
---
Math.round() 四捨五入
Math.floor() 取小於這個數的最大整數
Math.ceil() 取大於這個數的最小整數
alert(Math.round(12.3));//12
alert(Math.round(12.5));//13
alert(Math.round(12.52145));//13
```
let answer = Math.floor(Math.random() * 100) + 1 //0~100 + 1
//演算法
function randomusefloor(min,max) {
return Math.floor(Math.random()*(max-min+1)+min);
}
```
產生隨機英文字
---
function makerandomletter(max) {
var text = "";
var possible = "abcdefghijklmnopqrstuvwxyz";
for (var i = 0; i < max; i++){
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
產生前兩碼英文小寫,後6碼數字的樂透號碼並連接
---
<p id="demo" onclick="myrandomstring()">Click me get random string.(前2碼英文小寫,後6碼數字)</p>
function myrandomstring() {
document.getElementById("demo").innerHTML = makerandomletter(2)+randomusefloor(1,999999);
}
另一種寫法
---
// input
let ticket = ''
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
// process
ticket += letters[Math.floor(Math.random() * 26)]
ticket += letters[Math.floor(Math.random() * 26)]
ticket += Math.floor(Math.random() * 10)
ticket += Math.floor(Math.random() * 10)
ticket += Math.floor(Math.random() * 10)
ticket += Math.floor(Math.random() * 10)
// output
console.log(ticket)
{"metaMigratedAt":"2023-06-16T15:47:37.018Z","metaMigratedFrom":"Content","title":"猜數字 & 產生隨機英文單字","breaks":true,"contributors":"[{\"id\":\"05a05317-6b4f-4499-afdb-93a0a65a594e\",\"add\":3155,\"del\":280}]"}