大江山いく野の道の遠ければまだふみも見ずあまの橋立
Advent Calendar 2022 112日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
Elixirを楽しんでいますか
こういう文字列があったときに
input = """
2199943210
3987894921
9856789892
8767896789
9899965678
"""
次のようなマップを作りたいとおもいます。
%{
{0,0} => 2,
{0,1} => 1,
{0,2} => 9,
...
{4,8} => 7,
{4,9} => 8
}
マップですので、順番はこの通りにはならなくてよいです2。
要は、左上が{0, 0}
、右下が{4, 9}
の座標という具合です。
どうするとよいでしょうか。
答え
答えは畳んでおきますのでお時間のある方は考えてみてください。
タイトルの通り、for/1とEnum.with_index/2を使うとよいです。
お手本
grid =
for {line, row} <- Enum.with_index(input |> String.split("\n", trim: true)),
{number, col} <- Enum.with_index(line |> String.to_charlist()),
into: %{} do
{{row, col}, number - ?0}
end
どうでしょうか!
for/1とEnum.with_index/2が巧みに利用されているように私には見えます!
種明かし
上記の問題をJosé Valim3さんが解いている動画があります。
インプットの読み取りと下準備に関するJosé Valim3さんのコードをみて、私は「格好いい!」「カッチョいい!」とおもいました。
そこで、ここだけ切り出して記事にしておきました。
Wrapping up
Enjoy Elixir
$\huge{Enjoy\ Elixir🚀}$
以上です。
I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.
We Are The Alchemists, my friends!
-
@kaizen_nagoya さんの「「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 1日目 Most Breakthrough Generator」から着想を得て、模倣いたしました。 ↩
-
マップですので、順番はこの通りにはなりません。 ↩