2015 day 11.
This commit is contained in:
		
							
								
								
									
										50
									
								
								src/holt59/aoc/2015/day11.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/holt59/aoc/2015/day11.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| import itertools | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def is_valid(p: str) -> bool: | ||||
|     if any(c in "iol" for c in p): | ||||
|         return False | ||||
|  | ||||
|     if not any( | ||||
|         ord(a) + 1 == ord(b) and ord(b) + 1 == ord(c) | ||||
|         for a, b, c in zip(p, p[1:], p[2:]) | ||||
|     ): | ||||
|         return False | ||||
|  | ||||
|     if sum(len(list(g)) >= 2 for _, g in itertools.groupby(p)) < 2: | ||||
|         return False | ||||
|  | ||||
|     return True | ||||
|  | ||||
|  | ||||
| assert not is_valid("hijklmmn") | ||||
| assert not is_valid("abbceffg") | ||||
| assert not is_valid("abbcegjk") | ||||
| assert is_valid("abcdffaa") | ||||
| assert is_valid("ghjaabcc") | ||||
|  | ||||
|  | ||||
| def increment(p: str) -> str: | ||||
|     if p[-1] == "z": | ||||
|         return increment(p[:-1]) + "a" | ||||
|     elif p[-1] in "iol": | ||||
|         return p[:-1] + chr(ord(p[-1]) + 2) | ||||
|     else: | ||||
|         return p[:-1] + chr(ord(p[-1]) + 1) | ||||
|  | ||||
|  | ||||
| def find_next_password(p: str) -> str: | ||||
|     while not is_valid(p): | ||||
|         p = increment(p) | ||||
|     return p | ||||
|  | ||||
|  | ||||
| line = sys.stdin.read().strip() | ||||
|  | ||||
|  | ||||
| answer_1 = find_next_password(line) | ||||
| print(f"answer 1 is {answer_1}") | ||||
|  | ||||
| answer_2 = find_next_password(increment(answer_1)) | ||||
| print(f"answer 2 is {answer_2}") | ||||
							
								
								
									
										1
									
								
								src/holt59/aoc/inputs/holt59/2015/day11.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/holt59/aoc/inputs/holt59/2015/day11.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| cqjxjnds | ||||
		Reference in New Issue
	
	Block a user