Added 2017/04

This commit is contained in:
FrederikBaerentsen 2024-11-15 17:10:56 +01:00
parent 931dbde893
commit ca17d18358
3 changed files with 98 additions and 0 deletions

53
2017/04/4.md Normal file
View 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
View 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
View 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