Yam
22 במאי, 2020, 12:42pm
איזה חריפים אתם! כל הכבוד
פתרון שכתבתי עבור הפורום:
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 לייקים
aviadamar
22 במאי, 2020, 12:45pm
אהבתי שאתה ממש ממש מפריד הכל לפונקציות … יש לי עוד מה ללמוד בנושא
תודה.
לייק 1
DissonantHarmony
22 במאי, 2020, 1:15pm
הזנתי אותו, וזה קדם אותי הלאה.
(יכול להיותה שלא כולנו קבלנו את אותם המספרים?)
ori81510
22 במאי, 2020, 1:16pm
מוזר… ראיתי בעוד פתרונות שפרסמו פה שיוצא כמו אצלי אז הנחתי שלא.
עריכה: מסתבר שאתה צודק! ערכתי גם למעלה
ruty3017
22 במאי, 2020, 1:37pm
אהבתי ממש את הרעיון.
זה הפתרון שלי לתרגיל הראשון (איך אתם מדביקים בפורום קוד? בלי צילום מסך)
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:
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
Yam
22 במאי, 2020, 1:56pm
היי,
בפורום ישנו פיצר שמאפשר להציג את הקוד שלכם בצורה ברורה כאילו היה כתוב
בjupyer או editor כזה או אחר.
מכיוון שראיתי שהמון לא משתמשים בזה אלא עושים העתק הדבק ישירות מהיופיטר [ אשר מציג קוד לא ברור ובלי הזחות ]
או עושים צילומי מסך שגם הם לא נוחים במיוחד:
הכנתי מדריכון קצר לאיך לעשות את זה נכון במערכת הפורום.
מקווה שזה יעזור לכם ולאחרים
[מדריך - איך להכניס קוד לפורום-01]
4 לייקים
ron.huberfeld
22 במאי, 2020, 2:01pm
תשובה
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
ori81510
22 במאי, 2020, 2:01pm
כשניסיתי להריץ קיבלתי שגיאה ש Generator אינו מוגדר. מה צריך להוסיף כדי שזה ירוץ? (גוגל עד כה הביא לי רק דברים על גנרטורים שכבר למדנו)
Yam
22 במאי, 2020, 2:02pm
הוספתי
2 לייקים
ruty3017
22 במאי, 2020, 2:06pm
גם לי נראה שכולנו לא מקבלים את אותם המספרים. נראה שלכל אחד יצא מספר אחר
2 לייקים
aviadamar
22 במאי, 2020, 2:24pm
בוודאות כל אחד מקבל מספרים אחרים זה כדי שלא יהיו העתקות חחחח
eliory09
22 במאי, 2020, 2:42pm
זה הקוד שלי, יוזמה נהדרת!
# 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 לייקים
Almog
22 במאי, 2020, 2:53pm
חלק 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 לייקים
Yam
22 במאי, 2020, 2:59pm
אני רואה שהרבה מכם משתמשים ב־math.floor
אחרי חילוק – זכרו שיש את האופרטור //
4 לייקים
orpazf
22 במאי, 2020, 3:15pm
1 - קוד
איך שבאמת רציתי לכתוב את 1
2- קוד
וכך 2 היה נראה
5 לייקים
Noga_o
22 במאי, 2020, 6:03pm
מרפרפת על פתרונות
רואה שחניך חוצפן קרא לפונקציה בשם גס
רואה שהשם של הפונקציה הבאה ממש טיפשי
רואה שלכל משתנה יש שם יותר דבילי מהשני
אה, זה גיא טריסקר.
7 לייקים
aviadamar
22 במאי, 2020, 6:13pm
הוא, כבר היה צריך להרחיק אותו בשבוע הראשון.
#רקאומר
לייק 1
orpazf
22 במאי, 2020, 6:23pm
חס וחלילה! אם לוקחים לי אותו אני מתפטרת #שומריםעלגיא
5 לייקים
gALz
22 במאי, 2020, 7:23pm
ים, יש טעות קלה בפתרון עבור הפורום
לייק 1
nirpn1
22 במאי, 2020, 7:25pm
הקוד שלי, היה כיף
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 לייקים