let maxDouble = 12 let tilesInHand = 15 let all = Domino.all(up: maxDouble) var remaining = all let start = Domino(double: maxDouble) remaining.remove(start) // choose 15 random tiles var handTiles = Set() while handTiles.count < tilesInHand && remaining.isEmpty == false { let next = remaining.randomElement()! handTiles.insert(next) remaining.remove(next) } let hand = Hand(dominos: handTiles) print("====== HAND ======") hand.print() let trains = hand.trains(startingWith: start.trailing) let sorted = trains.sorted { $0.path.count > $1.path.count } if let best = sorted.first { print("====== BEST of \(sorted.count) ======") best.print() } else { print("No trains starting with \(start.trailing)") }