Fibonacci word/fractal: Difference between revisions

Added Elixir
m (→‎{{header|REXX}}: added/changed whitespace and comments.)
(Added Elixir)
Line 309:
}</lang>
It prints the level 25 word as the Python entry.
 
=={{header|Elixir}}==
{{trans|Ruby}}
<lang elixir>defmodule Fibonacci do
def fibonacci_word, do: Stream.unfold({"1","0"}, fn{a,b} -> {a, {b, b<>a}} end)
def word_fractal(n) do
word = fibonacci_word |> Enum.at(n)
walk(to_char_list(word), 1, 0, 0, 0, -1, %{{0,0}=>"S"})
|> print
end
defp walk([], _, _, _, _, _, map), do: map
defp walk([h|t], n, x, y, dx, dy, map) do
map2 = Dict.put(map, {x+dx, y+dy}, (if dx==0, do: "|", else: "-"))
|> Dict.put({x2=x+2*dx, y2=y+2*dy}, "+")
if h == ?0 do
if rem(n,2)==0, do: walk(t, n+1, x2, y2, dy, -dx, map2),
else: walk(t, n+1, x2, y2, -dy, dx, map2)
else
walk(t, n+1, x2, y2, dx, dy, map2)
end
end
defp print(map) do
xkeys = Dict.keys(map) |> Enum.map(fn {x,_} -> x end)
xmin = Enum.min(xkeys)
xmax = Enum.max(xkeys)
ykeys = Dict.keys(map) |> Enum.map(fn {_,y} -> y end)
ymin = Enum.min(ykeys)
ymax = Enum.max(ykeys)
Enum.each(ymin..ymax, fn y ->
IO.puts Enum.map_join(xmin..xmax, fn x -> Dict.get(map, {x,y}, " ") end)
end)
end
end
 
Fibonacci.word_fractal(16)</lang>
Output is same as Ruby.
 
=={{header|FreeBASIC}}==
On a Windows 32bit system F_word35 is the biggest that can be drawn.
Anonymous user