Solution to problem 7 part 1 in Python
This commit is contained in:
parent
5699b88ca5
commit
fd943e0d49
53
src/Year_2016/P7.py
Normal file
53
src/Year_2016/P7.py
Normal file
@ -0,0 +1,53 @@
|
||||
# --- Day 7: Internet Protocol Version 7 ---
|
||||
|
||||
# While snooping around the local network of EBHQ, you compile a list of IP
|
||||
# addresses (they're IPv7, of course; IPv6 is much too limited). You'd like to
|
||||
# figure out which IPs support TLS (transport-layer snooping).
|
||||
|
||||
# An IP supports TLS if it has an Autonomous Bridge Bypass Annotation, or ABBA.
|
||||
# An ABBA is any four-character sequence which consists of a pair of two
|
||||
# different characters followed by the reverse of that pair, such as xyyx or
|
||||
# abba. However, the IP also must not have an ABBA within any hypernet
|
||||
# sequences, which are contained by square brackets.
|
||||
|
||||
# For example:
|
||||
|
||||
# abba[mnop]qrst supports TLS (abba outside square brackets).
|
||||
# abcd[bddb]xyyx does not support TLS (bddb is within square brackets, even
|
||||
# though xyyx is outside square brackets).
|
||||
# aaaa[qwer]tyui does not support TLS (aaaa is invalid; the interior
|
||||
# characters must be different).
|
||||
# ioxxoj[asdfgh]zxcvbn supports TLS (oxxo is outside square brackets, even
|
||||
# though it's within a larger string).
|
||||
|
||||
# How many IPs in your puzzle input support TLS?
|
||||
|
||||
# from collections import deque
|
||||
# from itertools import islice #tee
|
||||
|
||||
import re
|
||||
|
||||
with open("files/P7.txt") as f:
|
||||
IPs = [
|
||||
re.split(r"\[([^\]]+)\]", line) for line in f.read().strip().split()
|
||||
]
|
||||
|
||||
|
||||
def abba(s: str) -> bool:
|
||||
for i0, i1, i2, i3 in zip(s, s[1:], s[2:], s[3:]):
|
||||
if i0 == i3 and i1 == i2 and i0 != i1:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def part_1() -> None:
|
||||
count = 0
|
||||
for ip in IPs:
|
||||
sn, hn = (" ".join(ip[::2]), " ".join(ip[1::2]))
|
||||
if abba(sn) and not (abba(hn)):
|
||||
count += 1
|
||||
print(count)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
part_1()
|
Loading…
Reference in New Issue
Block a user