Added 2017/04
This commit is contained in:
parent
931dbde893
commit
ca17d18358
53
2017/04/4.md
Normal file
53
2017/04/4.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
## \-\-- Day 4: High-Entropy Passphrases \-\--
|
||||||
|
|
||||||
|
A new system policy has been put in place that requires all accounts to
|
||||||
|
use a *passphrase* instead of simply a pass*word*. A passphrase consists
|
||||||
|
of a series of words (lowercase letters) separated by spaces.
|
||||||
|
|
||||||
|
To ensure security, a valid passphrase must contain no duplicate words.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `aa bb cc dd ee` is valid.
|
||||||
|
- `aa bb cc dd aa` is not valid - the word `aa` appears more than
|
||||||
|
once.
|
||||||
|
- `aa bb cc dd aaa` is valid - `aa` and `aaa` count as different
|
||||||
|
words.
|
||||||
|
|
||||||
|
The system\'s full passphrase list is available as your puzzle input.
|
||||||
|
*How many passphrases are valid?*
|
||||||
|
|
||||||
|
Your puzzle answer was `383`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
For added security, [yet another system
|
||||||
|
policy]{title="Because as everyone knows, the number of rules is proportional to the level of security."}
|
||||||
|
has been put in place. Now, a valid passphrase must contain no two words
|
||||||
|
that are anagrams of each other - that is, a passphrase is invalid if
|
||||||
|
any word\'s letters can be rearranged to form any other word in the
|
||||||
|
passphrase.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `abcde fghij` is a valid passphrase.
|
||||||
|
- `abcde xyz ecdab` is not valid - the letters from the third word can
|
||||||
|
be rearranged to form the first word.
|
||||||
|
- `a ab abc abd abf abj` is a valid passphrase, because *all* letters
|
||||||
|
need to be used when forming another word.
|
||||||
|
- `iiii oiii ooii oooi oooo` is valid.
|
||||||
|
- `oiii ioii iioi iiio` is not valid - any of these words can be
|
||||||
|
rearranged to form any other word.
|
||||||
|
|
||||||
|
Under this new system policy, *how many passphrases are valid?*
|
||||||
|
|
||||||
|
Your puzzle answer was `265`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2017) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
|
input](4/input).
|
40
2017/04/solution.py
Normal file
40
2017/04/solution.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys
|
||||||
|
from pprint import pprint
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
input_f = sys.argv[1]
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
line = line.rstrip().split()
|
||||||
|
u,c = np.unique(line,return_counts=True)
|
||||||
|
if u[c > 1].size == 0:
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
print(count)
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
line = line.rstrip().split()
|
||||||
|
for idx,x in enumerate(line):
|
||||||
|
line[idx] = ''.join(sorted(x))
|
||||||
|
u,c = np.unique(line,return_counts=True)
|
||||||
|
if u[c > 1].size == 0:
|
||||||
|
count += 1
|
||||||
|
print(count)
|
5
2017/04/test2
Normal file
5
2017/04/test2
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
abcde fghij
|
||||||
|
abcde xyz ecdab
|
||||||
|
a ab abc abd abf abj
|
||||||
|
iiii oiii ooii oooi oooo
|
||||||
|
oiii ioii iioi iiio
|
Loading…
Reference in New Issue
Block a user