概要
paiza.ioでelixirやってみた。
zundoko書いたけど、バグってる。
見逃すときが、ある。
サンプルコード
defmodule Zundoko do
def start() do
Stream.repeatedly(fn ->
["ズン", "ドコ"]
|> Enum.random
end)
|> run
end
def run(input) do
match = ["ドコ", "ズン", "ズン", "ズン", "ドコ"]
eol = "キ・ヨ・シ!"
input
|> Stream.transform([], fn item, acc ->
if List.last(acc) == eol do
{:halt, nil}
else
if Enum.count(acc) < Enum.count(match) do
{[item], acc ++ [item]}
else
if acc == match do
{[eol], acc ++ [eol]}
else
{[item], [item]}
end
end
end
|> IO.inspect
end)
|> Enum.to_list
|> Enum.reduce("", fn v, s ->
s = s <> v <> " "
end)
end
end
defmodule Zundoko2 do
def start() do
Stream.repeatedly(fn ->
["ズン", "ドコ"]
|> Enum.random
end)
|> run
end
def run(input) do
match = ["ドコ", "ズン", "ズン", "ズン"]
eol = "ドコ キ・ヨ・シ!"
doko = "ドコ"
input
|> Stream.transform([], fn item, acc ->
if List.last(acc) == eol do
{:halt, nil}
else
if item == doko do
{[item], [item]}
else
if Enum.count(acc) < Enum.count(match) do
{[item], acc ++ [item]}
else
if acc == match do
{[eol], acc ++ [eol]}
else
{[item], [item]}
end
end
end
end
|> IO.inspect
end)
|> Enum.to_list
|> Enum.reduce("", fn v, s ->
s = s <> v <> " "
end)
end
end
Zundoko.start
|> IO.inspect
Zundoko2.start
|> IO.inspect
実行結果
{["ズン"], ["ズン"]}
{["ドコ"], ["ズン", "ドコ"]}
{["ドコ"], ["ズン", "ドコ", "ドコ"]}
{["ドコ"], ["ズン", "ドコ", "ドコ", "ドコ"]}
{["ドコ"], ["ズン", "ドコ", "ドコ", "ドコ", "ドコ"]}
{["ズン"], ["ズン"]}
{["ズン"], ["ズン", "ズン"]}
{["ズン"], ["ズン", "ズン", "ズン"]}
{["ドコ"], ["ズン", "ズン", "ズン", "ドコ"]}
{["ズン"], ["ズン", "ズン", "ズン", "ドコ", "ズン"]}
{["ズン"], ["ズン"]}
{["ドコ"], ["ズン", "ドコ"]}
{["ドコ"], ["ズン", "ドコ", "ドコ"]}
{["ズン"], ["ズン", "ドコ", "ドコ", "ズン"]}
{["ドコ"], ["ズン", "ドコ", "ドコ", "ズン", "ドコ"]}
{["ドコ"], ["ドコ"]}
{["ズン"], ["ドコ", "ズン"]}
{["ズン"], ["ドコ", "ズン", "ズン"]}
{["ズン"], ["ドコ", "ズン", "ズン", "ズン"]}
{["ドコ"], ["ドコ", "ズン", "ズン", "ズン", "ドコ"]}
{["キ・ヨ・シ!"],
["ドコ", "ズン", "ズン", "ズン", "ドコ", "キ・ヨ・シ!"]}
{:halt, nil}
"ズン ドコ ドコ ドコ ドコ ズン ズン ズン ドコ ズン ズン ドコ ドコ ズン ドコ ドコ ズン ズン ズン ドコ キ・ヨ・シ! "
{["ドコ"], ["ドコ"]}
{["ドコ"], ["ドコ"]}
{["ドコ"], ["ドコ"]}
{["ドコ"], ["ドコ"]}
{["ズン"], ["ドコ", "ズン"]}
{["ドコ"], ["ドコ"]}
{["ドコ"], ["ドコ"]}
{["ズン"], ["ドコ", "ズン"]}
{["ドコ"], ["ドコ"]}
{["ドコ"], ["ドコ"]}
{["ズン"], ["ドコ", "ズン"]}
{["ズン"], ["ドコ", "ズン", "ズン"]}
{["ズン"], ["ドコ", "ズン", "ズン", "ズン"]}
{["ドコ キ・ヨ・シ!"],
["ドコ", "ズン", "ズン", "ズン", "ドコ キ・ヨ・シ!"]}
{:halt, nil}
"ドコ ドコ ドコ ドコ ズン ドコ ドコ ズン ドコ ドコ ズン ズン ズン ドコ キ・ヨ・シ! "
成果物
以上。