# HW01 補充說明 :::info 作業發出後,任何更新將會寫於此 - 3/15 1.2 更新 - 新增 QnA 區段 - 3/16 1.4 更新 - 範例圖的距離為 ~~5~~ --> 6 , cost 為 23 - 3/16 1.3 更新 - 在提示新增一點提醒 - 規則新增:輸出需要最簡 - 規則提醒:輸出要降序排序 - 3/21 1.3 更新 - 可能會有重複的次方項 - 3/21 Bonus 更新 - 不需完成小實驗 - 3/24 1.4 小提醒 - 只會 allocate pMinPath 本生, pPath 不會 allocate ::: ## 1.1 My String Library ## 1.2 String Calculator 測試資料範圍: - `pExpr` 中每個運算元之 base 10 均不會超過 `int32_t` 範圍 - `pExpr` 長度不超過 100 - `2 <= base <= 16` 請注意: - 運算元中 digits 和 base 間的底線 `_` 為半形而非全形 - 題目範例之一 "`ABC_16 + 00001_2`" 中,運算子和運算元間必有空格 - 若結果為 0,不可以加上負號(如 "`0_2`") - 若是格式不符合(包含但不限於運算元格式不符、出現 `+`、`-`、`*` 以外的運算子、運算元和運算子間無空格等),請回傳 `-1` - 建議勿於函式中印出任何內容 You have good TA: - 可以考慮將所有運算元轉成 base 10,計算完再轉到指定 base 的做法 - 可以將 base 轉換另外用函式撰寫,包含轉成 base 10 或是 base 10 轉成其他 base 的函式 QnA: > `pExpr` 可能會只包含一個運算元嗎? 可能 > 運算元若是正數,前面多了一個正號是否算格式錯誤呢? 是的,要算格式錯誤,回傳 -1 > 請問要考慮先乘除後加減嗎 需要先乘除後加減,不能從左一路算到右 ## 1.3 Chain Rule 規則: - 保證 `*pResult` 的 size 不超過 $10^3$ - 保證 Power 皆為 uint32_t - 保證 Coefficient 在計算過程與結果皆為 int32_t - 保證 `pFy` 和 `pFx` 給的 size 和 pPowers 及 pCoefficients 一致 - 若單筆測資執行時間超過 $10$ 秒會視為錯誤 - (3/16 更新)記得輸出要降序排序 - (3/16 更新)輸出的多項式必須為最簡,也就是 $2x+2x$ 要合併成 $4x$。 - (3/17 更新)化為最簡包含將係數為 0 的項移除,例如: $2x^3 + 0x^2 + 3x^1 + 0$ 會變成 $2x^3 + 3x^1$ - (3/21 更新)可能會有重複的次方項(如 $2x + 3x^2 + 4x$) 提示: - 可以把運算拆成 function 來寫,會比較簡單 - 記得處理壞壞的輸入哦(不過題目保證那麼多就只剩下...) - 可能會有以下情況,你如果想跑 $10^9\times10^9$ 迴圈會跑很久哦 $f(y)=y^2$,$f(x)=x^{10^9}+1$ - (3/16 更新)強烈建議像是上面的 $f(x)$ 不要開 $10^9$ 陣列存,空間會爆掉,也算不完。 參考測資(以下為難度參考,並非正式測資): - 國中生微積分:$f(y)=2y$,$f(x)=2x^3-3x+5$ - 高中生微積分:$f(y)=2y^3$,$f(x)=2x^3-3x+5$ - 高中生段考微積分:$f(y)=y^2$,$f(x)=x^{10^9}+1$ - 大學生微積分:$f(y)=2y^3-3y^2+4y-5$,$f(x)=2x^3-3x+5$ 這些難度的測資都會出現在正式測資中,且各難度的配分均至少 $2$ 分。 答案可以用網路上的微積分計算機算出來哦 Q&A: ## 1.4 Maze - 不要想太多,這題沒有在考驗你們複雜的演算法,暴力解必定能解。 - 範例圖的距離為 6 , cost 為 23 - 我只會 allocate pMinPath 本身, pPath 不會 allocate 喔,請依照長度 allocate 合適的大小 ## 1.5 Taiko Music Generator - **測資皆已上傳完畢,後面不會再傳(時間2024/03/24-13:10)**,就留這些給你們慢慢測試吧,不過如果有人想要我這裡沒整理過的 tja 檔案也歡迎來跟我講,我可以直接把手機版太鼓次郎的整份資料夾給你,目前測資數量: - sample: 6 - sample(no-chart-json): 26 - sample(special): 9 - 現在除了支援列印 json 檔案格式,也支援txt檔案,如果你們選擇以下輸出格式,檔案副檔名請設定為txt,以作業裡 1.5.2 輸出為例: :::spoiler Output ``` course: 3 [1, 1.646000] [1, 1.822471] [2, 1.998941] [1, 2.175412] [1, 2.351882] [1, 2.528353] [2, 2.704823] [2, 2.881294] course: 2 [1, 1.646000] [1, 1.998941] [1, 2.351882] [2, 2.528353] [1, 2.704823] [2, 2.881294] course: 1 [1, 1.646000] [1, 2.351882] [1, 2.704824] [1, 3.057765] [1, 3.587177] [1, 3.940118] [1, 4.293059] course: 0 [1, 1.646000] [1, 3.057765] [1, 4.469530] [1, 5.881294] [2, 6.587176] ``` ::: - 如果Hard以上的難度跟不上的話,你們可以先驗證去聽Easy、Normal難度,前面驗證對的話基本上Hard以上的難度都會是驗證正常的,當然還是要去聽啦,或是拿我給你的chart.json去看。 - sample 的譜面檔案我後面會陸續增加,你們會有很多的測資可以測 - 檔案是給你驗證用,你的程式不會涉及到任何檔案的處理 - 作業裡所謂的輸入輸出指的是stdin與stdout,而不是檔案的寫入,所以關於輸入與輸出內容很大很多很可怕,可以查 redirection command,還有檔案的 CRLF 與 LF 的情況你們可能也會用到(也有可能用不到,反正我有遇到) - 如果你覺得你有寫對但是聽起來有一部分有延遲,有以下兩個原因可以忽視,但是基本上如果音符與音樂之間沒有太大的誤差(一秒之內),那都還算ok 1. 譜面本身設計問題 2. 小數點精度問題 - Taiko Music Generator 的網站因為伺服器的網路真的是很爛,所以在傳送的時候大概要等一到兩分鐘,如果你們會 python 的話也可以打 source code載下來在local測試,然後可能會有舊音樂的資料被傳回來而誤導你們,你們要注意一下 - sample(special) 資料夾是特別譜面,我不會拿你們的程式測特別譜面,因為如果只按照我給你的資訊來寫程式的話,基本上80%的譜面檔案都可以正確生成chart.json,特別譜面就是在20%的譜面檔案,如果你們有興趣可以挑戰看看 - 如果你們有想要什麼歌的話可以寫信來跟我講,我可以傳測試的檔案給你,你們可以在這[官方網站](https://taiko.namco-ch.net/taiko/tc/songlist)裡面找歌,沒在網站裡的歌也可以問我幫你找找看有沒有 ## 1.6 Bonus: _BitInt(N) - 不需完成小實驗