54 lines
1.0 KiB
Go
54 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"sort"
|
|
)
|
|
|
|
func search(hand []Card, wildFace int, search Card) []int {
|
|
ret := []int{}
|
|
for idx, c := range hand {
|
|
if c.Masked() {
|
|
continue // Doesn't match anything
|
|
}
|
|
|
|
if c == search || c.Joker() || c.Face() == wildFace {
|
|
ret = append(ret, idx)
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
// take takes a single card out of a hand by its index, returning the remaining cards.
|
|
func take(hand []Card, index int) (Card, []Card) {
|
|
cc := hand[index]
|
|
|
|
rem := make([]Card, 0, len(hand)-1)
|
|
rem = append(rem, hand[0:index]...)
|
|
rem = append(rem, hand[index+1:]...)
|
|
|
|
return cc, rem
|
|
}
|
|
|
|
func forkPossibilities(in map[int]struct{}) map[int]struct{} {
|
|
ret := map[int]struct{}{}
|
|
for prev, _ := range in {
|
|
ret[prev] = struct{}{}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func forkHand(hand []Card) []Card {
|
|
ret := make([]Card, len(hand))
|
|
copy(ret, hand)
|
|
return ret
|
|
}
|
|
|
|
func flattenPossibility(in map[int]struct{}) []int {
|
|
flat := make([]int, 0, len(in))
|
|
for cidx, _ := range in {
|
|
flat = append(flat, cidx)
|
|
}
|
|
sort.Ints(flat)
|
|
return flat
|
|
}
|