Update ruff rules
This commit is contained in:
parent
738f888982
commit
0ae4fb1375
@ -31,11 +31,6 @@ force_grid_wrap = 0
|
|||||||
use_parentheses = true
|
use_parentheses = true
|
||||||
line_length = 79
|
line_length = 79
|
||||||
|
|
||||||
[tool.mypy]
|
|
||||||
pretty = true
|
|
||||||
show_traceback = true
|
|
||||||
allow_redefinition = true
|
|
||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
line-length = 79
|
line-length = 79
|
||||||
target-version = ['py38']
|
target-version = ['py38']
|
||||||
@ -59,3 +54,6 @@ exclude = '''
|
|||||||
# the root of the project
|
# the root of the project
|
||||||
)
|
)
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
[tool.ruff.lint]
|
||||||
|
ignore = ["E402"]
|
||||||
|
130
src/Year_2023/Day01.py
Normal file
130
src/Year_2023/Day01.py
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
# --- Day 1: Trebuchet?! ---
|
||||||
|
|
||||||
|
# Something is wrong with global snow production, and you've been selected to
|
||||||
|
# take a look. The Elves have even given you a map; on it, they've used stars to
|
||||||
|
# mark the top fifty locations that are likely to be having problems.
|
||||||
|
|
||||||
|
# You've been doing this long enough to know that to restore snow operations,
|
||||||
|
# you need to check all fifty stars by December 25th.
|
||||||
|
|
||||||
|
# Collect stars by solving puzzles. Two puzzles will be made available on each
|
||||||
|
# day in the Advent calendar; the second puzzle is unlocked when you complete
|
||||||
|
# the first. Each puzzle grants one star. Good luck!
|
||||||
|
|
||||||
|
# You try to ask why they can't just use a weather machine ("not powerful
|
||||||
|
# enough") and where they're even sending you ("the sky") and why your map looks
|
||||||
|
# mostly blank ("you sure ask a lot of questions") and hang on did you just say
|
||||||
|
# the sky ("of course, where do you think snow comes from") when you realize
|
||||||
|
# that the Elves are already loading you into a trebuchet ("please hold still,
|
||||||
|
# we need to strap you in").
|
||||||
|
|
||||||
|
# As they're making the final adjustments, they discover that their calibration
|
||||||
|
# document (your puzzle input) has been amended by a very young Elf who was
|
||||||
|
# apparently just excited to show off her art skills. Consequently, the Elves
|
||||||
|
# are having trouble reading the values on the document.
|
||||||
|
|
||||||
|
# The newly-improved calibration document consists of lines of text; each line
|
||||||
|
# originally contained a specific calibration value that the Elves now need to
|
||||||
|
# recover. On each line, the calibration value can be found by combining the
|
||||||
|
# first digit and the last digit (in that order) to form a single two-digit
|
||||||
|
# number.
|
||||||
|
|
||||||
|
# For example:
|
||||||
|
|
||||||
|
# 1abc2
|
||||||
|
# pqr3stu8vwx
|
||||||
|
# a1b2c3d4e5f
|
||||||
|
# treb7uchet
|
||||||
|
|
||||||
|
# In this example, the calibration values of these four lines are 12, 38, 15,
|
||||||
|
# and 77. Adding these together produces 142.
|
||||||
|
|
||||||
|
# Consider your entire calibration document. What is the sum of all of the
|
||||||
|
# calibration values?
|
||||||
|
|
||||||
|
with open("files/P1.txt") as f:
|
||||||
|
calibration = [line for line in f.read().strip().split()]
|
||||||
|
|
||||||
|
|
||||||
|
def part_1():
|
||||||
|
total = 0
|
||||||
|
for value in calibration:
|
||||||
|
digits = [c for c in value if c.isdigit()]
|
||||||
|
if digits:
|
||||||
|
total += int(digits[0] + digits[-1])
|
||||||
|
print(f"The sum of all calibration values is {total}")
|
||||||
|
|
||||||
|
|
||||||
|
# --- Part Two ---
|
||||||
|
|
||||||
|
# Your calculation isn't quite right. It looks like some of the digits are
|
||||||
|
# actually spelled out with letters: one, two, three, four, five, six, seven,
|
||||||
|
# eight, and nine also count as valid "digits".
|
||||||
|
|
||||||
|
# Equipped with this new information, you now need to find the real first and
|
||||||
|
# last digit on each line. For example:
|
||||||
|
|
||||||
|
# two1nine
|
||||||
|
# eightwothree
|
||||||
|
# abcone2threexyz
|
||||||
|
# xtwone3four
|
||||||
|
# 4nineeightseven2
|
||||||
|
# zoneight234
|
||||||
|
# 7pqrstsixteen
|
||||||
|
|
||||||
|
# In this example, the calibration values are 29, 83, 13, 24, 42, 14, and 76.
|
||||||
|
# Adding these together produces 281.
|
||||||
|
|
||||||
|
# What is the sum of all of the calibration values?
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
words_to_numbers = {
|
||||||
|
"one": "1",
|
||||||
|
"two": "2",
|
||||||
|
"three": "3",
|
||||||
|
"four": "4",
|
||||||
|
"five": "5",
|
||||||
|
"six": "6",
|
||||||
|
"seven": "7",
|
||||||
|
"eight": "8",
|
||||||
|
"nine": "9",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def is_letter(char):
|
||||||
|
return "a" <= char <= "z"
|
||||||
|
|
||||||
|
|
||||||
|
def extraction(value):
|
||||||
|
word = ""
|
||||||
|
digits = []
|
||||||
|
for c in value:
|
||||||
|
if c.isdigit():
|
||||||
|
digits.append(c)
|
||||||
|
word = ""
|
||||||
|
elif is_letter(c):
|
||||||
|
word += c
|
||||||
|
for w in words_to_numbers:
|
||||||
|
if w in word:
|
||||||
|
m = re.search(w, word)
|
||||||
|
if m:
|
||||||
|
val = m.group(0)
|
||||||
|
digits.append(words_to_numbers[str(val)])
|
||||||
|
# keep last letter!
|
||||||
|
word = c
|
||||||
|
break
|
||||||
|
return digits
|
||||||
|
|
||||||
|
|
||||||
|
def part_2():
|
||||||
|
total = 0
|
||||||
|
for value in calibration:
|
||||||
|
digits = extraction(value)
|
||||||
|
total += int(digits[0] + digits[-1])
|
||||||
|
print(f"The sum of all calibration values is {total}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
part_1()
|
||||||
|
part_2()
|
Loading…
Reference in New Issue
Block a user