day 1
This commit is contained in:
		
							
								
								
									
										96
									
								
								src/day2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/day2.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | |||||||
|  | from typing import Optional | ||||||
|  |  | ||||||
|  | from cpl_core.console import Console | ||||||
|  | from cpl_core.utils import String | ||||||
|  | from cpl_query.enumerable import Enumerable | ||||||
|  | from cpl_query.extension import List | ||||||
|  | from cpl_core.pipes import * | ||||||
|  |  | ||||||
|  | from aoc.aoc import get_input | ||||||
|  | from day1 import aoc_input | ||||||
|  |  | ||||||
|  | # global vars | ||||||
|  | day = 2 | ||||||
|  | aoc_input = get_input(2022, day) | ||||||
|  | rps = {'A': 'R', 'B': 'P', 'C': 'S', 'X': 'R', 'Y': 'P', 'Z': 'S'} | ||||||
|  | res = {"X": 1, "Y": 2, "Z": 3} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_score(opponent, me) -> int: | ||||||
|  |     if opponent == 'R': | ||||||
|  |         if me == 'R': | ||||||
|  |             return 3 | ||||||
|  |         elif me == 'P': | ||||||
|  |             return 6 | ||||||
|  |         elif me == 'S': | ||||||
|  |             return 0 | ||||||
|  |     elif opponent == 'P': | ||||||
|  |         if me == 'R': | ||||||
|  |             return 0 | ||||||
|  |         elif me == 'P': | ||||||
|  |             return 3 | ||||||
|  |         elif me == 'S': | ||||||
|  |             return 6 | ||||||
|  |     elif opponent == 'S': | ||||||
|  |         if me == 'R': | ||||||
|  |             return 6 | ||||||
|  |         elif me == 'P': | ||||||
|  |             return 0 | ||||||
|  |         elif me == 'S': | ||||||
|  |             return 3 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_expected_score(opponent, self): | ||||||
|  |     if self == 'Y': | ||||||
|  |         to_me = {"A": "X", "B": "Y", "C": "Z"} | ||||||
|  |         return to_me[opponent] | ||||||
|  |     else: | ||||||
|  |         if opponent == 'A': | ||||||
|  |             if self == 'X': | ||||||
|  |                 return 'Z' | ||||||
|  |             elif self == 'Z': | ||||||
|  |                 return 'Y' | ||||||
|  |         elif opponent == 'B': | ||||||
|  |             if self == 'X': | ||||||
|  |                 return 'X' | ||||||
|  |             elif self == 'Z': | ||||||
|  |                 return 'Z' | ||||||
|  |         elif opponent == 'C': | ||||||
|  |             if self == 'X': | ||||||
|  |                 return 'Y' | ||||||
|  |             elif self == 'Z': | ||||||
|  |                 return 'X' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def part1(data) -> int: | ||||||
|  |     score = 0 | ||||||
|  |     for x in data: | ||||||
|  |         opponent, me = x.split() | ||||||
|  |  | ||||||
|  |         score += res[me] | ||||||
|  |         score += get_score(rps[opponent], rps[me]) | ||||||
|  |  | ||||||
|  |     return score | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def part2(data): | ||||||
|  |     score = 0 | ||||||
|  |     for x in data: | ||||||
|  |         opponent, me = x.split() | ||||||
|  |  | ||||||
|  |         e = get_expected_score(opponent, me) | ||||||
|  |         score += res[e] | ||||||
|  |         score += get_score(rps[opponent], rps[e]) | ||||||
|  |  | ||||||
|  |     return score | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     """ | ||||||
|  |         Das ist so fckng dreckige Lösung... | ||||||
|  |         Warum bin ich um 6:30 aufgestanden... | ||||||
|  |         Ich hab kein bock mehr. | ||||||
|  |     """ | ||||||
|  |     Console.write_line(f'Advent of code day {day}') | ||||||
|  |     Console.write_line(part1(aoc_input.splitlines()), part2(aoc_input.splitlines())) | ||||||
|  |     Console.write_line() | ||||||
		Reference in New Issue
	
	Block a user