אתגר אויילר 45

Guy Yafe

New member
אתגר אויילר 45

בהמשך לפוסט מלמטה אני מציע אתגר: מציאת כל השלשות שעונות על אוילר 45 בין 0 לבין 10M, והדפסתם ל -stdout.
מטרת האתגר היא לא מציאת האלגוריתם הטוב ביותר אלא מימוש אלגוריתם ספציפי, בדיקת יכולת תכנותיות והשוואה בין שפות תכנות.

החוקים:
  1. האלגוריתם למציאת המספרים נתון. הוא לא אופטמימלי אבל יש בו הרבה בשר, והוא לוקח מספיק זמן כדי לבדוק ביצועים מצד אחד, אבל מהיר מספיק כדי שלא ימרוט לנו את העצבים.
  2. כל אחד רשאי לממש את האלגוריתם בשפת התכנות החביבה
  3. כל אחד רשאי לספק את סביבת הריצה והקומפילציה המלאה: מי שיעבוד עם JAVA רשאי לספק JRE משלו, סקריפט שיריץ את האפליקציה עם דגלים ככל העולה על רוחו וכו'. מי שממש ב-C או בC++ רשאי לספק makefile, gcc וכו' (זמן קומפילציה כמובן לא נחשב חלק מהאתגר).
  4. מותר ורצוי למקבל את העבודה.
  5. ניתן להשתמש בספריות חיצוניות ככל העולה על רוחכם, מלבד כמובן ספריות שפותרות את הבעיה במפורש.
  6. השורה הראשונה במתודת MAIN תהיה הדפסת זמן המערכת הנוכחי.
  7. לאחר סיום הריצה, סגירת thread-ים והדפסת המספרים, יש להדפיס את זמן המערכת הנוכחי.
  8. השוואת זמני הריצה תהיה על בבסיס הפרשי זמני המערכת שהודפסו.
  9. כל אחד יספק תכנית (או סקריפט שמריץ תכנית) שתקבל שני ארגומנטים. הראשון הוא המספר המקסימלי עד אליו יש לחפש מספרים והשני הוא מספר ה-threads המקסימלי. אין צורך לעשות בדיקת קלט.
  10. אין צורך בהדפסות נוספות.
  11. כדי לשמור על הגינות, כל אחד רשאי להריץ את כתניות של האחרים כדי להשוות את הריצה באותה סביבה ובאותו ברזל.
אני אפתח ספרייה ב - github עבור האתגר. כל מי שמעוניין להשתתף, ישלח לי את שם המשתמש שלו ואני אפתח לו אישור לדחיפות. כל אחד יצור לעצמו ספרייה תחת העץ הראשי ,ואליה הוא יכניס את כל מה ששייך לפתרון.

האלגוריתם:
  1. עבור על כל המספרים בין 0 ל-10M ולכל i הכנס למפה את השורה Triangle(i) -> i
  2. עבור על כל המספרים בין 0 ל-10M. ועבור כל j
    1. אם pentagonal(j) zz נמצא במפה הקודמת, הכנס את השורה pentagonal(j) -> j למפה שנייה.
  3. עבור על כל המספרים בין 0 ל-10M ועבור כל k:
    1. אם hexagonal(k) zz נמצא במפה השנייה, שמור את הרביעיה שהתקבלה (הכוונה ברביעיה לשלשת המספרים ולערך שלהם).
מוזמנים להביע דעה על ניסוח האתגר, ניסוח האלגוריתם וכו'.

גיא
 
למעלה