mirror of
https://github.com/Noettore/AdventOfCode.git
synced 2025-10-15 03:36:39 +02:00
AoC 2020: day4
Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func checkDuplicates(s string) (bool, bool) {
|
||||
two := false
|
||||
three := false
|
||||
charsInString := map[string]int{}
|
||||
chars := strings.Split(s, "")
|
||||
for _, c := range chars {
|
||||
charsInString[c]++
|
||||
}
|
||||
for _, c := range charsInString {
|
||||
if c == 2 {
|
||||
two = true
|
||||
} else if c == 3 {
|
||||
three = true
|
||||
}
|
||||
}
|
||||
return two, three
|
||||
}
|
||||
|
||||
func compareStrings(s1, s2 string) (string, bool) {
|
||||
diffCount := 0
|
||||
diffString := ""
|
||||
for i := 0; i < len(s1) && diffCount < 2; i++ {
|
||||
if s1[i] == s2[i] {
|
||||
diffString += string(s1[i])
|
||||
} else {
|
||||
diffCount++
|
||||
}
|
||||
}
|
||||
if diffCount >= 2 {
|
||||
return "", false
|
||||
}
|
||||
return diffString, true
|
||||
}
|
||||
|
||||
func main() {
|
||||
twos := 0
|
||||
threes := 0
|
||||
var stringStore []string
|
||||
//We open the input file
|
||||
file, err := os.Open("./input")
|
||||
if err != nil {
|
||||
//If there is an error we print it in the stderr and exit(1)
|
||||
log.Fatal(err)
|
||||
}
|
||||
//We defer the closure of the file
|
||||
defer file.Close()
|
||||
|
||||
//We create a scanner to the file
|
||||
scan := bufio.NewScanner(file)
|
||||
|
||||
//We iterate throught the file line
|
||||
for scan.Scan() {
|
||||
currentString := scan.Text()
|
||||
stringStore = append(stringStore, currentString)
|
||||
two, three := checkDuplicates(currentString)
|
||||
if two {
|
||||
twos++
|
||||
}
|
||||
if three {
|
||||
threes++
|
||||
}
|
||||
}
|
||||
fmt.Printf("Part One: the checksum is %v\n", twos*threes)
|
||||
|
||||
for i, str := range stringStore {
|
||||
for j := i + 1; j < len(stringStore); j++ {
|
||||
ret, valid := compareStrings(str, stringStore[j])
|
||||
if valid {
|
||||
fmt.Printf("Part Two: the common letters are %v\n", ret)
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user