「頭足類的數學看起來和一般數學沒有那麼不同。」
本文翻譯自英文原文。
Github: GCaggianese/AoC-2025/D6
題目 第 6 天:Trash Compactor
第一部分
- 使用空格(
" ")作為分隔符,將輸入解析成矩陣。 - 對同一列中的每一欄套用運算子操作(最後一列)。
- 將結果相加。
第二部分
第二部分要求**垂直**讀取輸入數字,而不是水平讀取。每個欄位位置都 變成一個數字位,數字從上到下堆疊形成新的數字。這裡很重要的一點是, 數字輸入中也可能有空格(例如 " 51")。垂直讀取時,縮排會改變, 因此會影響某個數字是否屬於另一個數字。
更新後的解析
- 保留字元位置
readdlm會把空格當作分隔符,破壞空間資訊。-> 使用readlines(),逐字元解析。
- 展開 header
- 運算子列使用空格表示「重複前一個運算子」。所以
* + * +會展開成****++++****+++-> 每一欄都有自己的運算子。
- 運算子列使用空格表示「重複前一個運算子」。所以
- 垂直讀取欄位
- 對每個欄位位置,將所有列中的數字由上到下堆疊。
- 將它們串接成單一數字。
- 數字網格中的空格表示「這裡沒有數字」。
- 分隔欄
- 如果某欄所有格子都是
" ",表示操作之間的分隔符。
- 如果某欄所有格子都是
- 套用運算子並加總
- 將分隔符之間的連續數字分組。
- 套用它們的運算子。
- 將所有結果加總得到答案。