2019 Day 04 Done
This commit is contained in:
parent
a28a6fd163
commit
6068855fa1
60
2019/day04/main.go
Normal file
60
2019/day04/main.go
Normal 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
1717
2019/day04/output
Normal file
File diff suppressed because it is too large
Load Diff
65
2019/day04/problem
Normal file
65
2019/day04/problem
Normal 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
|
Loading…
Reference in New Issue
Block a user