以下のプレビューを確認して、よければページ下部のボタンで更新してください。

すでに問題26で得ている解法というか、メソッドを使えば、この問題27を単純化できることに気がつく

object P27 {
 import P26.combinations

 def group3[T](l: List[T]): List[List[List[T]]] =
   for { a <- combinations(2, l)
        noA = l -- a
        b <- combinations(3, noA) }
   yield List(a, b, noA -- b)

 def group[T](ns: List[Int], l: List[T]): List[List[List[T]]] = ns match {
   case Nil => List(Nil)
   case n :: ns => combinations(n, l).flatMap(c => group(ns, l -- c).map(rest => c :: rest))
 }
}

配列の組み合わせによるfor文

scalaではfor文は配列の要素をループのカウントがわりに用いることができる。

yield文

for文のあとに記述することで、

for文のループ中の要素をyield文中のプログラムを実行することが可能です。

--表記

noA = l -- a

配列lから、配列aの要素を除いたモノを返す


タイムスタンプを変更しない
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS