Elementary cellular automaton/Infinite length: Difference between revisions

→‎{{header|Elixir}}: change Dict(deprecated) -> Map, String.rjust -> String.pad_leading
m (Added Sidef)
(→‎{{header|Elixir}}: change Dict(deprecated) -> Map, String.rjust -> String.pad_leading)
Line 119:
 
=={{header|Elixir}}==
{{works with|Elixir|1.3}}
{{trans|Ruby}}
<lang elixir>defmodule Elementary_cellular_automaton do
defmodule Elementary_cellular_automaton do
def infinite(cell, rule, times) do
each(cell, rule_pattern(rule), times)
Line 130 ⟶ 132:
IO.puts String.replace(cells, "0", ".") |> String.replace("1", "#")
c = not_cell(String.first(cells)) <> cells <> not_cell(String.last(cells))
next_cells = Enum.mapmap_join(0..String.length(cells)+1, fn i ->
DictMap.get(rules, String.slice(c, i, 3))
end) |> Enum.join
each(next_cells, rules, times-1)
end
Line 140 ⟶ 142:
defp rule_pattern(rule) do
list = Integer.to_string(rule, 2) |> String.rjustpad_leading(8, ?"0")
|> String.split("", trim: true)codepoints |> Enum.reverse
Enum.map(0..7, fn i -> String.rjust(Integer.to_string(i, 2), |> String.pad_leading(3, ?"0") end)
|> Enum.zip(list) |> Enum.into(Map.new)
end
end
Anonymous user