# HW03 補充說明
:::info
- 4/25:
- 新增 3.1, 3.6 說明
- 4/27:
- 新增 3.3 說明
- 3.5 勘誤:請幫我把執行程式的方式由 `./main` 改為 `./hw0305`
- 3.5 增加漸層的更詳細說明
- 5/4:
- 新增:畫漸層及寬度的小提示
:::
## 3.1 Bible
1. 請自行將 `bible.txt` 從老師的網站上下載下來並包進 .zip 檔案中,助教測試前不會幫你下載。
2. 本題允許使用經 MIT、GPL 等開放原始碼 License 授權之與 JSON 檔案讀寫相關函式庫,若有使用必須將授權註解於相同檔案內否則 0 分。即便如此,仍建議自己從頭到尾練習一遍,目的是從實作面了解一份 JSON 檔案是如何讀取的。
3. 輸入及輸出範例可以此檔案為參考:https://drive.google.com/file/d/1iXaOG7vnqOLkA4r_XyWipE1buMw7TaJy/view?usp=sharing
4. 若一行有多次 target,只需要顯示一次即可
## 3.2 Function Tracer
- 輸出時格式要與作業 Example 一樣,特別注意的點有:
- help 的 message 請直接與作業範例裡輸出 help 的 message 一樣
- 換行要明確
- 不包含程式碼本身縮排
- 輸出順序要明確,包括情況有:
- 基於多個 c file
- 基於 header file 的多個 function
- 基於檔案內程式碼先後順序
> 請到下面查看範例
- 如老師上課所說:
- `-F and -I are exclusive and must be at least one.`
更改為
- `-f and -i are exclusive and must be at least one.`
- 只要出現 `-h` `--help` 的任何情況,就只以 `-h` `--help` 的功能為主,也就是只要 Display this information and exit.
- 如果出現不存在的 option,要做錯誤輸出並離開程式。
- 可能會有輸入多個 c files 的情況,記得在輸出資訊時要明確說明資訊是從哪個檔案來的
- 如果沒有用到任何 `-f` 或是 `-i` 的 option,~~因為沒有任何要找的資源,等同於不用輸出任何內容~~。更新為: 作業有提到 `-f and -i are exclusive and must be at least one.` ,所以算判錯。
- 注意註解掉的程式碼不會算在 trace 的範圍喔
- 其他由作業範例延伸範例:
- 只有 `-c`
```bash
$ ./hw0302 -i mystring.h -c hw0101.c
mystrchr:
hw0101.c (count: 2)
char *my_p = mystrchr(s, c);
char *my_p = mystrchr(s, c);
mystrrchr:
hw0101.c (count: 1)
char *my_p = mystrrchr(s, c);
```
- 只有 `-l`
```bash
$ ./hw0302 -i mystring.h -l hw0101.c
mystrchr:
hw0101.c (count: 2)
line 14
line 34
mystrrchr:
hw0101.c (count: 1)
line 54
```
- 有多個 c file,並且 `mystring.h` function 出現順序為
1. `mystrrchr`
2. `mystrchr`
```bash
$ ./hw0302 -i mystring.h -l -c hw0101.c hw0101_copy.c hw0101_copy2.c
mystrrchr:
hw0101.c (count: 1)
line 54: char *my_p = mystrrchr(s, c);
hw0101_copy.c (count: 1)
line 54: char *my_p = mystrrchr(s, c);
hw0101_copy2.c (count: 1)
line 54: char *my_p = mystrrchr(s, c);
mystrchr:
hw0101.c (count: 2)
line 14: char *my_p = mystrchr(s, c);
line 34: char *my_p = mystrchr(s, c);
hw0101_copy.c (count: 2)
line 14: char *my_p = mystrchr(s, c);
line 34: char *my_p = mystrchr(s, c);
hw0101_copy2.c (count: 2)
line 14: char *my_p = mystrchr(s, c);
line 34: char *my_p = mystrchr(s, c);
```
- 有些算做錯誤的範例:
- 不該放 parameter 的 option
```bash
./hw0302 -i mystring.h -l huh.c -c hw0101.c
```
## 3.3 Image Steganography
- `secret_data` 為檔案名稱,所以需要讀檔與寫檔。檔案為 binary file,也就是可能會是任何格式的檔案。但其實讀入後可以視為一個二進位檔案,以 bit(二進位) 方式儲存與寫入。
ex: rickroll.mp4, maldives.bmp, neokent.pdf...
- (5/2) 如果 `-w` 及 `-e` 同時出現,請進行判錯
- (5/2) `secret_data` 不會存在 padding 裡
- (5/2) 假設 N=3,而你的 secret_data 有 8 bit(1 Byte) 的話,則依照 BGR 順序放入 secret_data,最後一個 R 你可以選擇將 secret_data 放在前 2 個 bit,或是後 2 個 bit
## 3.4 Game Cheater
## 3.5 RGB Line Chart
- 相比前幾次助教題簡單多了,不需要提示對吧 <!--是的船長-->
- 勘誤:請幫我把執行程式的方式由 `./main` 改為 `./hw0305`
- 關於線的半徑與漸層的意思:

- 畫漸層及寬度的小提示:你們可以先嘗試畫出寬度為 1 的線,並確保他是連續的。再來以線上的每個像素點為中心,畫一個半徑為寬度的「漸層圓」。
## 3.6 Bonus: ncurses
這次的 Bonus 要各位寫一份 Tutorial 告訴我如何用 ncurses 做出與作業圖片相同的 interface。請各位注意以下事項:
1. 檔案格式僅接受 `.txt` `.md` `.pdf`,可以使用圖片檔案(`.jpg`, `.png`)嵌入至其中,但不接受 `.odt`, `.doc`, `.docx`, `.pptx` 等其他格式。
2. 請將撰寫 Tutorial 的對象當作是沒有使用過 `ncurses` 但是是熟悉 Ubuntu 作業系統的使用者(這我),因此請在使用所有 `ncurses` 函式時介紹該函式的用意。