2014-04-05 4 views
0

Scala를 사용하여 간단한 자원 할당 문제를 해결하고 싶습니다. t모든 가능한 고유 한 조합 찾기

val t1 = List(1, 2) 
val t2 = List(2, 3, 4) 
val t3 = List(0) 
val t4 = List(1, 4) 

그냥 작업 및 목록 자원 ID를 나타냅니다
내가 지금 가지고있는 것은이 작업을 수행 할 수있는 작업과 자원의 목록입니다. 이제 내가 그와 같은 자원 ID가 작업 ID를 결합 할 수 있다고 가정 해 봅시다 : a 특정 작업에 대한 할당을 나타냅니다

val a1 = List((1, 1), (1, 2)) 
val a2 = List((2, 2), (2, 3), (2, 4)) 
val a3 = List((3, 0)) 
val a4 = List((4, 1), (4, 4)) 

합니다.

그래서 다음 단계는 하나 개의 목록에있는 모든 과제와 평면을 수집하는 것입니다

val assignments = List((1, 1), (1, 2), (2, 2), (2, 3), (2, 4), (3, 0), (4, 1), (4, 4))

은 내가 여기에 갖고 싶어하는 과제의 목록 모든 작업 ID는 다른 포함 된 모든 가능한 조합이다 .

val result1 = List((1, 1), (2, 3), (3, 0), (4, 4)) 
val result2 = List((1, 2), (2, 2), (3, 0), (4, 1)) 
... 

어떻게하면됩니까?

답변

2

작업 수가 4로 고정되어 있습니까? 그래서 이것은 아주 사소한 경우 :

val t1 = List(1, 2) 
val t2 = List(2, 3, 4) 
val t3 = List(0) 
val t4 = List(1, 4) 

val as = for { 
    a1 ← t1 
    a2 ← t2 
    a3 ← t3 
    a4 ← t4 
} yield List((1,a1), (2, a2), (3, a3), (4, a4)) 

as foreach println 

출력은 다음과 같습니다 가능한 작업

List((1,1), (2,2), (3,0), (4,1)) 
List((1,1), (2,2), (3,0), (4,4)) 
List((1,1), (2,3), (3,0), (4,1)) 
List((1,1), (2,3), (3,0), (4,4)) 
List((1,1), (2,4), (3,0), (4,1)) 
List((1,1), (2,4), (3,0), (4,4)) 
List((1,2), (2,2), (3,0), (4,1)) 
List((1,2), (2,2), (3,0), (4,4)) 
List((1,2), (2,3), (3,0), (4,1)) 
List((1,2), (2,3), (3,0), (4,4)) 
List((1,2), (2,4), (3,0), (4,1)) 
List((1,2), (2,4), (3,0), (4,4)) 
+0

수는 사전에 알려져 있지만 고정되지 않습니다. 그것은 내가 읽은 파일에 달려 있습니다. – squixy