Last active
August 29, 2015 14:18
-
-
Save wvdlaan/c00dfe916b3509bd90ef to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns dojo.core | |
(:require [clojure.math.combinatorics :as combo] | |
[clojure.set :as cs])) | |
(def board | |
[[0 1 0] | |
[0 0 0] | |
[1 0 0]]) | |
(def human-board | |
[[1 :? 0]]) | |
(def b1 | |
[[0 0] [0 1]]) | |
(defn board-positions | |
"(board-positions 2 2) => ([0 0] [0 1] [1 0] [1 1])" | |
[rows cols] | |
(for [row (range rows) | |
col (range cols)] | |
[row col])) | |
(defn bomb-placements | |
[bombs coll] | |
(->> coll | |
combo/subsets | |
(filter #(= bombs (count %))))) | |
(defn gen-boards | |
"(gen-boards 2 2 1) => (([0 0]) ([0 1]) ([1 0]) ([1 1]))" | |
[rows cols bombs] | |
(->> (board-positions rows cols) | |
(bomb-placements bombs))) | |
(defn gen-clicks | |
[boards positions] | |
(for [board boards | |
position positions] | |
[board position])) | |
(defn neighbours | |
"(neighbours [0 1] 3 3) => ([0 0] [0 2] [1 0] [1 1] [1 2])" | |
[[row col] rows cols] | |
(->> (for [r (range (dec row) (+ 2 row)) | |
c (range (dec col) (+ 2 col))] | |
[r c]) | |
(remove #(= [row col] %)) | |
(filter #(< -1 (first %) rows)) | |
(filter #(< -1 (second %) cols)))) | |
(defn solve | |
[rows cols board position] | |
(empty? (cs/intersection | |
(set board) | |
(set (neighbours position rows cols))))) | |
(defn solved? | |
[rows cols [board position]] | |
(if (some #(= position %) board) | |
false | |
(solve rows cols board position))) | |
(defn sweep | |
"(take 1 (sweep 5 5 1)) => ([([0 0]) [0 2]]) | |
(take 1 (sweep 5 5 3)) => ([([0 0] [0 1] [0 2]) [0 4]])" | |
[rows cols bombs] | |
(let [boards (gen-boards rows cols bombs) | |
positions (board-positions rows cols)] | |
(->> (gen-clicks boards positions) | |
(filter #(solved? rows cols %))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment