אהה…
אם ככה אז זה עוד יותר פשוט
השאלה באמת לא היתה מובנת !
חבל שסתם שרפתי זמן והסתבכתי
להלן הפתרון שלי ב Python
path_r = r"C:\Python\Advent_of_code\exercise_2.txt"
res = 0
with open(path_r,"r") as f_r:
arr = [line.split() for line in f_r]
for lst in arr:
lst = map(int,lst)
res += max(lst) - min(lst)
print res
מסתבר שהיתה טעות בשאלה ומשתמשים מתעניינים הרבה יותר בחלוקת ערכים מאשר בהפרשים. המשימה אם כן היא למצוא בכל שורה שני ערכים שאחד מתחלק בשני ללא שארית (מובטח שיש רק זוג אחד כזה בכל שורה), לחלק אותם ולסכום את התוצאות.
לדוגמא עבור הקלט:
5 9 2 8
9 4 7 3
3 8 6 5
בשורה הראשונה 8 מתחלק ב-2 ללא שארית והתוצאה 4.
בשורה השניה 9 מתחלק ב-3 ללא שארית והתוצאה 3.
בשורה השלישית 6 מתחלק ב-3 ללא שארית והתוצאה 2.
סה״כ סכום התוצאות 4+3+2 נותן 9 ולכן זוהי ספרת הביקורת שלנו.
עדכנו את התוכניות שכתבתם כך שיחשבו את ספרת הביקורת לפי השיטה החדשה.
res = 0
ARGF.each_line do |line|
values = line
.split
.map(&:to_i)
.combination(2)
.select {|i, j| i % j == 0 || j % i == 0}
.flatten
res += values.max / values.min
end
puts res
לא מצליח להבין למה התנאי :if num % lst[index] == 0 מתקיים תמיד…
path_r = r"C:\Python\Advent_of_code\exercise_2.txt"
res = 0
index = 0
with open(path_r,"r") as f_r:
arr = [line.split() for line in f_r]
for lst in arr:
lst = map(int,lst)
for num in lst:
while True:
index = (index + 1) % len(lst)
if num % lst[index] == 0:
res += num / lst[index]
break
print res
תראה את הפלט זה איזה מספר הוא חילק באיזה , והוסיף את המנה של החילוק לרס
לטבלה הזו
5 9 2 8
9 4 7 3
3 8 6 5
בשורה השנייה זה רס אחרי שהוספת לו את מנת החחילוק אתה רואה שהוא הוסיף
נגיד פה
(5, 5)
1
הוא חילק את חמש בחמש ואת המנה שהיא אחד הוסיף לרס
שורה אחכ
(9, 9)
2
הוא חילק את תשע בעצמו ואז המנה (אחד) נוספה לרס והוא כבר נהיה 2
עוד בעיה בקוד שלך שאחרי שהוא מוצא מתחלקים ללא שארית בשורה אחת הוא אמור ללכת לשורה הבאה