Browse Source

Solved part1

Piotr Czajkowski 2 years ago
parent
commit
9e6a84f05f
2 changed files with 150 additions and 1 deletions
  1. 48 1
      14/code.go
  2. 102 0
      14/input

+ 48 - 1
14/code.go

@@ -40,11 +40,58 @@ func readInput(file string) (string, map[string]string) {
 	return template, input
 }
 
+func process(template string, input map[string]string) string {
+	var result []string
+	for i := 0; i < len(template)-1; i++ {
+		insert := input[template[i:i+2]]
+		result = append(result, string(template[i]))
+		result = append(result, insert)
+
+		if i == len(template)-2 {
+			result = append(result, string(template[i+1]))
+		}
+	}
+
+	return strings.Join(result, "")
+}
+
+func countElements(template string) (int, int) {
+	counts := make(map[rune]int)
+	for _, c := range template {
+		counts[c]++
+	}
+
+	smallest := counts['N']
+	largest := counts['N']
+	for _, c := range counts {
+		if c < smallest {
+			smallest = c
+		}
+
+		if c > largest {
+			largest = c
+		}
+	}
+
+	return smallest, largest
+}
+
+func part1(template string, input map[string]string) int {
+	result := template
+	for i := 0; i < 10; i++ {
+		result = process(result, input)
+	}
+
+	smallest, largest := countElements(result)
+
+	return largest - smallest
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("Please provide a file name as argument")
 	}
 
 	template, input := readInput(os.Args[1])
-	fmt.Println(template, input)
+	fmt.Println("Part1:", part1(template, input))
 }

+ 102 - 0
14/input

@@ -0,0 +1,102 @@
+ONHOOSCKBSVHBNKFKSBK
+
+HO -> B
+KB -> O
+PV -> B
+BV -> C
+HK -> N
+FK -> H
+NV -> C
+PF -> K
+FV -> B
+NH -> P
+CO -> N
+HV -> P
+OH -> H
+BC -> H
+SP -> C
+OK -> F
+KH -> N
+HB -> V
+FP -> N
+KP -> O
+FB -> O
+FH -> F
+CN -> K
+BP -> P
+SF -> O
+CK -> K
+KN -> O
+VK -> C
+HP -> N
+KK -> V
+KO -> C
+OO -> P
+BH -> B
+OC -> O
+HC -> V
+HS -> O
+SH -> V
+SO -> C
+FS -> N
+CH -> O
+PC -> O
+FC -> S
+VO -> H
+NS -> H
+PH -> C
+SS -> F
+BN -> B
+BF -> F
+NC -> F
+CS -> F
+NN -> O
+FF -> P
+OF -> H
+NF -> O
+SC -> F
+KC -> F
+CP -> H
+CF -> K
+BS -> S
+HN -> K
+CB -> P
+PB -> V
+VP -> C
+OS -> C
+FN -> B
+NB -> V
+BB -> C
+BK -> V
+VF -> V
+VC -> O
+NO -> K
+KF -> P
+FO -> C
+OB -> K
+ON -> S
+BO -> V
+KV -> H
+CC -> O
+HF -> N
+VS -> S
+PN -> P
+SK -> F
+PO -> V
+HH -> F
+VV -> N
+VH -> N
+SV -> S
+CV -> B
+KS -> K
+PS -> V
+OV -> S
+SB -> V
+NP -> K
+SN -> C
+NK -> O
+PK -> F
+VN -> P
+PP -> K
+VB -> C
+OP -> P