14-06-2007, 15:17
|
|
|
|
חבר מתאריך: 05.08.06
הודעות: 2,860
|
|
אתגר מספר 4 - הצופן התנ"כי
כבר הרבה הרבה זמן לא היה אתגר, אז בשעה טובה הגיע הזמן לאתגר חדש
האתגר
בהשראת הצופן התנ"כי, יהיה עליכם לממש פונקציה אשר תמצא את המופע הראשון של מחרוזת מסויימת בתוך טקסט, כאשר המחרוזת משולבת בטקסט כך שכל אות מהמחרוזת מופיעה כל מספר קבוע של אותיות בטקסט(אין לספור רווחים, ירידות שורה, סימני פיסוק וכן הלאה).
דוגמא
אם נחפש "אניה" בטקסט "לאמה, נהרי ואהובה" אז בעצם המחרוזת משולבת בטקסט כך "לאמה, נהרי ואהובה" (סתם רצף מילים לא קשור לכלום..אני לא מספיק יצירתי כדי לחשוב על משפט מתאים). בין כל שתי אותיות אדומות יש 2 אותיות כחולות, והן מרכיבות את המילה "אניה" בסדר הנכון.
שימו לב שכשמחפשים מחרוזת עם רווח בתוכה - מתעלמים ממנו. כלומר חיפוש "אניה" זהה לחיפוש "אנ יה"
בונוס
אלו לא סעיפי חובה, אבל ביצוע שלהם יקנה נקודות נוספות:
- טיפול באותיות סופיות. כלומר חיפוש "ארץ" למשל משולבת בטקסט "אבא ערד ויצחק" בצורה הזו""אבא ערד ויצחק", כי 'צ' זהה ל'ץ' . (נקודה אחת נוספת)
- טיפול בניקוד. חיפוש "שַלום" יתאים גם ל-ש עם ניקוד אחר או בלי ניקוד בכלל. (שתי נקודות נוספות)
אופן ההגשה
את הפתרונות צריך להעלות לשרת של פרש, ולשלוח לי בהודעה פרטית קישור לקובץ. אני מבקש, כדי להקל על הבדיקה, לדאוג שהקובץ יכיל פונקציה בשם byblicSearch המקבלת שתי מחרוזות בתור פרמטרים (הפרמטר הראשון הוא הטקסט בו מחפשים, הפרמטר השני הוא מה שמחפשים), ומחזירה מערך של מערך מספרי של מספרי התווים בהם הופיעו האותיות.
למשל:
קוד PHP:
$a = "לאמה, נהרי ואהובה"; $b = "אניה"; byblicSearch($a,$b); /* יחזיר מערך כזה
array(1,6,9,13)
כי האות 'א' מופיעה בתו מספר 1 בטקסט (כי תוים מתחילים לספור מ-0) האות 'נ' מופיעה בתו מספר 6 בטקסט האות 'י' מופיעה בתו מספר 9 בטקסט והאות 'ה' מופיעה בתו מספר 13 בטקסט
*/
אופן הבדיקה
הבדיקות תעשנה על ידי, ולכן מן הסתם אני לא אשתתף באתגר.
אני אבדוק את הפונקציה על טקסט גדול יחסית, אותו אני אפרסם בהמשך. שימו לב: כל הבדיקות תעשנה עם מחרוזות בקידוד UTF-8, אל תשכחו להתחשב בכך בזמן כתיבת הקוד (שימו לב להערה בנידון בסעיף 'טיפים והמלצות').
הניקוד
ישנן 16 נקודות סה"כ:
6 נקודות על ביצוע המשימה
5 נקודות על יעילות (היעילות תימדד על פי זמן הריצה)
3 נקודות על בונוס (ראה סעיף בונוס)
2 נקודות על קריאות הקוד (בין היתר יש להוסיף תיעוד. לא לכתוב יותר מדי ולא לכתוב מעט מדי. מספיק תיעוד של תפקיד המשתנים ופונקציות העזר(אם יש) ותיעוד של חלקים ספציפיים בקוד שאינם אינטואיטיביים)
הפרסים
מקום ראשון: צל"ש לחודש!
מקום שני: צל"ש לשבועיים!
מקום שלישי: צל"ש לשבוע!
לוח זמנים
האתגר נפתח היום (14/6/07) ונסגר בעוד חודש (14/7/07)
יש לכם הרבה זמן, ואני מקווה שכולכם תשתתפו!
טיפים והצעות
אני ממליץ להשתמש בהרחבה mb_string, מכיוון שבקידוד UTF-8 פונקציות המחרוזת הרגילות לא תמיד תעבודנה כרגיל.
עבודה עם mb_string כמעט זהה לעבודה עם פונקציות המחרוזת הרגילות, ככה שגם אלו מכם שאינם מכירים את ההרחבה יוכלו להשתמש בה בקלות
אתם לא מרוצים מהפתרון שלכם? לא נורא! שלחו אותו בכל זאת. תמיד ייתכן שיש מישהו עם פתרון גרוע משלכם
כל שאלה או תהייה בנוגע לאתגר תכתב בעוגן הזה
בהצלחה לכולם!
|