ישנם 5 כובעים :3 כובעים לבנים ו-2 כובעים שחורים. שלושה אנשים נעמדים בתור כאשר כל אחד רואה רק את מי שלפניו: האחרון מבניהם רואה את השניים שלפניו, האמצעי רואה רק את הראשון והראשון לא רואה אף אחד. כל השלושה עוצמים עיניים ועל ראשיהם שמים 3 כובעים. שואלים את האחרון האם הוא יודע מה הצבע של הכובע שעל ראשו כך שהשניים שלפניו שומעים. אחר כך שואלים את האמצעי האם הוא יודע מה הצבע שעל ראשו כך שהראשון שומע. בסוף שואלים את הראשון האם הוא יודע מה צבע הכובע שעל ראשו?
האם הראשון יכול תמיד לדעת מה הצבע שעל ראשו?
תשובות
הוסף תשובה
|
לצפיה בתשובות
דצמבר 2023
כן
אם האחרון אומר שכן - אז הוא רואה 2 שחורים (והראשון ידע שיש לו שחור)
אם האחרון אומר שלא - אז או שהוא רואה 2 לבנים או שהוא רואה אחד לבן אחד שחור.
אם האמצעי רואה לבן הוא יגיד שאינו יודע
אם האמצעי רואה שחור הוא יגיד שכן יודע
ינואר 2024
https://i.imgur.com/89YvT6D.png
פתרון מוסבר עם טבלת אמת ועץ החלטות
ריאיון ראשון בחברה, מספר שאלות בחומרה. השאלה הנל היתה השאלה האחרונה, מכשילה יחסית
שאלות מתוך הראיון
4. 100 גמדים עומדים בטור, כך שהראשון רואה את כל הבאים שאחריו וכן הלאה.(לא רואים את מי שנמצא מאחוריך) לכל גמד יש כובע- או שחור או לבן. הגמדים לא יודעים איזה צבע יש להם.
בכל פעם שואלים גמד באיזה צבע הכובע שלו- במידה והוא טועה הורגים אותו, אם הוא צודק נשאר בחיים.
הציעו אלגוריתם שיציל מס מקסימלי של גמדים, כאשר אך ורק לגמד הראשון בטור (שרואה את כל שאר ה99 גמדים) מותר להגיד פעם אחת או את המילה שחור או לבן בלבד.
תשובות
הוסף תשובה
|
לצפיה בתשובות
דצמבר 2023
נחליט מבעוד מועד על 'קודים'- המילה שחור תסמן "זוגי" והמילה לבן תסמן "אי זוגי".
נקבע שהרמז שהגמד הראשון (מס' 1) יגיד יהיה בהתאם לכובע של הגמד הבא אחריו-
אם לגמד מס' 2 יש כובע בצבע לבן, גמד מס' 1 יספור את כל הכובעים הלבנים של שאר הגמדים (=הגמד הראשון רואה את כל שאר הגמדים שאחריו). במידה ויש מספר זוגי של כובעים לבנים, הגמד הראשון יגיד "שחור". כך גמד מס' 2 יבין שמס הכובעים מהצבע של הכובע שלו הוא זוגי. לכן גמד מס' 2 יספור מאיזה צבע יש מס זוגי של כובעים החל ממנו והלאה (גמד 3 והלאה) וכך ידע לאיזה קבוצה הוא משתייך. כנ"ל הפוך למקרה של מספר אי זוגי של כובעים.
בתחילת הראיון סיפרו לי על המשרה ושאלו אותי כמה שאלות ואחר כך התחלנו בחלק בטכני.
שאלות מתוך הראיון
רכיב שמקבל שתי כניסות inc,dec ויציאת 3 ביטים, אם 0=inc=1,dec מוסיפים ליציאה שהייתה קודם באחד, אם 1=inc=0,dec מחסירים אחד מהיציאה, אחרת היציאה לא משתנה.
בהתחלה דיבר איתי ראש צוות ולאחר מכן שיחה מHRית שקבעה איתי את הראיון
שאלות מתוך הראיון
ישנם 4 אנשים שצריכים לעבור במערה לרשותם פנס שיכול לדלוק 12 דקות.. לכל אדם זמן בו הוא מסוגל לעבור את המערה איש א'-דקה אחת איש ב'-2 דקות איש ג'-4 דקות ואיש ד'- 5 דדקות.. יש במערה מקום רק לשני אנשים ובכל פעם צריך אחד מהם לשוב אחורה ולהחזיר את הפנס.. זמן ההליכה נקבע לפי האדם האיטי מהזוג.. באיזה סדר צריכים האנשים ללכת?
תשובות
הוסף תשובה
|
לצפיה בתשובות
ינואר 2024
איש א' ואיש ב' עוברים יחד לצד השני, 2 דקות, איש א' חוזר חזרה, דקה נוספת, עד כה 3 דקות.
איש ג' ואיש ד' עוברים יחד לצד השני, 5 דקות, עד כה 8 דקות.
איש ב' חוזר חזרה, 2 דקות, עד כה 10 דקות
איש א' ואיש ב' עוברים שוב יחד, 2 דקות, 12 דקות סך הכל
זה היה הראיון השני מתוך 3, הוא ראיון טכני לקח בערך שעה וחצי.
הסבירו כ-5 דקות על עצמם ועל החברה, ואז שאלו כמה שאלות.
הערה: לקחתי רק קורסים עד סמסטר שלישי של מסלול הנדסת תוכנה בטכניון, לא לקחתי קורסי רשתות ואין לי שום בסיס בתחום.
שאלות מתוך הראיון
שאלה 1.0: בהינתן ipים שונים, כל ip מוגדר מ4 מספרים כל מספר הוא בין 0 ו-255, בהינתן איי פי מקבלים port, הציעו מבנה נתונים העושה get ו-set:
void set_route(ip, port);
port get_route(ip);
example:
1.4.66.9 -> port 9
9.9.55.9 -> port 11
10.34.6.17 -> port 8
get_route(9.9.55.9) => 11
הערה: טבלת ערבול היא תשובה לא יעילה.
שאלה 1.2: בדיוק כמו הנ"ל אבל לכל איי-פי ייתכן מספר של פורטים, למשל:
example:
1.4.66.9 -> port 9, port 20, port 5, port 17, port 8
9.9.55.9 -> port 11, port 2
10.34.6.17 -> port 8, port 18, port 17, port 20
3.34.5.33 -> port 8
get_route(9.9.55.9) => 11 , 2
שאלה 1.3: נניח שיש לי 400 ערוצי טלוויזיה, ולכל ערוץ נתון שהוא משודר למספר פורטים בין 0 עד 8, ונתון כי הזיכרון הפנוי נתון ע"י מערך מסוג unit_32 בגודל 2048, הציעו פתרון לאותה שאלה.
שאלה 2: בהינתן ראוטר, איך בודקים אם הוא תקין?
בהינתן שני ראוטרים, אחד תקין והשני רוצים לבדוק אם הוא תקין, איך בודקים?
שאלה 3: ללא שימוש בפקודות תנאי, בהינתן שני מספרים הנתונים בייצוג עשירי, החזירו מספר השונה משניהם.
זה היה הראיון הראשון מתוך 3, הוא ראיון טכני לקח בערך שעה וחצי.
חצי השעה הראשונה הסבירו על החברה והמשרה, אחר כך ביקשו ממני להסביר על עצמי ועל פרוייקטים שעשיתי.
אחר כך שלחו קובץ משותף לכתוב בו קוד.
אפשר לכתוב כפסודן קוד או בשפה שנוחה לכםת הם ביקשו ממני לכתוב את הקוד בשפת C אבל אמרתי שכבר שנתיים לא השתמשתי בC ואמרו שאפשר גם לכתוב בCpp או פסודו קוד.
שאלות מתוך הראיון
1) בהינתן מספר בעל 64 ביתים הנתון בייצוג עשירי, מצאו את הבית הגדול ביותר שערכו 1.
2) בהינתן מספר בעל 8 ביתים הנתון בייצוג עשירי, מצאו את הבית הגדול ביותר שערכו 1 בסדר של 1. (אפשר להוסיף מידע עזר לפני הקריאה לפונקציה)
3) לכתוב פונקציה שמקבלת מטריצה של אפסים וכוכבים, וקודקודי מלבן ולספור כמה כוכבים יש במלבן.
4) הצעת שיפור לשאלה 3 אם נתון שאפשר להוסיף מידע למטריצה.
תשובות
הוסף תשובה
|
לצפיה בתשובות
דצמבר 2023
1) לעשות לולאה שבה מחלקים את המספר ב-2 כל פעם ומחזיקים משתנה שסופר מספר החלוקות שעשינו (שיפור להשתמש בshift).
2) עושים סוג של היסטוגרמה השומרת עבור כל מספר בין 0 עד 255 את הבית הכי גדול המכיל 1.
3) לעבור על איברי המלבן במטריצה ולספור, צריך רק לשים לב למקרי קצה כמו למשל: אחד הקודקודים אינו חוקי כי הוא קטן מאפס וכו).
4) נוסיף לכל תא במטריצה מידע נוסף שמכיל כמה כוכבים יש במלבן המתחיל מ (0,0) ומסתיים בקודקוד הזה, ואז בפונקציה המקורית משתמשים בהכלה והפרדה כדי למצוא כמה כוכבים יש במלבן המתחיל מ(x,y) ומסתיים ב(w,z).
5 דק' הצגה עצמית שלי,
10-15 דק' הסבר על החברה והתפקיד
ועוד שעה שאלות טכניות.
שאלות מתוך הראיון
היה לי לממש API של STACK אבל ששומרת את האיבר הקטן ביותר כל הזמן. ואפשר להשיג אותו בכל רגע נתון.
תשובות
הוסף תשובה
|
לצפיה בתשובות
ינואר 2024
הרעיון שלי הוא לממשל מחסנית (אם מבקשים גם בצורה ספציפית איך לממשל את המחסנית אז אפשר עם ליסט או כל מבנה נתונים נאחר עם פוינטר לאיבר האחרון שהוכנס פשוט) בצורה כזו שיש פוינטר לאיבר הקטן ביותר במחסנית בכל רגע נתון (מבצעים בדיקה בכל הכנסה למחסנית ומעדכנים את הפוינטר הזה בהתאם).
אם הכוונה ב'להשיג אותו' היא לשלוף אותו מהמחסנית החוצה (גם אם הוא באמצע המחסנית לצורך העניין), אפשר לייצר איזשהו משתנה בוליאני שיהיה חיובי אם"ם התבצעה קריאה לפונקציה ששולפת את האיבר הקטן ביותר במסחנית. ואז בכל הוצאה מהמחסנית, לבדוק אם מדובר באיבר הזה ואם המשתנה הבוליאני חיובי, אם כן נתעלם ממנו ונמשיך לאיבר הבא. ככה אפשר לממש את זה ב-O(1) במקום כמובן לייצר מחסנית חדשה לגמרי בלי אותו האיבר.