Advent of Code 2019 🤯 (יום 1)

תגיות: ,

איזה חריפים אתם! כל הכבוד :slight_smile:

פתרון שכתבתי עבור הפורום:

def get_inputs():
    with open('input.txt', 'r') as challenge_input:
        for line in challenge_input.readlines():
            yield int(line.strip())


def calculate_fuel(inputs):
    for fuel_input in inputs:
        yield fuel_input // 3 - 2


def calculate_total_fuel(fuel):
    if fuel <= 0:
        return 0
    fuel_needed = fuel // 3 - 2
    return fuel_needed + calculate_total_fuel(fuel_needed)


def get_total_fuels(inputs):
    for fuel in inputs:
        yield calculate_total_fuel(fuel)


print(sum(calculate_fuel(get_inputs())))
print(sum(get_total_fuels(get_inputs())))

פתרון שכתבתי לעצמי (מי שרוצה להרחיב יכול; על חלק גדול נדבר השבוע)

from typing import Generator

def get_input() -> Generator[str, None, None]:
    with open('input.txt', 'r') as challenge_input:
        yield from map(str.strip, challenge_input)


def calculate_total_fuel(fuel: int) -> int:
    if fuel <= 0:
        return 0
    fuel_needed = fuel // 3 - 2
    return fuel_needed + calculate_total_fuel(fuel_needed)


