Skip to content

Commit

Permalink
fix: rename to combine to merge-left
Browse files Browse the repository at this point in the history
remove stack-left function. We don't need it anymore becouse
merge-left handles the cases. We do it all in a single function
  • Loading branch information
WarFox committed May 26, 2024
1 parent be4c8c4 commit 3ae4b09
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 91 deletions.
14 changes: 2 additions & 12 deletions src/cljs_2048/board.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@
(let [fill-count (- n (count v))]
(into (vec v) (repeat fill-count [0]))))

(defn combine
"Combines two equal tiles into one in the vector v and fills remaining with zeroes.
(defn merge-left
"Merge two equal tiles into one in the vector v and fills remaining with zeroes.
v is a vector of vectors of single integer, for example [[2 :random] [0] [4 :merged] [4]]
[0] means empty slot and all [0] should be trailing in the result.
Add state as :merged when combining two tiles
Expand Down Expand Up @@ -109,13 +109,3 @@
"Reverse the board"
[board]
(mapv #(vec (rseq %)) board))

(defn move-tiles-left
"Move the tiles to left in v, by shifting value to empty tile"
[v]
(-> (filterv #(pos? (first %)) v)
(fill-zeroes columns-count)))

(defn stack-left
[board]
(map move-tiles-left board))
4 changes: 1 addition & 3 deletions src/cljs_2048/game.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@
(defn move-left
"Move tiles to left and combine equal tiles at edge"
[board]
(->> board
(b/stack-left)
(mapv b/combine)))
(mapv b/merge-left board))

(defn move-right
"Move tiles to right and combine equal tiles at edge"
Expand Down
89 changes: 13 additions & 76 deletions test/cljs_2048/board_test.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -94,40 +94,40 @@
(is (= (sut/fill-zeroes [1 2 3 4] 2)
[1 2 3 4]))))

(deftest combine-test
(is (= (sut/combine [[2] [2] [0] [0]])
(deftest merge-left-test
(is (= (sut/merge-left [[2] [2] [0] [0]])
[[4 :merged] [0] [0] [0]]))

(is (= (sut/combine [[4] [4] [2] [2]])
(is (= (sut/merge-left [[4] [4] [2] [2]])
[[8 :merged] [4 :merged] [0] [0]]))

(is (= (sut/combine [[1] [2] [3] [4]])
(is (= (sut/merge-left [[1] [2] [3] [4]])
[[1] [2] [3] [4]]))

(is (= (sut/combine [[4] [4] [4] [4]])
(is (= (sut/merge-left [[4] [4] [4] [4]])
[[8 :merged] [8 :merged] [0] [0]]))

(is (= (sut/combine [[2] [0] [4] [4]])
(is (= (sut/merge-left [[2] [0] [4] [4]])
[[2] [8 :merged] [0] [0]]))

(is (= (sut/combine [[0] [0] [4] [4]])
(is (= (sut/merge-left [[0] [0] [4] [4]])
[[8 :merged] [0] [0] [0]]))

(is (= (sut/combine [[4] [4] [0] [4]])
(is (= (sut/merge-left [[4] [4] [0] [4]])
[[8 :merged] [4] [0] [0]]))

(is (= (sut/combine [[4] [4] [8] [4]])
(is (= (sut/merge-left [[4] [4] [8] [4]])
[[8 :merged] [8] [4] [0]]))

(is (= (sut/combine [[4] [2] [2] [0]])
(is (= (sut/merge-left [[4] [2] [2] [0]])
[[4] [4 :merged] [0] [0]]))

(testing "with random and merged"
(is (= (sut/combine [[4] [2 :random] [2 :merged] [0]])
(is (= (sut/merge-left [[4] [2 :random] [2 :merged] [0]])
[[4] [4 :merged] [0] [0]])))

(testing "map combine for a matrix"
(is (= (map sut/combine
(testing "map merge-left for a matrix"
(is (= (map sut/merge-left
[[[4] [4] [2] [2]]
[[6] [4] [2] [2]]
[[8] [8] [2] [0]]
Expand All @@ -143,66 +143,3 @@
[8 7 6 5]
[12 11 10 9]
[16 15 14 13]])))

(deftest stack-left
(testing "Move all tiles to left - single column"
(is (= (sut/stack-left
[[[0] [2] [4] [6]]
[[0] [4] [6] [8]]
[[0] [6] [8] [10]]
[[0] [8] [10] [12]]])
[[[2] [4] [6] [0]]
[[4] [6] [8] [0]]
[[6] [8] [10] [0]]
[[8] [10] [12] [0]]])))

(testing "Move all tiles to left - two columns"
(is (= (sut/stack-left
[[[0] [0] [4] [6]]
[[0] [0] [6] [8]]
[[0] [0] [8] [10]]
[[0] [0] [10] [12]]])
[[[4] [6] [0] [0]]
[[6] [8] [0] [0]]
[[8] [10] [0] [0]]
[[10] [12] [0] [0]]])))

(testing "Move all tiles to left - mixed column"
(is (= (sut/stack-left
[[[0] [2] [0] [6]]
[[0] [4] [0] [8]]
[[0] [6] [0] [10]]
[[0] [8] [0] [12]]])
[[[2] [6] [0] [0]]
[[4] [8] [0] [0]]
[[6] [10] [0] [0]]
[[8] [12] [0] [0]]]))))

(deftest move-tiles-left
(testing "Stack vector to left - three"
(is (= (sut/move-tiles-left [[0] [2] [4] [6]])
[[2] [4] [6] [0]])))

(testing "Stack vector to left - two"
(is (= (sut/move-tiles-left [[0] [0] [4] [6]])
[[4] [6] [0] [0]])))

(testing "Stack vector to left - single "
(is (= (sut/move-tiles-left [[0] [0] [0] [6]])
[[6] [0] [0] [0]])))

(testing "Stack vector to left - all zeroes"
(is (= (sut/move-tiles-left [[0] [0] [0] [0]])
[[0] [0] [0] [0]])))

(testing "Stack vector to left - all numbers"
(is (= (sut/move-tiles-left [[2] [4] [6] [8]])
[[2] [4] [6] [8]])))

(testing "Stack vector to left - zero in the middle"
(is (= (sut/move-tiles-left [[2] [4] [0] [8]])
[[2] [4] [8] [0]])))

(testing "Stack vector to left - zeroes in the middle"
(is (= (sut/move-tiles-left [[2] [0] [0] [8]])
[[2] [8] [0] [0]]))))

0 comments on commit 3ae4b09

Please sign in to comment.