こんにちは!
3ヶ月で、Elixir言語で開発できるようになるため、奮闘中のこーへーです!
vol.6は、一つの問題の中に複数問題が含まれている感じの形式なので、今回はvol.6①でやっていきたいと思います。
では、やっていきたいと思います。
100本ノックの記事はこちら
06. 和集合
“paraparaparadise”と”paragraph”に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,’se’というbi-gramがXおよびYに含まれるかどうかを調べよ.
まずは、和集合から。
和集合とは、2つの集合の少なくともどちらか1つに含まれる要素の集合のことです
つまり、「paraparaparadise」とparagraphを文字のbigramにしたのち、どちらか1つに含まれる要素を抜き出すという内容になります。
Comprehensiveモジュール、union関数の作成
defmodule Comprehensive do
def union(x, y) do
String.codepoints(x <> y)
|> Enum.chunk_every(2, 1, :discard)
|> Enum.map(fn x -> Enum.join(x) end)
|> Enum.uniq
end
end
Comprehensive.union("paraparaparadise", "paragraph")の実行結果
iex> Comprehensive.union("paraparaparadise", "paragraph")
["pa", "ar", "ra", "ap", "ad", "di", "is", "se", "ep", "ag", "gr", "ph"]
まとめ
今回意外と苦戦したのは、bigramにするところです。Enum.mapの中で、Enum.joinを使っていますが、その発想が出ず苦労しました。
これも関数の使い方のレパートリーが増えればさくさく解いていけそうな問題なので、引き続き頑張ります。
次回は②積集合を解きます。