Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,27 @@
|
|||
import scala.math.abs
|
||||
|
||||
object Dinesman3 extends App {
|
||||
val tenants = List("Baker", "Cooper2", "Fletcher4", "Miller", "Smith")
|
||||
val (groundFloor, topFloor) = (1, tenants.size)
|
||||
|
||||
/** Rules with related tenants and restrictions*/
|
||||
val exclusions =
|
||||
List((suggestedFloor0: Map[String, Int]) => suggestedFloor0("Baker") != topFloor,
|
||||
(suggestedFloor1: Map[String, Int]) => suggestedFloor1("Cooper2") != groundFloor,
|
||||
(suggestedFloor2: Map[String, Int]) => !List(groundFloor, topFloor).contains(suggestedFloor2("Fletcher4")),
|
||||
(suggestedFloor3: Map[String, Int]) => suggestedFloor3("Miller") > suggestedFloor3("Cooper2"),
|
||||
(suggestedFloor4: Map[String, Int]) => abs(suggestedFloor4("Smith") - suggestedFloor4("Fletcher4")) != 1,
|
||||
(suggestedFloor5: Map[String, Int]) => abs(suggestedFloor5("Fletcher4") - suggestedFloor5("Cooper2")) != 1)
|
||||
|
||||
tenants.permutations.map(_ zip (groundFloor to topFloor)).
|
||||
filter(p => exclusions.forall(_(p.toMap))).toList match {
|
||||
case Nil => println("No solution")
|
||||
case xss => {
|
||||
println(s"Solutions: ${xss.size}")
|
||||
xss.foreach { l =>
|
||||
println("possible solution:")
|
||||
l.foreach(p => println(f"${p._1}%11s lives on floor number ${p._2}"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
import scala.math.abs
|
||||
|
||||
object Dinesman3 extends App {
|
||||
val tenants = List("Baker", "Cooper2", "Fletcher4", "Miller", "Rollo5", "Smith")
|
||||
val (groundFloor, topFloor) = (1, tenants.size)
|
||||
|
||||
/** Rules with related tenants and restrictions*/
|
||||
val exclusions =
|
||||
List((suggestedFloor0: Map[String, Int]) => suggestedFloor0("Baker") != topFloor,
|
||||
(suggestedFloor1: Map[String, Int]) => suggestedFloor1("Cooper2") != groundFloor,
|
||||
(suggestedFloor2: Map[String, Int]) => !List(groundFloor, topFloor).contains(suggestedFloor2("Fletcher4")),
|
||||
(suggestedFloor3: Map[String, Int]) => suggestedFloor3("Miller") > suggestedFloor3("Cooper2"),
|
||||
(suggestedFloor4: Map[String, Int]) => abs(suggestedFloor4("Smith") - suggestedFloor4("Fletcher4")) != 1,
|
||||
(suggestedFloor5: Map[String, Int]) => abs(suggestedFloor5("Fletcher4") - suggestedFloor5("Cooper2")) != 1,
|
||||
|
||||
(suggestedFloor6: Map[String, Int]) => !List(3, 4, topFloor).contains(suggestedFloor6("Rollo5")),
|
||||
(suggestedFloor7: Map[String, Int]) => suggestedFloor7("Rollo5") < suggestedFloor7("Smith"),
|
||||
(suggestedFloor8: Map[String, Int]) => suggestedFloor8("Rollo5") > suggestedFloor8("Fletcher4"))
|
||||
|
||||
tenants.permutations.map(_ zip (groundFloor to topFloor)).
|
||||
filter(p => exclusions.forall(_(p.toMap))).toList match {
|
||||
case Nil => println("No solution")
|
||||
case xss => {
|
||||
println(s"Solutions: ${xss.size}")
|
||||
xss.foreach { l =>
|
||||
println("possible solution:")
|
||||
l.foreach(p => println(f"${p._1}%11s lives on floor number ${p._2}"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
import scala.math.abs
|
||||
|
||||
object Dinesman2 extends App {
|
||||
val groundFloor = 1
|
||||
|
||||
abstract class Rule(val person: String) { val exclusion: Map[String, Int] => Boolean }
|
||||
|
||||
/** Rules with related tenants and restrictions*/
|
||||
def rulesDef(topFloor: Int) = List(
|
||||
new Rule("Baker") { val exclusion = (_: Map[String, Int])(person) != topFloor },
|
||||
new Rule("Cooper2") { val exclusion = (_: Map[String, Int])(person) != groundFloor },
|
||||
new Rule("Fletcher4") {
|
||||
val exclusion = (suggestedFloor2: Map[String, Int]) => !List(groundFloor, topFloor).contains(suggestedFloor2(person))
|
||||
}, new Rule("Miller") {
|
||||
val exclusion = (suggestedFloor3: Map[String, Int]) => suggestedFloor3(person) > suggestedFloor3("Cooper2")
|
||||
}, new Rule("Smith") {
|
||||
val exclusion = (suggestedFloor4: Map[String, Int]) => abs(suggestedFloor4(person) - suggestedFloor4("Fletcher4")) != 1
|
||||
}, new Rule("Fletcher4") {
|
||||
val exclusion = (suggestedFloor5: Map[String, Int]) => abs(suggestedFloor5(person) - suggestedFloor5("Cooper2")) != 1
|
||||
})
|
||||
|
||||
def extensionDef(topFloor: Int) = List(new Rule("Rollo5") {
|
||||
val exclusion = (suggestedFloor6: Map[String, Int]) => !List(3, 4, topFloor).contains((suggestedFloor6: Map[String, Int])(person))
|
||||
}, new Rule("Rollo5") {
|
||||
val exclusion = (suggestedFloor7: Map[String, Int]) => suggestedFloor7(person) < suggestedFloor7("Smith")
|
||||
}, new Rule("Rollo5") {
|
||||
val exclusion = (suggestedFloor8: Map[String, Int]) => suggestedFloor8(person) > suggestedFloor8("Fletcher4")
|
||||
})
|
||||
|
||||
def allRulesDef(topFloor: Int) = rulesDef(topFloor) ++ extensionDef(topFloor)
|
||||
|
||||
val tenants = allRulesDef(0).map(_.person).distinct // Pilot balloon to get # of tenants
|
||||
val topFloor = tenants.size
|
||||
val exclusions = allRulesDef(topFloor).map(_.exclusion)
|
||||
|
||||
tenants.permutations.map(_ zip (groundFloor to topFloor)).
|
||||
filter(p => exclusions.forall(_(p.toMap))).toList match {
|
||||
case Nil => println("No solution")
|
||||
case xss => {
|
||||
println(s"Solutions: ${xss.size}")
|
||||
xss.foreach { l =>
|
||||
println("possible solution:")
|
||||
l.foreach(p => println(f"${p._1}%11s lives on floor number ${p._2}"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue