Solve triangle solitaire puzzle: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: Added zkl) |
(Added Elixir) |
||
Line 173: | Line 173: | ||
0 0 1 0 0 |
0 0 1 0 0 |
||
Solved</pre> |
Solved</pre> |
||
=={{header|Elixir}}== |
|||
Inspired by Ruby |
|||
<lang elixir>defmodule IQ_Puzzle do |
|||
def task(i \\ 0, n \\ 5) do |
|||
fmt = Enum.map_join(1..n, fn i -> |
|||
String.duplicate(" ", n-i) <> String.duplicate("~w ", i) <> "~n" |
|||
end) |
|||
pegs = Tuple.duplicate(1, div(n*(n+1),2)) |> put_elem(i, 0) |
|||
rest = tuple_size(pegs) - 1 |
|||
next = next_list(n) |
|||
:io.format fmt, Tuple.to_list(pegs) |
|||
result = Enum.find_value(next, fn nxt -> solve(pegs, rest, nxt, next, fmt) end) |
|||
IO.puts if result, do: result, else: "No solution found" |
|||
end |
|||
defp solve(_,1,_,_,_), do: "Solved" |
|||
defp solve(pegs,rest,{g0,g1,g2},next,fmt) do |
|||
if s = jump(pegs, g0, g1, g2) do |
|||
peg2 = Enum.reduce([g0,g1,g2], pegs, fn g,acc -> |
|||
put_elem(acc, g, 1-elem(acc, g)) |
|||
end) |
|||
result = Enum.find_value(next, fn g -> solve(peg2, rest-1, g, next, fmt) end) |
|||
if result do |
|||
[(:io_lib.format "~n~s~n", [s]), (:io_lib.format fmt, Tuple.to_list(peg2)) | result] |
|||
end |
|||
end |
|||
end |
|||
defp jump(pegs, _0, g1, _2) when elem(pegs,g1)==0, do: nil |
|||
defp jump(pegs, g0, _1, g2) when elem(pegs,g0)==0, do: if elem(pegs, g2)==1, do: "#{g2} to #{g0}" |
|||
defp jump(pegs, g0, _1, g2) , do: if elem(pegs, g2)==0, do: "#{g0} to #{g2}" |
|||
defp next_list(n) do |
|||
points = for x <- 1..n, y <- 1..x, do: {x,y} |
|||
board = points |> Enum.with_index |> Enum.into(Map.new) |
|||
Enum.flat_map(points, fn {x,y} -> |
|||
[ {board[{x,y}], board[{x, y+1}], board[{x, y+2}]}, |
|||
{board[{x,y}], board[{x+1,y }], board[{x+2,y }]}, |
|||
{board[{x,y}], board[{x+1,y+1}], board[{x+2,y+2}]} ] |
|||
end) |
|||
|> Enum.filter(fn {_,_,p} -> p end) |
|||
end |
|||
end |
|||
IQ_Puzzle.task</lang> |
|||
{{out}} |
|||
<pre style="height:80ex;overflow:scroll"> |
|||
0 |
|||
1 1 |
|||
1 1 1 |
|||
1 1 1 1 |
|||
1 1 1 1 1 |
|||
3 to 0 |
|||
1 |
|||
0 1 |
|||
0 1 1 |
|||
1 1 1 1 |
|||
1 1 1 1 1 |
|||
8 to 1 |
|||
1 |
|||
1 1 |
|||
0 0 1 |
|||
1 1 0 1 |
|||
1 1 1 1 1 |
|||
10 to 3 |
|||
1 |
|||
1 1 |
|||
1 0 1 |
|||
0 1 0 1 |
|||
0 1 1 1 1 |
|||
1 to 6 |
|||
1 |
|||
0 1 |
|||
0 0 1 |
|||
1 1 0 1 |
|||
0 1 1 1 1 |
|||
11 to 4 |
|||
1 |
|||
0 1 |
|||
0 1 1 |
|||
1 0 0 1 |
|||
0 0 1 1 1 |
|||
2 to 7 |
|||
1 |
|||
0 0 |
|||
0 0 1 |
|||
1 1 0 1 |
|||
0 0 1 1 1 |
|||
9 to 2 |
|||
1 |
|||
0 1 |
|||
0 0 0 |
|||
1 1 0 0 |
|||
0 0 1 1 1 |
|||
0 to 5 |
|||
0 |
|||
0 0 |
|||
0 0 1 |
|||
1 1 0 0 |
|||
0 0 1 1 1 |
|||
6 to 8 |
|||
0 |
|||
0 0 |
|||
0 0 1 |
|||
0 0 1 0 |
|||
0 0 1 1 1 |
|||
13 to 11 |
|||
0 |
|||
0 0 |
|||
0 0 1 |
|||
0 0 1 0 |
|||
0 1 0 0 1 |
|||
5 to 12 |
|||
0 |
|||
0 0 |
|||
0 0 0 |
|||
0 0 0 0 |
|||
0 1 1 0 1 |
|||
11 to 13 |
|||
0 |
|||
0 0 |
|||
0 0 0 |
|||
0 0 0 0 |
|||
0 0 0 1 1 |
|||
14 to 12 |
|||
0 |
|||
0 0 |
|||
0 0 0 |
|||
0 0 0 0 |
|||
0 0 1 0 0 |
|||
Solved |
|||
</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |
||
Line 608: | Line 755: | ||
LL = [[move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(10, 6, 3), move(12, 8, 5), move(13, 9, 6), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(10, 6, 3), move(12, 8, 5), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(10, 6, 3), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(..., ..., ...)|...], [move(4, 2, 1), move(..., ..., ...)|...], [move(..., ..., ...)|...], [...|...]|...], |
LL = [[move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(10, 6, 3), move(12, 8, 5), move(13, 9, 6), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(10, 6, 3), move(12, 8, 5), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(10, 6, 3), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(7, 4, 2), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(1, 3, 6), move(..., ..., ...)|...], [move(4, 2, 1), move(6, 5, 4), move(..., ..., ...)|...], [move(4, 2, 1), move(..., ..., ...)|...], [move(..., ..., ...)|...], [...|...]|...], |
||
Len = 29760. |
Len = 29760. |
||
</pre> |
</pre> |
||
=={{header|Python}}== |
=={{header|Python}}== |
||