package day12

import (
	"strings"
)

func ParseInput(data []string) (map[int]bool, []*Rule) {
	stateStrings := strings.Split(data[0], " ")
	state := stateStrings[len(stateStrings)-1]
	ruleStrings := data[2:]

	// Populate plant map
	plants := make(map[int]bool)
	for i, byte := range []byte(state) {
		if byte == '#' {
			plants[i] = true
		}
	}

	// Create rules
	rules := []*Rule{}
	for _, ruleStr := range ruleStrings {
		ruleData := strings.Split(ruleStr, " ")

		rule := &Rule{}
		positions := []byte(ruleData[0])

		for i := 0; i < 5; i++ {
			rule.Positions[i] = positions[i] == '#'
		}

		if ruleData[2] == "#" {
			rule.Result = true
		} else {
			rule.Result = false
		}

		rules = append(rules, rule)
	}

	return plants, rules
}

// The function isn't fast, the resulting data is.
func FastParseInput(data []string) ([]byte, map[string]byte) {
	stateStrings := strings.Split(data[0], " ")
	ruleStrings := data[2:]

	// Populate plant list
	plants := []byte(stateStrings[len(stateStrings)-1])

	// Create rules
	rules := make(map[string]byte)
	for _, ruleStr := range ruleStrings {
		ruleData := strings.Split(ruleStr, " ")
		rules[ruleData[0]] = []byte(ruleData[2])[0]
	}

	return plants, rules
}