-
Notifications
You must be signed in to change notification settings - Fork 0
/
day4.go
75 lines (62 loc) · 1.21 KB
/
day4.go
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
package main
import (
"bufio"
"fmt"
"log"
"os"
"sort"
"strings"
)
func main() {
file, err := os.Open("day4_input.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
// part1(scanner)
part2(scanner)
}
func part1(input *bufio.Scanner) {
var validCount = 0
for input.Scan() {
var invalidCount = 0
currentRow := strings.Fields(input.Text())
for index, val := range currentRow {
for _, val2 := range currentRow[index+1:] {
if val == val2 {
invalidCount++
}
}
}
if invalidCount == 0 {
validCount++
}
}
fmt.Println("Valid passphrases:", validCount)
}
func part2(input *bufio.Scanner) {
var validCount = 0
for input.Scan() {
var anagram = false
currentRow := strings.Fields(input.Text())
for index, val := range currentRow {
sortedString := sortString(val)
for _, val2 := range currentRow[index+1:] {
sortedString2 := sortString(val2)
if sortedString == sortedString2 {
anagram = true
}
}
}
if anagram == false {
validCount++
}
}
fmt.Println("Valid passphrases:", validCount)
}
func sortString(str string) string {
s := strings.Split(str, "")
sort.Strings(s)
return strings.Join(s, "")
}