הי,
@YOEL, @11115, @splintor, @Amirkr, @miryeh, @itamard
לא מאמין שכבר יום שלישי וזה הזמן לחידה השניה שלנו לשבוע. לא המון אנשים ענו על החידה הקודמת וקצת חבל כי היא היתה די קלה וזו הזדמנות טובה לקבל כוכב בפחות מעשר שורות. בכל מקרה כלום עדיין לא אבוד ואפשר עוד להוסיף גם לדיונים ישנים.
יום 6: הקצאות זיכרון
(אני משנה קצת את ניסוח החידה כדי שיהיה יותר קצר. כדאי לקרוא גם את הטקסט המקורי של אריק)
דמיינו מכונה שמורכבת ממספר עמודים ועל כל עמוד מספר חישוקים. בכל סיבוב התוכנית שלנו מוצאת את העמוד עם הכי הרבה חישוקים, מוציאה ממנו את כל החישוקים ומתחילה לחלק אותם בין העמודים האחרים. המטרה שלכם לזהות כמה סיבובים אפשר לעשות את זה לפני שנגיע חזרה לסידור חישוקים שכבר היינו בו.
נ.ב. 1 - העמודים מסודרים משמאל לימין וממוספרים בסדר עולה מ-0. אם יש יותר מעמוד אחד עם מספר מקסימלי של חישוקים נבחר את הראשון מביניהם.
נ.ב. 2 - אחרי שהוצאנו את החישוקים ובאים לסדר אותם מחדש פשוט מניחים חישוק אחד על כל עמוד לפי הסדר החל מהעמוד שאחרי זה שממנו הורדנו את החישוקים. ממשיכים במעגל עד שמסיימים לחלק מחדש את כל החישוקים.
לדוגמא נדמיין תרחיש עם 4 עמודים ובהם 0, 2, 7 ו-0 חישוקים בהתאמה כלומר משמאל לימין זה יראה כך:
*
*
*
*
*
* *
* *
_ _ _ _
עכשיו מתחילים לסדר מחדש את החישוקים אז ברור שבעמוד השלישי יש הכי הרבה חישוקים ונתחיל לרוקן אותו. ה-7 חישוקים שלו מתחלקים בין העמודים האחרים: קודם חישוק לרביעי, אחרי זה לראשון, לשני, לשלישי ועוד אחד לרביעי ועוד אחד לראשון וחישוק אחרון לעמוד השני. סך הכל יש לנו עכשיו תרחיש שנראה כך:
*
*
* * *
* * * *
_ _ _ _
הפעם העמוד עם הכי הרבה חישוקים הוא השני אז נחלק גם אותו מחדש ונקבל את הערכים:
3, 1, 2, 3
בסיבוב הבא יש תיקו בין העמוד הראשון לרביעי ולכן מפרקים את העמוד הראשון ומקבלים:
0, 2, 3, 4
נמשיך עוד שני סיבובים ונקבל:
1, 3, 4, 1
2, 4, 1, 2
סך הכל אחרי 5 סיבובים הגענו לסידור שכבר ראינו בעבר ולכן אפשר לעצור והתשובה היא 5.
המשימה שלכם: כתבו תוכנית שמחשבת את כל זה ומדפיסה כמה סיבובים זה לקח. בונוס מיוחד למי שיוסיפו UI יפה (אפשר כמובן גם בטקסט כמו שציירתי כאן). אחרי שסיימתם לכו לקרוא את החידה המקורית של אריק וגם קחו ממנו את הכוכב שלכם
https://adventofcode.com/2017/day/6