2018 Day 24 Done
This commit is contained in:
44
2018/day24/initiative.go
Normal file
44
2018/day24/initiative.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
type Initiative []*Group
|
||||
|
||||
func (in Initiative) Len() int {
|
||||
return len(in)
|
||||
}
|
||||
|
||||
func (in Initiative) Swap(i, j int) {
|
||||
in[i], in[j] = in[j], in[i]
|
||||
}
|
||||
|
||||
func (in Initiative) Less(i, j int) bool {
|
||||
return in[i].Initiative > in[j].Initiative
|
||||
}
|
||||
|
||||
func (in Initiative) Attack() {
|
||||
sort.Sort(in)
|
||||
|
||||
for _, group := range in {
|
||||
if group.Units > 0 && group.Target != nil && group.Target.Units > 0 {
|
||||
group.Target.Units -= group.DamageDealt(group.Target) / group.Target.HitPoints
|
||||
}
|
||||
if group.Target != nil {
|
||||
group.Target.Attacker = nil
|
||||
group.Target = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (in *Initiative) Clean() {
|
||||
c := (*in)[:0]
|
||||
for _, g := range *in {
|
||||
if g.Units > 0 {
|
||||
c = append(c, g)
|
||||
}
|
||||
}
|
||||
sort.Sort(c)
|
||||
*in = c
|
||||
}
|
||||
Reference in New Issue
Block a user