LoginSignup
5
1

Elixirで言語処理100本ノックやってみた!vol.6 ①和集合

Last updated at Posted at 2024-04-18

こんにちは!
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を使っていますが、その発想が出ず苦労しました。

これも関数の使い方のレパートリーが増えればさくさく解いていけそうな問題なので、引き続き頑張ります。

次回は②積集合を解きます。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1