元気ですかーーーーッ!
元気があればなんでもできる
迷わず行けよ
行けばわかるさ
文章を縦書きにしてみます。
Elixirで楽しみます。
s = """
元気ですかーーーーッ!
元気があればなんでもできる
迷わず行けよ
行けばわかるさ
"""
list_of_lists = s |> String.split("\n") |> Enum.map(&String.codepoints/1)
cnt = list_of_lists |> Enum.max_by(&Enum.count/1) |> Enum.count |> Kernel.-(1)
(for j <- 0..cnt,
do: list_of_lists
|> Enum.map(fn list -> Enum.at(list, j, " ") end)
|> Enum.reverse()
|> Enum.join())
|> Enum.each(&IO.puts/1)
実行結果
入力を細工
s = """
元気ですか||||ッ!
元気があればなんでもできる
迷わず行けよ
行けばわかるさ
"""
# あとは上記と同じ
実行結果
追記
autoracexにて、@t-yamanashiさん、@Mnishiguchiさん、@tamanugiさんの検討会が行われていました。
@tamanugi さんが関数型っぽい書き方を紹介してくださいました。
感謝いたします。
感激の興奮冷めやらぬうちに追記いたしておきます。
Enum.zip/1を使う解法です。
["ドットコム", "どこが混むのと", "聞く上司"]
|> Enum.reduce({[], 0}, fn i, {a, b} -> {[i | a], max(String.length(i), b)} end)
|> then(fn {texts, l} -> Enum.map(texts, &String.pad_trailing(&1, l, " ")) end)
|> Enum.map(&to_charlist/1)
|> Enum.zip()
|> Enum.map(&Tuple.to_list/1)
|> Enum.each(&IO.puts/1)
猪木さん風の言葉を再掲。
"""
元気ですか||||ッ!
元気があればなんでもできる
迷わず行けよ
行けばわかるさ
"""
|> String.split("\n")
|> Enum.reduce({[], 0}, fn i, {a, b} -> {[i | a], max(String.length(i), b)} end)
|> then(fn {texts, l} -> Enum.map(texts, &String.pad_trailing(&1, l, " ")) end)
|> Enum.map(&to_charlist/1)
|> Enum.zip()
|> Enum.map(&Tuple.to_list/1)
|> Enum.each(&IO.puts/1)