# Part 1
print(sum(fuel // 3 - 2 for fuel in map(int, get_input())))

# Part 2
print(sum(map(calculate_total_fuel, map(int, get_input()))))
7 לייקים

אהבתי שאתה ממש ממש מפריד הכל לפונקציות … יש לי עוד מה ללמוד בנושא :slight_smile:
תודה.

לייק 1

הזנתי אותו, וזה קדם אותי הלאה.
(יכול להיותה שלא כולנו קבלנו את אותם המספרים?)

מוזר… ראיתי בעוד פתרונות שפרסמו פה שיוצא כמו אצלי אז הנחתי שלא.
עריכה: מסתבר שאתה צודק! ערכתי גם למעלה :grimacing:

:sunglasses: אהבתי ממש את הרעיון.
זה הפתרון שלי לתרגיל הראשון (איך אתם מדביקים בפורום קוד? בלי צילום מסך)

 import math


def calc_fuel_requierd(mass):
    mass = int(mass)
    fuel_requierd = math.floor(mass / 3) - 2
    return fuel_requierd


def get_masses_input():
    with open('resources/masses.txt', 'r') as masses_file:
        masses_list = masses_file.readlines()
    return masses_list


def sum_all_fuel_requierd(masses_list):
    sum_fuel_requiered = 0
    for mass in masses_list:
        sum_fuel_requiered = sum_fuel_requiered + calc_fuel_requierd(mass)
    return sum_fuel_requiered

masses_list = get_masses_input()
print(sum_all_fuel_requierd(masses_list))

and here is part two: :sunglasses:

import math

def calc_fuel_requierd(mass):
    mass = int(mass)
    fuel_requierd = math.floor(mass / 3) - 2
    return fuel_requierd


def get_masses_input():
    with open('resources/masses.txt', 'r') as masses_file:
        masses_list = masses_file.readlines()
    return masses_list


def sum_all_fuel_requierd(mass):
    sum_fuel_requiered = 0
    for mass in masses_list:
        temp_mass = int(mass)
        while temp_mass > 0:
            temp_mass = calc_fuel_requierd(temp_mass)
            if temp_mass > 0:
                sum_fuel_requiered = sum_fuel_requiered + temp_mass
    return sum_fuel_requiered

masses_list = get_masses_input()
print(sum_all_fuel_requierd(masses_list))

לייק 1
4 לייקים
תשובה
import math


with open('resources/input.txt', 'r') as fh:
    lines = fh.readlines()


def get_fuel_by_mass_part_1(input_mass):
    return math.floor(input_mass / 3) - 2


def get_fuel_by_mass_part_2(input_mass):
    fuel = get_fuel_by_mass_part_1(input_mass)
    if fuel <= 0:
        return 0
    return fuel + get_fuel_by_mass_part_2(fuel)


total_fuel = 0
for mass in lines:
    total_fuel += get_fuel_by_mass_part_2(int(mass.strip()))
print(total_fuel)

תשובה חלק 1 = 3361299
תשובה חלק 2 = 5039071

לייק 1

כשניסיתי להריץ קיבלתי שגיאה ש Generator אינו מוגדר. מה צריך להוסיף כדי שזה ירוץ? (גוגל עד כה הביא לי רק דברים על גנרטורים שכבר למדנו)

הוספתי :slight_smile:

2 לייקים

גם לי נראה שכולנו לא מקבלים את אותם המספרים. נראה שלכל אחד יצא מספר אחר :stuck_out_tongue:

2 לייקים

בוודאות כל אחד מקבל מספרים אחרים :slight_smile: זה כדי שלא יהיו העתקות חחחח

זה הקוד שלי, יוזמה נהדרת!

# ADVENT OF CODE: DAY 1, Puzzle 1

import math


def get_mass_inputs():
    with open('input.txt', 'r') as file:
        mass_list = file.read().splitlines()
        for mass in mass_list:
            yield int(mass)
    

def calc_fuel_for_mass(mass):
    fuel = math.floor(mass / 3) - 2
    return fuel


def calc_total_fuel_for_mass(mass):
    fuel = math.floor(mass / 3) - 2
    if fuel <= 0:
        return 0
    return fuel + calc_total_fuel_for_mass(fuel)


def get_total_fuel():
    for mass in get_mass_inputs():
        yield calc_total_fuel_for_mass(mass)



total_fuel = sum(get_total_fuel())
print(f"Total fuel needed for all modules: {total_fuel}")
2 לייקים
חלק 1
def calculate_required_fuel(path):
    with open(path, "r") as f:
         module_masses = f.read().split()

    fuel = 0
    for module_mass in module_masses:
        fuel += int(module_mass) // 3 - 2
    return fuel

print(calculate_required_fuel("save-santa-day1-p1.txt"))
חלק 2
def calculate_required_fuel(path):
    with open(path, "r") as f:
         module_masses = f.read().split()

    fuel = 0
    for module_mass in module_masses:
        base_module_fuel = int(module_mass) // 3 - 2
        fuel += calculate_total_fuel(base_module_fuel)
    return fuel


def calculate_total_fuel(required_fuel):
    total_fuel = required_fuel
    result = required_fuel // 3 - 2
    while result > 0:
        total_fuel += result
        result = result // 3 - 2
    return total_fuel


print(calculate_required_fuel("save-santa-day1-p1.txt"))
4 לייקים

אני רואה שהרבה מכם משתמשים ב־math.floor אחרי חילוק – זכרו שיש את האופרטור // :slight_smile:

4 לייקים
1 - קוד

איך שבאמת רציתי לכתוב את 1

תמונה

2- קוד

וכך 2 היה נראה

5 לייקים
  • מרפרפת על פתרונות
  • רואה שחניך חוצפן קרא לפונקציה בשם גס
  • רואה שהשם של הפונקציה הבאה ממש טיפשי
  • רואה שלכל משתנה יש שם יותר דבילי מהשני

אה, זה גיא טריסקר.

7 לייקים

הוא, כבר היה צריך להרחיק אותו בשבוע הראשון.
#רקאומר

לייק 1

חס וחלילה! אם לוקחים לי אותו אני מתפטרת #שומריםעלגיא

5 לייקים

ים, יש טעות קלה בפתרון עבור הפורום :smirk:

לייק 1

הקוד שלי, היה כיף :slight_smile:

def fuel_for_module(mass):
    return int(mass) // 3 - 2


def get_mass_input_transform_to_fuel(mass_file):
    mass_to_fuel = []
    with open(mass_file, "r") as all_mass_file:
        all_mass_read = all_mass_file.readlines()
    for mass in all_mass_read:
        mass_to_fuel.append(fuel_for_module(mass))
    return mass_to_fuel


def get_mass_input_transform_to_fuel_part2(mass_file):
    mass_to_fuel = []
    with open(mass_file, "r") as all_mass_file:
        all_mass_read = all_mass_file.readlines()
    for mass in all_mass_read:
        fuel = 0
        while int(mass) >= 9:
            fuel += fuel_for_module(mass)
            mass = fuel_for_module(mass)
        mass_to_fuel.append(fuel)
    return mass_to_fuel

print(sum(get_mass_input_transform_to_fuel("resources//Advent of code 2019_day1.txt")))
print(sum(get_mass_input_transform_to_fuel_part2("resources//Advent of code 2019_day1.txt")))
2 לייקים