היה לי היום ראיון אישי בצ'ק פוינט
הראיון התחיל בכך שסיפרתי על פרויקט שעשיתי בעבודה עד לכניסה לארכיטקטורה, תכנון ועיצוב.
לאחר מכן הייתה חידה:
לפניך 8 כוסות מים, כל אחת מלאה באופן שונה.
צריך להגיע למצב שבו בכל הכוסות יש כמות זהה של מים כשאתה יכול להעביר מים מכוס אחת לשנייה, כלומר אתה יכול להשתמש בפונקציה הבאה בלבד:
public void equals(double[] arr, int i, int j) {
arr[i] = arr[j] = (arr[i] + arr[j]) / 2;
}
הצלחתי בסופו של דבר לפתור את החידה, אך לא להגיע לקוד עובד. הפתרון הוא רקורסיבי כמובן בעל יעילות של n*log n.
מכיוון שניתן להשוות רק שני מספרים הפתרון עובד רק על מספרים שהם חזקה של 2.
מישהו מכיר את החידה או יכול לצרף קוד עובד שפותר את הבעיה?
לפני 12 שנים
ע"י: 1_אורח_כללי
שברתי על זה עכשיו את הראש קצת (לא הסתכלי עדיין על הפתרון שהביא זה מעלי)
בכל מקרה בדקתי את הפתרון שלי וראיתי שהוא עובד, הנה הוא לפניכם: (ניתן להחליף בין הסדר של הקריאה הרקורסיבית והcomperation כדי לשנות בין preorder,inorder,postorder)
public static void evenWater(double arr, int start, int stop) {
if ((stop - start) >= 1) {
evenWater(arr, (((stop + start) / 2) + 1), stop);
evenWater(arr, start, ((stop + start) / 2));
}
// comperation
int tempStart = start, tempStop = stop;
for (int i = 1; i <= (((stop - start)/2) + 1); i++) {
equals(arr, tempStart, tempStop);
tempStart++;
tempStop--;
}
//end of comperation
}
כרמל, עם ניסיון בעולם הגיימינג, החליטה להגשים את החלום ולהיכנס לתחום העיצוב.
חתיכת אתגר.
לאחר תקופה של חיפוש עבודה עצמאי היא הבינה שזה רק בזבוז זמן והחליטה להשקיע בקריירה שלה - ומצאה אותנו.
לבדיקת התאמה
לפני 12 שנים
ע"י: 1_אורח_כללי
void Water (double arr[], int i, int j)
{
if (j<=i+1)
{
equals(arr,i,i+1);
}
else
{
int m = (j-i) /2;
Water (arr, i, i+m);
Water (arr, i+m+1, j);
int k = i+m + 1;
for (int l=i; l<=i+m; l++)
{
equals (arr, l, k);
k++;
}
}
}
לפני 12 שנים
ע"י: איחטיאנדר
אז מה הפתרון בעצם?
בונים סוג של עץ של השוואות מים?
כלומר, נניח במצב של 4 דליים.
משווים דלי 1 ו-2, מקבלים דליק שנקרא לו 12
משווים דלי 3 ו-4, מקבלים דליק שנקרא לו 34
משווים שלי 12 ו-34, מקבלים דלי 1234. זה בעצם הממוצע בכולם.
משווים את 1,2,3,4 ל1234?