2차원 리스트의 움직임을 바라보는 것을 시도했다(Elixir)
18175 단어 Elixir
소개
@ 나스 _ 주먹밥 님의 2차원 배열의 움직임을 바라보는 함수를 만들었다(Python)을 쳐다 보았습니다.
0. 준비
Elixir을 설치합시다
$ mix new list_of_lists
$ cd list_of_lists
1. 소스 코드 작성
lib/list_of_lists.ex
defmodule ListOfLists do
@n 3
@m 3
@timeout 1000
def main do
[head | tail] = results()
print({head, {nil, nil}})
Process.sleep(@timeout)
Enum.zip(tail, for(i <- 0..(@n - 1), j <- 0..(@m - 1), do: {i, j}))
|> Enum.zip(List.duplicate(@timeout, @n * @m))
|> Enum.flat_map(fn {a, b} -> [a, b] end)
|> Enum.each(&print/1)
Enum.at(tail, -1) |> to_s(@n - 1, @m - 1, false) |> IO.puts()
end
defp results do
for(i <- 0..(@n - 1), j <- 0..(@m - 1), do: {i, j})
|> Enum.reduce([init_list_of_lists(@n, @m)], fn {i, j}, acc ->
last =
Enum.at(acc, -1)
|> get_and_update_in([Access.at(i), Access.at(j)], &{&1, pow(3, i + j)})
|> elem(1)
acc ++ [last]
end)
end
defp init_list_of_lists(n, m) do
1..n |> Enum.map(fn _ -> List.duplicate(0, m) end)
end
defp print(n) when is_integer(n), do: Process.sleep(n)
defp print({list_of_lists, {i, j}}) do
to_s(list_of_lists, i, j)
|> IO.puts()
end
defp to_s(list_of_lists, i, j, move \\ true, count \\ 5) do
for(k <- 0..(@n - 1), l <- 0..(@m - 1), do: {k, l})
|> Enum.map(fn {k, l} ->
value_with_leading =
get_in(list_of_lists, [Access.at(k), Access.at(l)])
|> Integer.to_string()
|> String.pad_leading(count)
if k == i && l == j do
"\x1b[31m#{value_with_leading}\x1b[0m"
else
value_with_leading
end
end)
|> Enum.chunk_every(@m)
|> Enum.map(&Enum.join/1)
|> Enum.join("\n")
|> (fn s -> "(#{i}, #{j})\n" <> s end).()
|> (fn s -> if(move, do: s <> "\x1b[#{@n + 1}A", else: s) end).()
end
defp pow(_, 0), do: 1
defp pow(n, m), do: n * pow(n, m - 1)
end
Kernel.put_in/3 라고 사고 나서 거의 읽지 않은 책에 그렇게 말하면
○、✗
게임의 데이터 구조의 설명으로 편리한 함수를 사용하고 있었던 것을 생각해 내고 나서 나서 기억해 냈습니다 list_of_lists
라는 표현은 Designing Elixir Systems With OTP: Write Highly Scalable, Self-Healing Software With Layers의 인수 이름으로 사용되며 목록의 각 요소가 목록 인 경우 원어민이 될 것이라고 생각합니다.'\033'
ESC
는 "\0x1b"
ぃ st. 지 p/1에서 알았습니다
2. 실행
$ iex -S mix
iex> ListOfLists.main
전 기사
Wrapping Up
$ iex -S mix
iex> ListOfLists.main
Elixir 는 공식 문서를 읽는 것이 제일!
Reference
이 문제에 관하여(2차원 리스트의 움직임을 바라보는 것을 시도했다(Elixir)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/68783f2d8d819f506061텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)