package main

import (
	"bufio"
	"fmt"
	"os"
)

// Input ...
type Input struct {
	ruleMin  int
	ruleMax  int
	ruleRune rune
	password string
}

// Task1 ...
func Task1(input []Input) int {
	var result int

	for _, i := range input {
		var count int
		for _, r := range i.password {
			if r == i.ruleRune {
				count++
			}
		}
		if count >= i.ruleMin && count <= i.ruleMax {
			result++
		}
	}

	return result
}

// Task2 ...
func Task2(input []Input) int {
	var result int

	for _, i := range input {
		a := rune(i.password[i.ruleMin-1])
		b := rune(i.password[i.ruleMax-1])
		if (a == i.ruleRune) != (b == i.ruleRune) {
			result++
		}
	}

	return result
}

func main() {
	input := make([]Input, 0, 100)

	file, _ := os.Open("input.txt")
	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		var i Input
		fmt.Sscanf(
			scanner.Text(), "%d-%d %c: %s",
			&i.ruleMin, &i.ruleMax, &i.ruleRune, &i.password,
		)
		input = append(input, i)
	}
	file.Close()

	input1 := make([]Input, len(input))
	copy(input1, input)
	result := Task1(input1)
	fmt.Printf("Task 1: %d\n", result)

	input2 := make([]Input, len(input))
	copy(input2, input)
	result = Task2(input2)
	fmt.Printf("Task 2: %d\n", result)
}