我看了一眼謎題輸入,感到非常害怕。
然後我讀了第 1 部分我必須做的事情並暫時放鬆了:
我可以使用簡單的正規表示式來做到這一點!
我必須記住轉義括號,然後我得到了這個有效的正規表示式:
/mul\((\d*),(\d*)\)/g
現在我需要對每場比賽進行適當的提取和數學計算
這是完整的工作代碼:
let total = [...input.matchAll(/mul\((\d*),(\d*)\)/g)].reduce( (total, match) => { total += match .slice(1, 3) .map(Number) .reduce((a, b) => a * b); return total; }, 0 );
它為範例輸入產生正確的答案。
嘗試我的拼圖輸入會產生...
正確答案! ! !
深呼吸............
............第 2 部分
我認為由於輸入充滿了不同的單詞,因此它將添加各種新規則來解釋。
幸運的是,只有兩個新單字充當有效 mul 語句的開始和結束。
現在感覺就像是透過索引每個 do() 和 dont() 並蒐索要解析的 mul 語句的正確部分來隔離每個有效語句的練習。
我想使用正規表示式來匹配所有出現的 do() 和 don():
/don't\(\)|do\(\)/g
這樣,我應該沿著輸入字串的路徑有交替的檢查點。
如果是這樣,我可以提取 do() 和 dont() 檢查點之間的子字串,並檢查 muls。
讓我確認範例和完整輸入。
這是我隔離標誌及其索引的演算法:
let flags = [...input.matchAll(/don't\(\)|do\(\)/g)].map((el) => { return [el[0], el.index]; });
確認:
這變得有點複雜了。
自從事情開始啟用以來,我必須從索引 0 開始抓取,直到第一個 don()。所以,我需要找到它的索引。並檢查該子字串。
從那時起,我可以跳過所有後續的 don(),並尋找下一個 do()。
以此作為我的新起始索引,我需要找到下一個 don()。那是我的新終點。檢查該子字串。
然後重複:找出下一個 do(),找出下一個 don(),檢查子字串。
這感覺就像一個 while 迴圈。
當我寫演算法時我會知道更多。
很多條件來處理缺乏模式的「做-不該做」的發生順序:
/mul\((\d*),(\d*)\)/g
令我驚訝的是,它為範例輸入產生了正確的答案。
處理我的拼圖輸入後會產生什麼?
...
正確答案! ! !
在檢查之前,我新增了一個控制台日誌記錄語句來確認要檢查的子字串的每個開始和結束索引。
我將它們與數組中標誌的順序進行了比較。
一切看起來都不錯,所以我提交了。
並得到了正確答案!
多麼令人愉悅和有益的感覺!
又是一個早起的一天。又一顆來之不易的兩顆金星。
進入第四天!
以上是仔細考慮一下的詳細內容。更多資訊請關注PHP中文網其他相關文章!