Hacking Scrabble (חלק ראשון)


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

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

תמונה רמיקס ממקור על ידיקייטלין ריגן.

הבעיה

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

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

אא אב אד אע אג אה איי אל אם אן אר כמו בעוו אקס אי בה בי בו ע"י צ' דה די די דו עאה עד אי עף אה אל עם אנ א אס עט אקס פא פי פי גי גו גו הא היי הי הא אייד אם ב- io זה Ja jo ka ki ko ky la lo lo ma me mi mm mo mo my na ne no nu ny od oe of oh oi om on oo op או os ou oo ox oy pa pe pi po qi re sh si so st ta te ti to ug uh um un up ur us ut we wo xi xu ya ye yo yu za zo

(מָקוֹר:SOWPODS, משמש למשחקי טורנירים בריטיים)

זה 124 מילים! יותר ממאה צמדי אותיות שרירותיים, ללא דפוס חיבור ואת רובם אני לא מזהה. עדיף להשאיר את זה לזיכרון למתעניינים שיכולים לזכור בשמחה את סדר חפיסת הקלפים המעורבבת.

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

פתאום זה לא כל כך מפחיד, נכון? לנתונים יש מבנה מסוים. כֹּלקידומתיש מספר אפשרייםסיומות.

  • בניתן לעקוב אחריוא,ה,אֲנִי,o, אוy.

  • אֲבָלגניתן רק אחריוח.

זה עדיין הרבה מה להתחייב לזיכרון. יוֹתֵר מִדַי:אוoלכל אחד יש שש עשרה סיומות אפשריות!

שיטת המנמונית

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

אז בואו נתחיל עם כל המילים של שתי אותיות שמתחילות בא. אם אני יכול לשנן את קבוצת האותיות 'abdeghilmnrstwxyאז אני יכול לאמת נפשית כל מילה שמתחילה באעל ידי שואל, 'האםסִיוֹמֶתבסט הזה?'

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

שיטת המנמונית: תת-קבוצות מילים
נסה לבקש מוולפרם אלפאקבוצות משנה של מילים של abdeghilmnrstwxy. עכשיו אנחנו על משהו - זה מחזיר 4243 תוצאות.

א | אייב | עבד | הבל | אבט | אבטס | לעמוד | עומד | מסוגל | יכול | מסוגלים | מסוגל | בכישרון | אבנר | לקצר | מקצר | קיצור | קיצורים | שרירי הבטן | ABS | סנפלינג | נעדר | בהעדר | אבסינת | … (סה"כ: 4243)

אלו מילים המכילות רק את האותיות האלה. אם נוכל לשנן מספיק מילים אלו כדי לכסות את כל שש עשרה האותיות ('קיצורי מעבדות גרזן...') אז נוכל לאמת כל מילה בת שתי אותיות שמתחילה ב-אעל ידי השאלה 'האםסִיוֹמֶתבכל אחת מהמילים האלה?'.

כמה הערות בשלב זה:

  • בחירת המילים הנכונות מתוך 4243 תוצאות היא כואבת.

  • מילים כמובִּירָהחסרים כי הם עושים שימוש חוזר במכתבה.

לצורך בדיקת הזיכרון הזו, לא אכפת לנו אם אות מופיעה יותר מפעם אחת. לשנן את האותיותאה, אולי נזכור את זה בתור 'גֵיהִנוֹם' - אבל שיטה זו לא תציע את המילה הזו.

הפתרון

האלגוריתם של וולפרם אלפא מבוסס על הפעולה הבאה:

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

נוכל למצוא מילים רבות נוספות על ידי היפוך התהליך:

מצא כל מילה במילון, ובדוק משתמש רק באותיות ברשימה.

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

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

אלגוריתם 100 השורות פועל באופן הבא:

  • טען טוברשימת מילים בריטית(שמתקבל מכל מקום באינטרנט).

  • סנן את הרשימה כדי להסיר מילים המכילות את האותיות הלא נכונות. באמצעות האותיות 'abdeghilmnrstwxy',בִּירָהנשאר ברשימה בזמןווֹדקָהמוסר.

  • מצא את המילה שמשתמשת באותיות שונות ככל האפשר. למשל 'קוצר ראייה' שמשתמש בשתים עשרה מהאותיות. זו ההתחלה של המנמונית.

  • המשיכו למצוא מילים שמנצלות את האותיות הנותרות.

  • מעגל עד שכל האותיות מכוסות. לְמָשָׁל. "מזור שעווה לקוצר ראייה".

הַפגָנָה

זהו זה! הנה אני מחפשת זכרונות שיעזרו לי לזכור את המילים של שתי אותיות שמתחילות בא.

$ python mnemonicfinder.py abdeghilmnrstwxy —minlen 3 —maxlen 9==> MnemonicFinder v1.0—> Loading dictionary...—> Search string: abdeghilmnrstwxy—> Generating...—> Mnemonic: ['bearishly', 'midwing', 'tax']—> Mnemonic: ['berthings', 'madly', 'wax']—> Mnemonic: ['betraying', 'mildews', 'hex']—> Mnemonic: ['birthdays', 'mangle', 'wax']    (output clipped)

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

הידד! אני עשרים ושש מהדרך לשינון את כל המילים בנות שתי האותיות המותרות ב-Scrabble. תסתכל עלהקבצים ב- GitHubאם אתה רוצה לנסות את התסריט בעצמך. בחלק 2, אפתח 26 נמוניות ואעבוד על טכניקה לשינון אותן.

פריצה ל-Scrabble חלק 1


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