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