Advent of Code 12

לפי הניסוח של התרגיל, האינפוט הראשוני של התרגיל מתבסס על ימים קודמים:

After a brief scan, you calculate the position of each moon (your puzzle input)

אז לפתרון התרגיל בלי המספרים האמיתיים, להכניס סתם מספרים זה בסדר?

היי, זה לא של ימים קודמים :slight_smile:
אם תרשם אתה תקבל input לדוגמה ותוכל לנסות להזין את התשובה באתר כדי לוודא שהפתרון שלך נכון.

לייק 1

החלק הראשון בתרגיל הזה הוא ממש סבבה ולא מסובך או משהו.

החלק השני זו בעיקר בעיית התייעלות וידע במתמטיקה, יש הצעות לכך שהקוד לא ירוץ שנתיים?

אני קצת ספיילרתי לעצמי בכך שהלכתי לקבל טיפים איך לפתור את התרגיל השני וכרגע עסוק בלקרוא על Least Common Multiple

אין צורך להגיש את החלק השני, באמת לא הייתי ברור לגבי זה. מתנצל

לייק 1

מזל. וויתרתי אחרי שזה הגיע ל8 מליון ואז אמרתי שאני אתן לזה לרוץ בלילה :slight_smile:

(יוצא בריקודים ובמחולות :crazy_face: )

כיף לך! :heart:
אני ממרץ לא יוצא לרקוד! :cry:

לייק 1

אם ויתרו על החלק השני הזה , זו סיבה נהדרת …
חצי לילה ישבתי עליו אתמול ועדיין יש לי טעות.

ספוילר -

אם לא מגישים אז אני כותב כאן את האלגוריתם של חלק 2 ....

בגדול הx הy והz אינם תלויים זה בזה , זאת אומרת שx יחזור להיות 0 או הערך הראשוני שלו כל כך וכך פעמים , כך גם y כך גם z. יש לכל אחד מהם מחזוריות קבועה.
אז למשל כדי לבדוק האם המהירות מגיעה לערכה הראשוני , מוצאים כל כמה צעדים x,y,z חוזרים להיות 0. לכל אחד מהם בנפרד - מקבלים שלושה מספרים.
מוצאים את המכנה המשותף הקטן ביותר של שלושתם , וזה המספר שכאשר יעשו את כמות הצעדים הזו המהירות תחזור להיות 0 כמו בהתחלה.
אחר כך עושים דבר דומה עם הpositions - מוצאים כל כמה צעדים x בכל הכוכבים יחזור לערכו הראשוני , כך גם y כך גם z.
ואז מקבלים עוד שלושה מספרים , מוצאים מכנה משותף קטן ביותר לששת המספרים הללו , זו אמורה להיות התשובה.

ספויילר לספויילר

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

לייק 1

אני היחידי שלא מצליח להבין איך זה אמור לעבוד?

לייק 1

כל פרמטר בpos(x, y, z) בודקים בהשוואה לכל אחד מהפרמטרים בירחים האחרים. כאשר הערך גדול, מוסיפים אחד, אם קטן מפחיתים אחד ואם זהה לא משנים. את הסה"כ מוסיפים לאותו ערך בvel. בסוף סוכמים את הpos של כל ירח עם אותם פרמטרים ב-vel ומגיעים לpos בצעד הבא.

הדוגמה שם:

After 0 steps:
pos=<*x=-1*, y=  0, z= 2>, vel=<x= 0, y= 0, z= 0>
pos=<x= 2, y=-10, z=-7>, vel=<x= 0, y= 0, z= 0>
pos=<x= 4, y= -8, z= 8>, vel=<x= 0, y= 0, z= 0>
pos=<x= 3, y=  5, z=-1>, vel=<x= 0, y= 0, z= 0>

**נקודת הפתיחה של הערכים בvel לכולם היא 0.

שלב ראשון: נבדוק כל פרמטר בpos של כל ירח בהשוואה לכל אחד משאר הירחים.
נתחיל עם הירח הראשון והפרמטר הראשון x= -1.
הערך x של הירח השני הוא 2. מכיוון 2> 1-, ערך הX של הירח הראשון גדל ב1
הערך X של הירח השלישי הוא 4. מכיוון ש 4> 1-, ערך הX של הירח הראשון גדל ב-1
הערך X של הירח הרביעי הוא 3. מכיוון ש 3> 1-,ערך הX של הירח הראשון גדל ב-1
בסה"כ ערך הX של הירח הראשון גדל ב: 3 = 1+1+1, כלומר, עכשיו יתווסף לערך ה-x של הvel עוד 3.
תעבור לX של הירח הבא בהשוואה לכל השאר וכן הלאה…
אח"כ באופן דומה לערכים של y וz
צריך לבדוק את כל הערכים של כל אחד מהירחים ולהוסיף(או להפחית) בvel.

שלב שני: להוסיף את הערכים בvel לערכים בsop בהתאמה והתוצאה תהיה הצעד הבא:
ערך הX בsop של הירח הראשון התחיל ב 1-. כשנוסיף לו את הx=3 מהvel, נקבל x=2.

After 1 step:
pos=<*x= 2*, y=-1, z= 1>, vel=<*x= 3*, y=-1, z=-1>
pos=<x= 3, y=-7, z=-4>, vel=<x= 1, y= 3, z= 3>
pos=<x= 1, y=-7, z= 5>, vel=<x=-3, y= 1, z=-3>
pos=<x= 2, y= 2, z= 0>, vel=<x=-1, y=-3, z= 1>
4 לייקים

פתרתי לפי ההסבר שלך את הסעיף הראשון אני חייב להגיד לי אישית החלק הראשון היה מאוד קשה בשביל לחשוב על הקטע של המחזוריות ואיך היא הייתה אמורה להתממש וחלקתי את כל הבעיות למלא פונקציות קטנות…

לייק 1

החלק הראשון זה פשוט לכתוב תוכנה של איך זה יעבוד לפי מה שנכתב על ידי @efratush והחלק השני זה החישוב של האנרגיה לstep הסופי?
או שהחלק השני הוא החישוב של האנרגיה ל1000 steps? קצת לא הבנתי את החלוקה.
וכמה steps צריך שיהיה?

יש רק חלק אחד - והוא לכתוב קוד שאחרי שתריצי עליו את הנתונים ההתחלתיים שלך עם 1000 צעדים הוא יחזיר לך את התשובה הנכונה. החלק של איך לממש את זה זו כבר בחירה אמנותית שלך, אבל מן הסתם זה אמור להיות קוד בעיצוב שלך. :slight_smile:
תתייחסי אל זה ממש כמו תרגיל רגיל, רק שכאן יש לך גם אפשרות לבדוק את עצמך על כמה קלטים

לייק 1

אז צריך לעשות גם עם הenergy?
אז אם ככה לא הבנתי מה החלק השני שלא אמורים לעשות, מה שאת אומרת זה לא כל הדף שם?

צריך לעשות את כל הדף שמופיע לך, כולל חישוב האנרגיה. החלק השני זה מה שיופיע אחרי שתפתרי נכון את השאלה ותקבלי כוכב זהב - ואותו אין צורך לעשות

2 לייקים