2019 Day 04 Done

This commit is contained in:
Brian Buller 2019-12-04 08:40:52 -06:00
parent a28a6fd163
commit 6068855fa1
3 changed files with 1842 additions and 0 deletions

60
2019/day04/main.go Normal file
View File

@ -0,0 +1,60 @@
package main
import (
"bytes"
"fmt"
"os"
)
func main() {
beg, end := []byte("165432"), []byte("707912")
if len(os.Args) == 3 {
beg, end = []byte(os.Args[1]), []byte(os.Args[2])
}
var count int
for {
if validate(beg) {
count++
}
if bytes.Equal(beg, end) {
break
}
beg = inc(beg)
}
fmt.Println(count)
}
func inc(num []byte) []byte {
if len(num) == 0 {
return []byte{'1'}
} else if num[len(num)-1] == '9' {
return append(inc(num[:len(num)-1]), '0')
} else {
num[len(num)-1]++
}
return num
}
func validate(num []byte) bool {
var dup bool
for k := range num {
if countSeq(num, k) == 2 {
dup = true
}
if len(num) > k+1 && num[k] > num[k+1] {
return false
}
}
return dup
}
func countSeq(num []byte, idx int) int {
ret := 1
if len(num) > idx+1 && num[idx+1] == num[idx] {
ret += countSeq(num[idx+1:], 0)
}
if idx >= 1 && num[idx-1] == num[idx] {
ret += countSeq(num[:idx], idx-1)
}
return ret
}

1717
2019/day04/output Normal file

File diff suppressed because it is too large Load Diff

65
2019/day04/problem Normal file
View File

@ -0,0 +1,65 @@
Advent of Code
--- Day 4: Secure Container ---
You arrive at the Venus fuel depot only to discover it's protected by a password. The Elves had written the
password on a sticky note, but someone threw it out.
However, they do remember a few key facts about the password:
 It is a six-digit number.
 The value is within the range given in your puzzle input.
 Two adjacent digits are the same (like 22 in 122345).
 Going from left to right, the digits never decrease; they only ever increase or stay the same (like 111123 or
135679).
Other than the range rule, the following are true:
 111111 meets these criteria (double 11, never decreases).
 223450 does not meet these criteria (decreasing pair of digits 50).
 123789 does not meet these criteria (no double).
How many different passwords within the range given in your puzzle input meet these criteria?
Your puzzle answer was 1716.
--- Part Two ---
An Elf just remembered one more important detail: the two adjacent matching digits are not part of a larger group
of matching digits.
Given this additional criterion, but still ignoring the range rule, the following are now true:
 112233 meets these criteria because the digits never decrease and all repeated digits are exactly two digits
long.
 123444 no longer meets the criteria (the repeated 44 is part of a larger group of 444).
 111122 meets the criteria (even though 1 is repeated more than twice, it still contains a double 22).
How many different passwords within the range given in your puzzle input meet all of the criteria?
Your puzzle answer was 1163.
Both parts of this puzzle are complete! They provide two gold stars: **
At this point, you should return to your Advent calendar and try another puzzle.
Your puzzle input was 165432-707912.
References
Visible links
. https://adventofcode.com/
. https://adventofcode.com/2019/about
. https://adventofcode.com/2019/events
. https://adventofcode.com/2019/settings
. https://adventofcode.com/2019/auth/logout
. Advent of Code Supporter
https://adventofcode.com/2019/support
. https://adventofcode.com/2019
. https://adventofcode.com/2019
. https://adventofcode.com/2019/support
. https://adventofcode.com/2019/sponsors
. https://adventofcode.com/2019/leaderboard
. https://adventofcode.com/2019/stats
. https://adventofcode.com/2019/sponsors
. https://adventofcode.com/2019