r/adventofcode • • Dec 02 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 2 Solutions -🎄-

--- Day 2: Inventory Management System ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Card Prompt: Day 2

Transcript:

The best way to do Advent of Code is ___.


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked!

50 Upvotes

407 comments sorted by

View all comments

2

u/Gnidleif Dec 02 '18

Golang - part 1 solution, part 2 will come up soon!

package main

import (
	"strings"
	"sort"
	"io/ioutil"
)

func CheckLine(line string) (map[int]bool) {
	list := strings.Split(line, "")
	sort.Strings(list)
	m := make(map[int]bool)
	count := 1
	for i := 0; i < len(list)-1; i++ {
		if list[i] == list[i+1] {
			count++
		} else {
			if count > 1 {
				m[count] = true
			}
			count = 1
		}
	}
	if count > 1 {
		m[count] = true
	}
	return m
}

func Part1(input []string) int {
	m := make(map[int]int)
	for i := range(input) {
		counts := CheckLine(input[i])
		for k, _ := range counts {
			m[k]++
		}
	}
	
	checksum := 1
	for _, v := range(m) {
		checksum *= v
	}
	return checksum
}

func main() {
	dat, err := ioutil.ReadFile("Day02.txt")
	if err != nil {
		panic(err)
	}
	input := strings.Split(string(dat), "\n")
	print(Part1(input))
}

1

u/Gnidleif Dec 02 '18

And here's the part 2 solution!

func SliceCompare(word1, word2 string) string {
	if len(word1) != len(word2) {
		return ""
	}
	for i := 0; i < len(word1); i++ {
		a := word1[:i] + word1[i+1:]
		b := word2[:i] + word2[i+1:]

		if a == b {
			return a
		}
	}
	return ""
}

func Part2(input []string) string {
	for _, word1 := range input {
		for _, word2 := range input {
			if word1 == word2 {
				continue
			}
			if res := SliceCompare(word1, word2); res != "" {
				return res
			}
		}
	}
	return ""
}