תמונת שער.png


תמונת מקור - Leonardo AI

אפתח את המאמר במילי דאורייתא:

בפרשת השבוע שנקרא בשבת קודש "כי תשא" נאמר הפסוק "ונתנו איש כופר נפשו..."(שמות ל.י"ב)

וכותב על כך בעל הטורים בפירושו על התורה:

"ונתנו. אם תקראנו למפרע יהיה גם כן ונתנו.
לומר לך כל מה שאדם נותן לצדקה יחזור אליו ולא יחסר לו בשביל זה כלום".

ולהבדיל בין קודש לחול…על המונח/מושג פָּלִינְדְרוֹם כבר שמעתם?

מהו פלינדרום?

ובכן. זהו המונח למילה/משפט/מספר/רצף סמלים אחר שקריאתו מימין לשמאל ומשמאל לימין זהה.

מקור המונח הוא מיוונית: πάλιν (פַּלִין - "שוב", "הפוך"), δρóμος (דרוֹמוֹס - "כיוון").

חשוב לזכור כי בפלינדרום מילולי נהוג בהיבט הפלינדרומי להתעלם מרווחים/סימני ניקוד/סימני פיסוק/הבדלים בין אותיות קטנות לגדולות בשפות הרלוונטיות, ובין אותיות רגילות לסופיות בשפות הרלוונטיות. בהמשך עוד אשוב לנקודה זו.

אני אתן מספר דוגמאות לפלינדרומים:

במילים:
אבא/ישי/דוד/מילים.

במספרים:
11/999/606 (מספר חד-ספרתי הוא פלינדרום טריוויאלי…)

במשפטים:
ילד נתן דלי/מום תחת מום,

בתאריכים:
29.11.1192 או 12.02.2021

אגב התאריך 02.02.2020 נחשב כיום פלינדרומי בינלאומי,(גם בצפון אמריקה - שם נוהגים לכתוב את מספר החודש לפני היום. וגם במדינות אחרות שנוהגים שם לכתוב את מספר השנה לפני החודש והיום)

באומנות:
הפלינדרום מהווה כלי ליצירות ספרותיות רבות מחכמי ישראל (החל "מתור הזהב" בספרד על ידי רבי אברהם אבן עזרא ורבי יהודה אלחריזי ועוד)בעולם ובישראל, וכן ביצירות מוזיקליות שונות שנכתבו…

בתחום הביולוגיה המולקולרית/גנטיקה:
הפלינדרום מהווה כלי למחקר ופיתוח (הנדסה גנטית וכו…)

אתן דוגמא קטנה לכך:
רצף (חד גדילי) בשרשרת מולקולת הd.n.a(שמורכבת מרצפים של 4 "בסיסים חנקניים",אדנין -A, גואנין-G, תימין-T, ציטוזין-C)נקרא פלינדרום אם הוא שווה לרצף המשלים שלו בהיפוך.
לדוגמה הרצף ACCTAGGT הוא פלינדרום כי "המשלים" שלו הוא TGGATCCA והוא שווה להיפוך שלו.

אם נתבונן, חיי האדם בכללותם הם "סוג של" פלינדרום - "אדם, יסודו מעפר וסופו לעפר…"
(מתוך פיוט "ונתנה תוקף").

אשרי האיש שתהא יציאתו מן העולם ללא חטא כביאתו אל העולם…!

כעת בואו ותראו איך הנ"ל קשור לאקסל ולעולמן של הפונקציות…

תראו, אם נרצה (מכל סיבה שהיא…) לבחון ולבדוק באופן אוטומטי האם טקסט מסוים (מילה/משפט/רצף מספרים/תאריך) הוא פלינדרומי או לא?(ולא משנה מה אורכו, יהיה ככל שיהיה…)

אז למרבה ההפתעה זה ניתן בהחלט בעזרת האקסל/שיטס!


כן…!

לפניכם צילום מסך מתוך הגיליון המצורף בלינק להלן.

תמונה גיליון בדיקה.png


בגיליון המצורף בתא B5 יש לכתוב את הטקסט לבדיקה.
התוצאה מתקבלת בתא B8 כהחזר של true או false.

זהו מבנה הפונקציות בתא B8:

קוד:
=IF(LEN(B7)>2,ARRAYFORMULA(SUM(--(MID(B7,SEQUENCE(LEN(B7)),1)=MID(B7,1+LEN(B7)-SEQUENCE(LEN(B7)),1)))=LEN(B7)),"true")

אבל רגע…איך זה עובד בדיוק?

מהן הפונקציות שאחראיות לכל הקסם הזה?


בגיליון המצורף (בלינק להלן) ערכתי גיליון נוסף בו "פירקתי" את הנוסחה הסופית לשלבי ביניים - שלב אחר שלב.

תראו את הצילום מסך מתוך הגיליון.

תמונה גיליון הסבר.png


ואני אסביר בקצרה על השלבים:

ראשית אומר כי ישנם מספר דרכים עבור חישוב ואימות פלינדרומי. חלקם מוגבלים לס"ך תווים, חלקם בעזרת סקריפט (vba) וחלקם בדרכים שונות.

אני השתמשתי בטכניקה מסוימת שאינה מוגבלת לס"ך תווים וללא מאקרו.
ועתה להסבר על השלבים:

שלב 1:

פונקציית mid מהווה כאן כלי חישובי מרכזי לשליפת נתונים ותווים.
משפטים פלינדרומים מטבעם מכילים רווחים ועלולים להכיל תווים שונים כמו סלש / (בטקסט תאריך למשל).
לשם כך אנו צריכים להסיר את כל "המפריעים" הללו.

לגבי רווחים-פונקציית trim איננה הכתובת הפעם…כי פונקציה זו מבחינה בין רווחים "נורמלים" לכאלו שמיותרים.(כתבתי על כך באריכות במאמר כאן)

כאן אנו צריכים להסיר באופן טוטאלי את הרווחים. ולכן נעשה פה שימוש בפונקציית substitute.

הפונקציה כאן היא "מקוננת". ומסירה גם כל תו של סלש /.

הזכרתי בפתיחת דבריי כי בכתיבת פלינדרום נהוג לא לייחס חשיבות בין אות גדולה לקטנה ובין אות רגילה לסופית(בעברית).

שפת הקידוד באקסל מטבעה גם איננה מבחינה בין שינויים שכאלו בכל הקשור "להשוואה לוגית" בין ערכים.ולכן אין צורך בפונקציית עזר לגבי נושא זה.

שלב 2:

פונקציית sequence (במאמר כאן כתבתי אודותיה בהרחבה) מבצעת "פריסה" למספר תאים כלפי מטה כעין "הרצה" ברצף של הטקסט מתחילתו לסופו (זו ברירת המחדל של הפונקציה).
מי "שנוקבת" את ס"ך התאים שיש לפרוס כלפי מטה היא - פונקציית len.

וכל זה נכנס בארגומנט השני של פונקציית mid, כאשר ה 1 בארגומנט השלישי אומר לפונקציה שיש לשלוף בכל פעם תו אחד.

(בשלב 4 תבינו יותר שהשליפה הזו אחד כנגד אחד היא בעצם לצורך השוואה בין 2 ההחזרים בכל שורה.)

שלב 3:

הטכניקה די דומה לשלב 2 אלא שכאן נוסף סימן חיסור. וזה גורם לכל מערך התאים שהוחזרו להיות מהסוף להתחלה "ברוורס".

שלב 4:

הוא למעשה שילוב של שלב 2 ושלב 3.כאשר ביניהם מוצב סימון שווה=

מה אנו עושים פה בעצם?

אז דמיינו 2 מבנים רבי קומות זהים בגודלם ובמספר קומות, שהם ניצבים זה מול זה.

גם כאן ניצבים "כביכול" ההחזרים של שלב 2 ושלב 3 זה מול זה.וההשוואה נעשה קומה ראשונה של שלב 2 מול קומה ראשונה של שלב 3 וכן הלאה.
על כל "קומה" מוחזרת לאחר בדיקה התוצאה true או false.

שלב 5:

כעת הגיע הזמן לסכום כמה פעמים הוחזר true בכל התוצאות משלב 4.
רגע…יש פתרון והוא לעטוף את כל הטוב הזה בפונקציית sum.

פשוט…לא?

כאן, יש צורך להיזכר במה שכתבתי באריכות במאמר בלינק כאן.
ואכן, גם במקרה הזה פונקציית sum "לא יודעת" לבד להמיר את הערכים הלוגים (של true או false) לערך מספרי…

ולשם כך נשתמש בטכניקה שהוזכרה בלינק לעיל על ידי הוספת פעולת חיסור כפול (Double unary) שימו לב זה אכן מופיע כאן…

השלב הסופי:

הוא לערוך השוואה בין הסכום שהתקבל משלב 5 לבין הסכום שהתקבל בספירה רגילה של התווים בתא המקור.
השוואה זו מבוצעת על ידי הוספת סימון = עם הפנייה לבדיקה לתוצאות פונקציית len פשוטה.

נקודה חשובה: במקרה בו הטקסט הוא 2 תוים (שאינם זהים) יוחזר false באופן אוטומט.
ולכן נוספה כאן פונקציית if עם תנאי שכל החישוב הנ"ל יהיה בתנאי שמספר התווים בתא המקור יהיה גדול מ 2.

ועוד נקודה חשובה: הגיליון המצורף נערך על ידי בגוגל שיטס,בשיטס קיים הכרח לעטוף את החישובים הנ"ל בפונקציות עם פונקציית arrayformula.(מבלי להיכנס כעת לסיבות וכו'…)
מה שזה אומר.שאם הקובץ יפתח באקסל תתקבל שגיאת name. ולתיקון -יש למחוק את שם הפונקצייה עם הסוגריים שבה.


נ.ב השתדלתי כדרכי- לפרט ולפשט את המהלך והלוגיקה שבפונקציות גם עבור מי שטרם מכיר לאשורן את הפונקציות שהוזכרו .
אני ממליץ ללמוד עליהן ועל תפקידן וסדרי הארגומנטים שבהן ולאחר מכן לקרוא שוב את שלבי ההסבר לעיל.

נהניתם מהקסם/מהלוגיקה באקסל?

מצוין…!

אבל המסר המרכזי לחיינו ותפקידינו בעולם הזה הוא דווקא בדברי "בעל הטורים" שפתחתי בו את דבריי.

בספרות הכללית ניתן למצוא מחרוזות רבות של פלינדרומים שהרבה מהמילים והמשפטים שנכתבו שם הם חסרי משמעות /קשר נסיבתי.

אך להבדיל אלף הבדלות. בתורתינו הקדושה שכולה נמסרה למשה בסיני מפי הגבורה, כל מילה/תו ותג מדויקים ואמת לאמיתה.

המילה "ונתנו" שנכתבה בפרשת השבוע היא לא סתם "פלינדרום" ושעשוע לשון ח"ו אלא הוראה לחיינו שעה שעה!תורתינו היא תורת חיים!

עולם חסד יבנה. ויותר ממה שבעל הבית עושה עם העני, העני עושה עם בעל הבית… כמו שאמרו רבותינו ז"ל.(רות רבה ה.ט)

אתר @prog בכללותו ובפרטיו הוא פלטפורמה והזדמנות עבור כל אחד מאיתנו לנתינה, לחסד ולעזרה הדדית.


וזו אכן הזדמנות להודות, להוקיר ולהכיר טובה לאכסנייה של חסד זו ולמנהל האתר @הכלבויניק היקר.

יהי רצון שנזכה תמיד לתת ולהרבות בחסד, אמן.

אחתום בפלינדרום ידוע מרבי אברהם אבן עזרא ששאל(כעין משל "בדיאלוג" ספרותי...) את הקב"ה בזה הלשון:

"אָבִי, אֵל חַי שִׁמְךָ, לָמָּה מֶלֶךְ מָשִׁיחַ לֹא יָבֹא"

ותשובתו:

"דְּעוּ מֵאֲבִיכֶם כִּי לֹא בּוֹשׁ אֱבוֹש, שׁוּב אָשׁוּב אֲלֵיכֶם כִּי בָא מוֹעֵד"

(השאלה והתשובה נקראים מתחילתם לסופם וכן ההיפך)

לינק לגיליון שיטס הכולל בדיקה למחרוזת טקסט האם היא פלינדרומית (וכל הנאמר לעיל) - מצורף כאן.