Advent of Code 2020, Python, Tag 9

preview_player
Показать описание
Lösung der aktuellen Aufgabenstellung in Python.

Рекомендации по теме
Комментарии
Автор

Ich habe Part 1 gelesen und sofort an Combinations gedacht. Hattest du, glaube ich, auch mal für nen Kartenspiel benutzt. Sind so zwar viele überflüssige Berechnungen mit drin, aber sieht schön aus. 😁

import itertools, time


def puzzle_input():
with open("input.txt") as f:
data = [int(line.replace("\n", "")) for line in f]
return data


puzzle = puzzle_input()


def solution_1(data):
width = 25
for x in range(width, len(data)):
sums = list(map(sum, - width:x], 2))))
if data[x] not in sums:
return data[x]


def solution_2(data):
for x in range(1, data.index(sum_to_find)):
for y in range(0, data.index(sum_to_find)):
if sum(data[y:y + x]) == sum_to_find:
solution = sorted(data[y:y + x])
return solution[0] + solution[-1]


start = time.perf_counter()
sum_to_find = solution_1(puzzle)
print(sum_to_find, time.perf_counter() - start)

start = time.perf_counter()
print(solution_2(puzzle), time.perf_counter() - start)

1038347917
137394018

masterbe
Автор

Übrigens habe ich hier eine einfache Möglichkeit gefunden, um Code direkt auf einer Webseite bereitzustellen (keine Anmeldung, keine Registrierung, keine Einschränkung).


Hier das Beispiel mit meinem Code

Gravitar
Автор

Vielleicht etwas spät, aber hier noch eine 2-zeilige rekursive Lösung für Tag 3:
fun = lambda x, y, cnt, f: cnt if y>= (len([l.strip() for l in open("as.txt")])) else (fun((x+3)%(len([l.strip() for l in open("as.txt")][0])), y+1, cnt+1, [l.strip() for l in open("as.txt")]) if [l.strip() for l in open("as.txt")][y][x] == "#" else fun((x+3)%(len([l.strip() for l in open("as.txt")][0])), y+1, cnt, [l.strip() for l in open("as.txt")]))
print(fun(0, 0, 0, [l.strip() for l in open("as.txt")]))

oder, etwas verständlicher, die 3-zeilige Version:
f = [l.strip() for l in open("as.txt")]
fun = lambda x, y, cnt, f: cnt if y>= (len(f)) else (fun((x+3)%(len(f[0])), y+1, cnt+1, f) if f[y][x] == "#" else fun((x+3)%(len(f[0])), y+1, cnt, f))
print(fun(0, 0, 0, f))

emilioferraro
Автор

Part 2 jetzt noch 10 x schneller. Lösung in 0, 183 Millisec.

Gravitar