public
Description: An implementation of a solution to Ruby Quiz 65 (http://rubyquiz.com/quiz65.html)
Homepage:
Clone URL: git://github.com/rrees/ruby-tuesday-loot-splitter.git
ruby-tuesday-loot-splitter / scala / src / splitter.scala
100644 38 lines (24 sloc) 0.948 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import gems._
 
package splitter {
 
class LootSplitter
 
object LootSplitter {
 
val emptyBag = List[GemBag]()
 
val smallestGemBagFirst = {(firstGemBag: GemBag, secondGemBag: GemBag) => firstGemBag.totalValue < secondGemBag.totalValue}
 
val largestGemFirst = {(aGem: Gem, anotherGem: Gem) => aGem.value > anotherGem.value}
 
def splitLoot(gembag: GemBag, shares: Int): List[GemBag] = {
 
 
if((gembag.totalValue % shares) != 0) {
return emptyBag
}
 
val individualShareValue = gembag.totalValue / shares
 
var partShares: List[GemBag] = List.make(shares, new GemBag(List()))
 
gembag.gems.sort(largestGemFirst).foreach((gem: Gem) => {
partShares = assignGemToBag(gem, partShares)
})
 
partShares
}
 
private def assignGemToBag(gem:Gem, bags: List[GemBag]): List[GemBag] = {
val sortedBags = bags.sort(smallestGemBagFirst)
List(sortedBags(0) add gem) ::: (sortedBags drop 1)
}
}
}