穀神星搜尋
代碼來臨 2024 年第 4 天
第 1 部分
X 標記(數百個?)點
令我驚訝的是,到目前為止還沒有像這樣的文字搜尋謎題。
這似乎令人畏懼,但我的策略是:
Find the index of each X in the grid For each X Check the next three letters in a straight path in each of the eight directions If the path ends up spelling XMAS Add one to a running total
在範例中檢查此策略使我相信這是一種成功的方法。
現在是令人興奮的部分:從頭開始編碼整個事情!
找到網格中每個 X 的索引...最終
首先,我必須將輸入解析為二維字元陣列:
let grid = input.split('\n').map(line => line.split(''))
我在網格謎題中經常遇到的一個障礙是考慮越界索引。
如果我從邊界單元格 - 或靠近邊界的單元格開始 - 並朝邊緣方向走這麼遠,我最終會遇到越界的行或列。
我有兩種策略來處理這個問題:
- 向我的條件添加檢查以查找不存在的行或列
- 用足夠的行和列填滿網格,這樣就不會出現越界的風險
對於這個挑戰,我選擇#2。
用 3 個單元格厚邊框填滿網格,如下圖所示:
grid = grid.map(line => ['.','.','.',...line,'.','.','.']) grid = [ new Array(grid[0].length).fill('.'), new Array(grid[0].length).fill('.'), new Array(grid[0].length).fill('.'), ...grid, new Array(grid[0].length).fill('.'), new Array(grid[0].length).fill('.'), new Array(grid[0].length).fill('.') ]
範例網格現在如下所示:
................ ................ ................ ...MMMSXXMASM... ...MSAMXMSMSA... ...AMXSXMAAMM... ...MSAMASMSMX... ...XMASAMXAMM... ...XXAMMXXAMA... ...SMSMSASXSS... ...SAXAMASAAA... ...MAMMMXMMMM... ...MXMXAXMASX... ................ ................ ................
現在我準備好對填充網格中每個 X 的座標進行編目:
let Xs = [] for (let row = 0; row < grid.length; row++) { for (let col = 0; col < grid[0].length; col++) { if (grid[row][col] == "X") { Xs.push([row, col]) } } }
成功:在範例網格中找到了所有 19 個 X!
從每個X向八個方向走三步
所有八個相對座標都編碼為 8 元素數組:
let dirs = [ [-1,-1], [-1,0], [-1,1], [0,-1], [0,1], [1,-1], [1,0], [1,1] ]
現在主要演算法:
For each X For each direction Create an array that starts with X Do 3 times Move one cell in this direction Add the value of that cell to the array Check whether the concatenation of all four values is "XMAS" If it is, increment a tally
在 JavaScript 中:
Xs.reduce((total, coord) => { dirs.forEach((dir) => { let [row, col] = coord; let [y, x] = dir; let word = ["X"]; for (let i = 0; i < 3; i++) { row += y; col += x; word.push(grid[row][col]); } if (word.join("") == "XMAS") { total++; } }); return total; }, 0);
它為範例輸入產生正確的答案!
當我在拼圖輸入上運行它時會發生什麼? ! !
我得到一個數字:幾千個「XMAS」
這是正確答案嗎?
就是這樣! ! !
嗚呼! ! !
迫不及待想看看第二部有什麼精彩內容......
第2部分
哦天哪。這變得有點複雜了。但可行!
在第 1 部分中,我一直在尋找 X。
現在,我正在尋找
女士在第 1 部分中,我將字母寫成一條直線來組成單字。
現在,我正在尋找 5 單元短語的四種配置:
M S M M S M S S A A A A M S S S S M M M
一個 M 可以是多個 X-MAS 的一部份。
透過檢查每一個M,我很可能會遇到好幾次。
我需要為每場比賽建立一個字串化座標的 Set()。這樣,我只佔一個 X-MAS 實例一次。
突然——輝煌! - 主意
我不會檢查每一個M。
我會檢查每一個A。
我將按順時針順序檢查對角線相鄰的四個單元格。
X-MAS 比賽將符合以下四種模式之一:
Find the index of each X in the grid For each X Check the next three letters in a straight path in each of the eight directions If the path ends up spelling XMAS Add one to a running total
`
唷!這比我最初的想法要簡單得多。
而且我應該能夠重新利用我的大部分第 1 部分程式碼!
複製貼上調整
在網格中找到所有 As:
js
令 As = [];
for (let row = 0; row
for (let col = 0; col
if (網格[行][列] == "A") {
As.push([行, 列]);
}
}
}
建立要檢查的相對座標順序:
js
讓阿迪爾斯 = [
[-1, -1],
[-1, 1],
[1, 1],
[1, -1],
];
將比賽的得分相加:
js
令part2 = As.reduce((總計, 座標) => {
設順時針 = Adirs.map((dir) => {
令 [行,列] = 座標;
令 [y, x] = dir;
返回網格[行y][列x];
});
if (["MSSM", "MMSS", "SMMS", "SSMM"].includes(順時針.join(""))) {
總計;
}
回傳總計;
}, 0);
它為範例輸入產生正確的答案!
現在檢查我的拼圖輸入...
確實! ! !正確答案! ! !
我很高興我突然想到使用 As 而不是 Ms.
我確信,為我節省了數小時的時間來解決頭痛問題。
這是另一個有趣且容易上手的謎題!
我想知道第五天會發生什麼事。
以上是穀神星搜尋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

探索前端中類似VSCode的面板拖拽調整功能的實現在前端開發中,如何實現類似於VSCode...

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。
