-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbruteForce.mjs
37 lines (33 loc) · 1.02 KB
/
bruteForce.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { performance } from 'perf_hooks'
import { Board } from '../src/solitaire-rl/solitaire-env.mjs'
import * as U from '../src/solitaire-rl/utils.mjs'
let episodes = 0
const depthFirstSearch = (board, actions) => {
for (const action of board.validActions()) {
const actions2 = [...actions, action]
console.log(JSON.stringify(actions2))
const board2 = board.makeMove(action)
if (board2.done) {
episodes++
if (board2.solved) {
return actions2
}
} else {
const recursiveResult = depthFirstSearch(board2, actions2)
if (recursiveResult) {
return recursiveResult
}
}
}
}
const main = () => {
const initialBoard = new Board()
const startTime = performance.now()
const solution = depthFirstSearch(initialBoard, [])
const endTime = performance.now()
const elapsedTime = endTime - startTime
console.log('solution:', JSON.stringify(solution))
console.log('episodes:', episodes)
console.log('elapsed time:', U.formatElapsedTime(elapsedTime))
}
main()