Post

Day 2

Day 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main

import (
	"fmt"
	"io/ioutil"
	"strconv"
	"strings"
)

type Password struct {
	min    int    //
	max    int    //
	letter string //
	pass   string //
}

func (p Password) Check() bool {
	occurance := strings.Count(p.pass, p.letter)
	if p.min <= occurance && p.max >= occurance {
		return true
	} else {
		return false
	}

}

func (p Password) Part2() bool {
	left := strings.Count(string(p.pass[p.min-1]), p.letter)
	right := strings.Count(string(p.pass[p.max-1]), p.letter)

	if left != right {
		return true
	} else {
		return false

	}

}

func main() {
	content, err := ioutil.ReadFile("a2.txt")
	if err != nil {
		fmt.Println(err)
	}

	data := strings.Split(string(content), "\n")

	var r []string
	for _, str := range data {
		if str != "" {
			//t, _ := strconv.Atoi(str)
			r = append(r, str)
		}
	}
	//fmt.Println(r)

	var part1 int
	var part2 int

	for _, v := range r {
		myRange := strings.Split(v, " ")[0]
		min, _ := strconv.Atoi(strings.Split(myRange, "-")[0])
		max, _ := strconv.Atoi(strings.Split(myRange, "-")[1])
		letter := strings.Replace(strings.Split(v, " ")[1], ":", "", -1)
		pass := strings.Split(v, " ")[2]
		//fmt.Println("min: ", min, "max: ", max, "letter: ", letter, "password: ", pass)
		tmp := Password{
			min:    min,
			max:    max,
			letter: letter,
			pass:   pass,
		}
		if tmp.Check() {
			part1++
		}
		if tmp.Part2() {
			part2++
		}
	}

	fmt.Println("Part1:", part1)
	fmt.Println("Part2:", part2)

	//1 1 false
	//1 0 true
	//0 1 true
	//1 1 false

}

This post is licensed under CC BY 4.0 by the author.