【发布时间】:2022-09-25 19:09:54
【问题描述】:
在 Kotlin 中,我需要确保覆盖所有工作站,以便人们可以预订休假,有 4 个工作站,但人们一次只能做 1 个。我需要确保所有工作站至少有 1 人参与,我的代码存在的问题是人们能够使用多个工作站
enum class WorkStations {
PANEL, OUTSIDE, MOVEMENTS, EXTRUDER
}
data class Operator(val name: String, val workStations: List<WorkStations> =
emptyList())
fun main() {
val array = arrayListOf(
Operator(
\"Andy\",
listOf(WorkStations.PANEL, WorkStations.OUTSIDE, WorkStations.MOVEMENTS)
),
Operator(
\"Alan\",
listOf(WorkStations.PANEL, WorkStations.OUTSIDE, WorkStations.MOVEMENTS)
),
Operator(
\"Matt\",
listOf(WorkStations.OUTSIDE)
),
Operator(
\"Paul\",
listOf(WorkStations.EXTRUDER, WorkStations.MOVEMENTS)
),
Operator(
\"Jack\",
listOf(WorkStations.EXTRUDER, WorkStations.MOVEMENTS)
),
Operator(
\"James\",
listOf(WorkStations.OUTSIDE)
),
Operator(
\"Tall Paul\",
),
Operator(
\"Josh\")
)
fun areWorkStationsCovered(array: ArrayList<Operator>): Boolean {
val newList = array.flatMap { it.workStations }.groupingBy { it }.eachCount().filter { it.value >= 1 }
println(newList)
return newList.size >= 4
}
println(areWorkStationsCovered(array))
}
返回:
{PANEL=2, OUTSIDE=4, MOVEMENTS=4, EXTRUDER=2}
true
但这是不正确的,好像 Paul 和 Alan 都关闭了,然后返回:
{PANEL=1, OUTSIDE=3, MOVEMENTS=2, EXTRUDER=1}
true
看起来不错,但不正确,因为 Jack 需要做 EXTRUDER,因此只有 1 个动作人员,而 Andy 必须做 PANEL,因此没有动作人员,我想我需要从原始列表中删除人员,但就是想不出一个简单,实用的方法任何想法将不胜感激......
-
我不明白为什么它不正确。你期望什么输出?请不要描述它。像这样发布:
{PANEL=1, ... } -
P1 可以做 A, B, C, P2 可以做 A, B, C, P3 可以做 B, P4 可以做 C, D, P5 可以做 C, D, P6 可以做 B. 各一个 (A, B, C、D) 都是必需的,但 P\'s 一次只能做 1 个,即如果 P2 被删除,P1 必须是 A ONLY。
-
我有问题。我给你写了一个答案,但很抱歉没有代码。但是算法应该很清楚。如果我有时间,我会编辑我的答案并添加一些代码
-
欣赏库兹杜
-
我编辑我的答案并添加一些工作代码。我希望这有帮助
标签: kotlin