-5

重複の可能性:
Scala のゼブラ パズル

この問題は、過去 2 日間、私を悩ませていました。

そのようなパズルを解く Scala の方法は何ですか? 以下の Python で Scala に示されているネストされた for ループを実装しようとしましたが、うまくいきません。ループは、2 番目の制約で既に 0 の結果を返しています。これはおそらく、私が Scala に不慣れで、詳細を見逃しているためです。

誰かが何か考えを持っているなら、私の貧しい魂を助けてください、ありがとう.

ここに画像の説明を入力

ここに私のコード、

  val houses = List(1, 2, 3, 4, 5)
  val orderings = houses.permutations
  val List(first, _, middle, _, _) = houses

  def imright(h1: Int, h2: Int) = h1 - h2 == 1

  def nextto(h1: Int, h2: Int) = math.abs(h1 - h2) == 1

  for (List(red, green, ivory, yellow, blue) <- orderings if imright(green, ivory))
    for(List(englishman, spaniard, ukrainian, japanese, norwegian) <- orderings;
      if englishman == red; 
      if norwegian == first) println(orderings.length)
4

1 に答える 1

0
  val houses = List(1, 2, 3, 4, 5)
  val orderings = houses.permutations.toList
  val List(first, _, middle, _, _) = houses

  def imright(h1: Int, h2: Int) = h1 - h2 == 1

  def nextto(h1: Int, h2: Int) = math.abs(h1 - h2) == 1

  for (List(red, green, ivory, yellow, blue) <- orderings if imright(green, ivory))
    for(List(englishman, spaniard, ukranian, japanese, norwegian) <- orderings
      if (englishman == red)
    ) println(Map(
      "englishman" -> englishman
      ,"red" -> red
      ,"norwegian" -> norwegian
      ,"first" -> first
    ))   
于 2012-12-31T10:08:22.273 に答える