-3

ylistから1 つのリストを削除する関数がありますx。前提条件は、出現リストyが のサブセットであるということですx- に現れる文字は に現れyなければならず、におけるその頻度 <=xにおけるその頻度でなければなりません。yx

結果の値はオカレンスです。つまり、並べ替えられており、ゼロ エントリはありません。

これは私のオリジナルのコードです。これは Scala progfun の割り当てのためのものでした。今、私は正しい答えが何であったかについて興味があります。

type Occurrences = List[(Char, Int)]

def subtract(x: Occurrences, y: Occurrences): Occurrences = x filterNot (y contains)

次の単体テストに合格する必要があります。

テスト 1

 test("subtract: lard - r") {
    val lard = List(('a', 1), ('d', 1), ('l', 1), ('r', 1))
    val r = List(('r', 1))
    val lad = List(('a', 1), ('d', 1), ('l', 1))
    assert(subtract(lard, r) === lad)
  }

テスト 2

// subtract: jimmy - my
List((i,1), (j,1), (m,1), (y,0)) did not equal List((i,1), (j,1), (m,1))

テスト 3

//subtract: ok - ok
List((k,0), (o,0)) did not equal List()

テスト 4

//subtract: abba - abba
List((a,0), (b,0)) did not equal List()

テスト 5

//subtract: assessment - assess
4

2 に答える 2

0

左側がyの任意の要素の左側と等しい要素を削除する場合は、次のコードで削除します。

def subtract(x: Occurrences, y: Occurrences): Occurrences = 
  x filterNot (y.map(_._1) contains _._1)
于 2012-11-06T07:18:59.703 に答える
0

割り当てを正しく理解していれば、カウントを差し引く必要があります。私の試みは次のようなものです:

def subtract(x: Occurrences, y: Occurrences): Occurrences = {
  val my = y.toMap
  x.map(occ => (occ._1, occ._2 - (my.get(occ._1) getOrElse 0) ))
   .filter(_._2 > 0)
}
于 2012-11-06T23:23:57.623 に答える