2018 Day 24 Done
This commit is contained in:
52
2018/day24/group.go
Normal file
52
2018/day24/group.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Group struct {
|
||||
Units int
|
||||
HitPoints int
|
||||
AttackDamage int
|
||||
AttackType string
|
||||
Initiative int
|
||||
Immunities []string
|
||||
Weaknesses []string
|
||||
|
||||
Attacker *Group
|
||||
Target *Group
|
||||
}
|
||||
|
||||
func (g Group) EffectivePower() int {
|
||||
return g.Units * g.AttackDamage
|
||||
}
|
||||
|
||||
func (g Group) DamageDealt(e *Group) int {
|
||||
if ContainsString(e.Immunities, g.AttackType) {
|
||||
return 0
|
||||
}
|
||||
if ContainsString(e.Weaknesses, g.AttackType) {
|
||||
return g.EffectivePower() * 2
|
||||
}
|
||||
return g.EffectivePower()
|
||||
}
|
||||
|
||||
func (g Group) String() string {
|
||||
out := fmt.Sprintf("%d units each with %d hit points", g.Units, g.HitPoints)
|
||||
if len(g.Immunities) > 0 || len(g.Weaknesses) > 0 {
|
||||
out += " ("
|
||||
if len(g.Immunities) > 0 {
|
||||
out += "immune to " + strings.Join(g.Immunities, " and ")
|
||||
if len(g.Weaknesses) > 0 {
|
||||
out += "; "
|
||||
}
|
||||
}
|
||||
if len(g.Weaknesses) > 0 {
|
||||
out += "weak to " + strings.Join(g.Weaknesses, " and ")
|
||||
}
|
||||
out += ")"
|
||||
}
|
||||
out += fmt.Sprintf(" with an attack that does %d %s damage at initiative %d", g.AttackDamage, g.AttackType, g.Initiative)
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user