忘れじの行く末まではかたければ今日を限りの命ともがな
Advent Calendar 2022 106日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
この記事は、Advent Of Code 2021 Day 5: Hydrothermal VentureをElixirで楽しんでみます。
私はGitHubでログインしました。
私の回答
私の回答です。
私の回答
input = """
0,9 -> 5,9
8,0 -> 0,8
9,4 -> 3,4
2,2 -> 2,1
7,0 -> 7,4
6,4 -> 2,0
0,9 -> 2,9
3,4 -> 1,4
0,0 -> 8,8
5,5 -> 8,2
"""
Part 1
String.split(input, "\n", trim: true)
|> Enum.map(& String.split(&1, " -> "))
|> Enum.map(fn [s, e] -> {String.split(s, ","), String.split(e, ",")} end)
|> Enum.map(fn {[x1, y1], [x2, y2]} -> {{String.to_integer(x1), String.to_integer(y1)}, {String.to_integer(x2), String.to_integer(y2)}} end)
|> Enum.filter(fn {{x1, y1}, {x2, y2}} -> x1 == x2 or y1 == y2 end)
|> Enum.flat_map(fn
{{x1, y1}, {x1, y2}} -> Enum.map(y1..y2, & {x1, &1})
{{x1, y1}, {x2, y1}} -> Enum.map(x1..x2, & {&1, y1})
end)
|> Enum.reduce(%{}, fn coordinate, acc ->
Map.update(acc, coordinate, 1, & &1 + 1)
end)
|> Enum.filter(fn {_, cnt} -> cnt > 1 end)
|> Enum.count()
Part 2
String.split(input, "\n", trim: true)
|> Enum.map(& String.split(&1, " -> "))
|> Enum.map(fn [s, e] -> {String.split(s, ","), String.split(e, ",")} end)
|> Enum.map(fn {[x1, y1], [x2, y2]} -> {{String.to_integer(x1), String.to_integer(y1)}, {String.to_integer(x2), String.to_integer(y2)}} end)
|> Enum.filter(fn {{x1, y1}, {x2, y2}} -> x1 == x2 or y1 == y2 or (abs(x1 - x2) == abs(y1 - y2)) end)
|> Enum.flat_map(fn
{{x1, y1}, {x1, y2}} -> Enum.map(y1..y2, & {x1, &1})
{{x1, y1}, {x2, y1}} -> Enum.map(x1..x2, & {&1, y1})
{{x1, y1}, {x2, y2}} -> Enum.zip(x1..x2, y1..y2)
end)
|> Enum.reduce(%{}, fn coordinate, acc ->
Map.update(acc, coordinate, 1, & &1 + 1)
end)
|> Enum.filter(fn {_, cnt} -> cnt > 1 end)
|> Enum.count()
It works!
Amazing!
私の回答は、正解を得ることができていますがなんとなくイケていない感が満載です。
メモリ使いすぎかも。
後述するJosé Valimさんのお手本はとても勉強になります。
お見逃し無く!
お手本
José ValimさんがLivebook楽しまれている動画があります。
José Valimさんは、Elixirの作者です!
いきなり正解を書くわけではなく、少しずつ試しながら作っていって、リファクタしていくさまがJosé Valimさんの息遣いでみれるのでとても参考になります。
私は英語をよく聞き取れてはいませんが、コードが進化していくさまをみるのはとても勉強になります。
お手本
まだ見ていないのです
Wrapping up
Advent Of Code 2021 Day 5: Hydrothermal Ventureを[Elixirで楽しんでみました。
Day 25まであるので引き続き楽しんでいきたいとおもいます。
メモリ使いすぎ感はありますが、 Day 5: Hydrothermal Ventureはスッキリ解けました。
It works!
Amazing!
自分で解いてみて、なんだかイマイチだなあとおもいながら、動画をみることでJosé Valimさんに特別家庭教師をしてもらっている気に勝手になっています 。
海綿が水を吸うように、Elixirのイケている書き方を吸収しています。
伸びしろしかありません。
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!
We appreciate this shoutout, Torifuku! pic.twitter.com/dThmJg4CYN
— ClickUp (@clickup) April 11, 2022