חידת 8 המלכות
חידת 8 המלכות היתה פופולרית מאוד בראיונות עבודה, ובדרך כלל משמשת להדגים את יעילות שיטת backtraking, כאן נדגים משהוא אחר. החידה הולכת כך: על לוח שחמט צריך לסדר 8 מלכות (מלכה יכולה לנוע לאורך טורים שורות ואלכסונים ללא הגבלה). סידור המלכות על פני הלוח צריך להיות כזה שאף מלכה אינה עומדת על המשבצות עליהן חולשת מלכה אחרת (בשליטת מלכה אחרת). זאת אומרת שבכל טור בלוח ובכל שורה בלוח צריכה לעמוד רק מלכה אחת. ועל כל אלכסון בלוח לא תהיה יותר ממלכה אחת.
בפתרון הזה ננצל את העובדה שלוח השחמט הוא מטריצה של אורך ורוחב - את המיקום של כל מלכה (מתוך השמונה) אנו נתאר כמספר בין 0-7 המתאר את השורה בלוח כאשר את הטור בלוח אנו מתארים באמצעות המיקום ברשימה. מספר שיהיה ראשון ברשימה משמאל, יוצב על הטור השמאלי ביותר של הלוח (המספר ייצג את השורה).
היות שבחידה שלנו אין יותר ממלכה אחת על כל טור וכל שורה, אנו יכולים להשתמש בפרמוטציות של שמונה מספרים 0-7 מה שיתן לנו את כל הסידורים השונים של 8 מלכות על הלוח כאשר אין יותר ממלכה אחת על כל טור או כל שורה.
נראה את התוכנית ונמשיך להסביר -
from itertools import permutations cols = range(8) for p in permutations(cols): if (len(set(p[c]+c for c in cols)) == len(set(p[c]-c for c in cols))==8): print (p)
אנו מייבאים מתוך הספריה itertools את המתודה permutations שמייצרת לנו סידורים של המספרים 0-7 במיקומים שונים בלי לחזור על אותו מספר פעמיים - משהו כזה -
(6, 2, 7, 1, 4, 0, 5, 3)
(6, 3, 1, 4, 7, 0, 2, 5)
(6, 3, 1, 7, 5, 0, 2, 4)
(6, 4, 2, 0, 5, 7, 1, 3)
בכל אפשרות כזה כזאת יש לנו כבר, בילת אין, מצב בו אין יותר ממלכה אחת על כל טור או על כל שורה. מה שנותר לנו הוא לבדוק שאין שתי מלכות על אותו אלכסון.
לשם כך, צריך לחקור את הלוח וניתן לגלות עליו את הדבר הבא -


בלוח השחמט יש שני סוגי אלכסונים - כאלה שחלקם הגבוה הוא בצד שמאל וחלקם הנמוך בצד ימין (כמו האלכסון בריבוע הימני המסומן במספר 7) - נקרא להם אלכסונים יורדים. והסוג השני הוא אלכסונים שמתחילים בצד שמאל למטה ומסיימים בצד ימין למעלה, (כמו אלה המסומנים בריבוע השמאלי בספרה 0) נקרא להם אלכסונים עולים. מלכה הנמצאת במקום טוב באמצע הלוח, חולשת הן על אלכסונים עולים והן על אלכסונים יורדים. אנו צריכים לוודא שעל שני הסוגים לא עומדת מלכה אחרת. התבוננות בלוחות מגלה כי ניתן לייצג את האלכסונים היורדים בנוסחה הבאה: מספר השורה+מספר הטור, כך שכל מלכה שתעמוד על אותו אלכסון יורד תהיה על אותו מספר. ואותו הדבר לגבי האלכסונים העולים אותם מקבלים לפי הנוסחה: מספר טור - מספר שורה (מספר השורה פחות מספר הטור), אחרי שמיישמים את הנוסחה לכל הלוח אנו יכולים לראות למשל שכל המשבצות שתוצאת הנוסחה בתוכן היא 3- הן על אותו אלכסון עולה (בלוח השמאלי).
אם כך, מה שאנחנו מחפשים הוא פרמוטציה, permutation, של המספרים 0-7 (המייצגים 8 שורות בלוח השחמט) במיקומים כאלה על הלוח (למשל לוח האלכסונים היורדים) שכל מלכה תעמוד על משבצת בעלת מספר אחר (כלומר כל אחת על אלכסון שונה) וכך גם בלוח של האלכסונים העולים.
המשבצות המסומנות בכחול על שני הלוחות הם בעצם אחד הפתרונות של החידה (על שני הלוחות זה אותו פתרון - מלכה ראשונה על המשבצת השמאלית התחתונה וכו') אנו רואים שבכל לוח יש שמונה מספרים שונים (כל אחד מייצג אלכסון).
מכאן השורה בקוד -
if (len(set(p[c]+c for c in cols))== len(set(p[c]-c for c in cols))==8):
אנו רוצים שהאורך len של סט set המופעל על נוסחת האלכסונים העולים של כל מלכה יהיה שווה ל-8. כנ"ל לגבי האלכסונים היורדים. אם הסט (שאינו מכיל פעמיים את אותו המספר - המייצג אלכסון) שווה ל- 8 זה אומר שכל מלכה על אלכסון שונה. p[c]-c למשל מייצגת את נוסחת האלכסונים העולים [p[c הוא מספר השורה (מסומן בירוק בלוחות שלנו) ו- c הוא מספר הטור (מסומן בצהוב בלוחות שלנו).
סה"כ מתקבלים 92 פתרונות של החידה (מתוך 4 מיליארד אפשרויות בערך) - מוזמנים להעתיק ולנסות במחשב שלכם.
הנה כמה מהפתרונות לחידה
0, 5, 7, 2, 6, 3, 1, 4
0, 6, 3, 5, 7, 1, 4, 2
0, 6, 4, 7, 1, 3, 5, 2
משמעות הפתרון הראשון, מלכה ראשונה בטור השמאלי ביותר בשורה 0 (שהיא השורה הראשונה), המלכה השנייה (שנייה ברשימה) בטור השני משמאל בשורה 6 (אם מתחילים מ-0 המספר 5 הוא השורה הששית) המלכה השלישית, בטור השלישי משמאל בשורה העליונה ביותר (השורה השמינית המיוצגת על ידי הספרה 7) וכו'.

https://www.heilpraxis-antinaspringer.de/post/10-super-foods-for-your-hormonal-balance
https://www.heilpraxis-antinaspringer.de/post/stress-and-digestion-10-things-you-should-know
https://www.heilpraxis-antinaspringer.de/post/wie-st%C3%A4rke-ich-meine-ressourcen-ein-kleiner-ausflug-in-das-geheimnis-unseres-nervensystems
https://www.heilpraxis-antinaspringer.de/post/copy-of-stress-and-digestion-10-things-you-should-know
https://www.florencelife.co/post/exploring-florence-delving-into-the-heart-of-the-renaissance
https://www.florencelife.co/post/top-5-gelato-places-in-florence-italy
https://www.florencelife.co/post/deciphering-the-uffizi-an-intimate-exploration-of-florence-s-art-sanctuary
https://www.florencelife.co/post/discover-the-charming-tuscan-towns-day-trips-from-florence
https://www.florencelife.co/post/amazing-sandwich-shops-you-must-try-in-florence-italy
https://www.pythonisrael.com/single-post/functools
https://mez.ink/garudaplay88
https://mez.ink/garudaplay.88
https://mez.ink/wau.hugo123
https://mez.ink/link.hugo123
https://mez.ink/wa.hugo123
https://mez.ink/resmi.hugo123
https://mez.ink/playwn123
https://mez.ink/linkhugo123
https://mez.ink/linkplaywin123
https://mez.ink/playwin.123
https://mez.ink/dolar.138
https://mez.ink/link.dolar138
https://mez.ink/wd.dolar138
https://mez.ink/offc.dolar138
https://mez.ink/gacor.77
https://mez.ink/gacor77indonesia
https://mez.ink/gacor77.
https://mez.ink/gacor77link
https://mez.ink/ps123
https://mez.ink/playslt123
https://mez.ink/playslot.123
https://mez.ink/sedap666
https://mez.ink/sedap.666
https://mez.ink/sedap666id
https://mez.ink/sedap666.link
https://mez.ink/larisbet.303
https://mez.ink/lrisbet303
https://mez.ink/larisbt303
https://mez.ink/lsbet303
https://mez.ink/hoki666ih
https://mez.ink/hoki6666
https://mez.ink/hokii666
https://mez.ink/pasar.88
https://mez.ink/pasar88.
https://mez.ink/psar88
https://mez.ink/pasarrr88
https://mez.ink/alam88.
https://mez.ink/alamm88
https://mez.ink/pasaar88
https://mez.ink/markisawin
https://mez.ink/markisawinofc
https://mez.ink/markisawinindonesia
https://mez.ink/markisawin1
https://mez.ink/marksiawin2
https://mez.ink/marksiawinslot
https://mez.ink/markisa.win
https://mez.ink/idrhok
https://mez.ink/idrhki
https://mez.ink/idrhokii
https://mez.ink/idrkokiii
https://mez.ink/botk123
https://mez.ink/botak123wd
https://mez.ink/btak123
https://mez.ink/botakk123
https://mez.ink/putralangit88
https://mez.ink/putralangt88
https://mez.ink/putralangitt88
https://mez.ink/putrlangit88
https://mez.ink/ptralangit88
https://mez.ink/tempoo123
https://mez.ink/tempo123news
https://mez.ink/tempo123nih
https://mez.ink/tempo123id
https://mez.ink/tempo123doloe
https://magicly.bio/linkRUPIAH777
https://mez.ink/link.rupiah777
https://mez.ink/rupiah_777
https://magicly.bio/RUPIAH_777
https://mez.ink/rp777_jos
https://mez.ink/rupiah777_indonesia
https://mez.ink/rupiah777_idn
https://mez.ink/ruph777
https://mez.ink/mimi303
https://magicly.bio/MIMI303_offc
https://magicly.bio/RTPMIMI303
https://mez.ink/mimi303official
https://mez.ink/mimi303slot
https://mez.ink/mimi303_login
https://mez.ink/mimi303_1
https://mez.ink/link_prima77
https://rupiah777.website3.me/
https://mez.ink/prim77
https://mez.ink/link.prima77
https://mez.ink/situs.prima77
https://mez.ink/situsgacorprima77
https://mez.ink/prima77.slot
https://mez.ink/lotus.303
https://mez.ink/1.lotus303
https://mez.ink/lots303
https://mez.ink/lotus303.wadidauw
https://mez.ink/web.lotus303
https://mez.ink/prda188
https://mez.ink/.prada188
https://mez.ink/1.prada188
https://mez.ink/303prada
https://mez.ink/linkmega288
https://mez.ink/km777link
https://mez.ink/pasar123nih
https://mez.ink/pasar123slot
https://mez.ink/fonix3388link
https://mez.ink/slotonlinee
https://mez.ink/sltonline
https://mez.ink/slottonline
https://mez.ink/slotagcor
https://mez.ink/fonix3388slot
https://mez.ink/arwana123
https://mez.ink/sayangbet
https://mez.ink/jago11link
https://mez.ink/angkasa189login
https://mez.ink/dewi11jp
https://mez.ink/dewi11ku
https://mez.ink/dewi11slot
https://mez.ink/dewi.11
https://mez.ink/dewil11ogin
https://mez.ink/dewi11login
https://mez.ink/situsdewi
https://mez.ink/asihoki
https://mez.ink/asiahokigacor
https://mez.ink/asiahokiii77
https://mez.ink/asiahokijos
https://mez.ink/langt77
https://mez.ink/lngit77
https://mez.ink/lngt77
https://mez.ink/langitlogin
https://mez.ink/langit77ye
https://mez.ink/langit77one
https://mez.ink/langit7777
https://mez.ink/playslt77
https://mez.ink/plyslt77
https://mez.ink/playslot7
https://mez.ink/play77slott
https://mez.ink/playslot77slot
https://mez.ink/berass
https://mez.ink/beras11ku
https://mez.ink/beras11wd
https://mez.ink/berassss11
https://donidarti.website3.me/
https://mez.ink/merdek777
https://mez.ink/merdka777
https://mez.ink/mrdeka777
https://mez.ink/merdeka
https://mez.ink/merdeka777slt
https://mez.ink/merdeka777link
https://mez.ink/merdeka777one
https://datrounnifretouyuu.website3.me/
https://troittutribroubu5017.website3.me/
https://mez.ink/dewi188ind
https://mez.ink/dewi188login
https://mez.ink/dewi188ku
https://mez.ink/dewi188wd
https://mez.ink/dewi188slot
https://mez.ink/pulsa303log
https://mez.ink/pulsa303ku
https://mez.ink/pulsa303bandung
https://mez.ink/pulsa303dki
https://patritolloubesh.website3.me/
https://mez.ink/pulsa_303
https://mez.ink/link_maxwin88
https://mez.ink/maxwin88_slot
https://mez.ink/maxwin88_top
https://mez.ink/maxwin88_ind
https://mez.ink/maxwin88_gacor
https://mez.ink/slot_maxwin88
https://mez.ink/maxwn88
https://mez.ink/mxwin88
https://maxx88.website3.me/
https://mez.ink/istana_777
https://mez.ink/istan777
https://mez.ink/istana777_1
https://mez.ink/istana777_2
https://mez.ink/istana777_3
https://magic.ly/ISTANA_777
https://magic.ly/SGO_777
https://mez.ink/sgo_777
https://magic.ly/SGO777_login
https://mez.ink/sgo777_3
https://sgo777.website3.me
https://mez.ink/sgo777sl_
https://mez.ink/sgo777_gacor
https://mez.ink/sgo777_indonesia
https://mez.ink/sgo777_1
https://magic.ly/KM_777
https://mez.ink/km_777
https://magic.ly/KM777slot
https://mez.ink/km777_slt
https://km7775.website3.me/
https://magic.ly/KM777off
https://mez.ink/km777win
https://magic.ly/KM777_gas
https://mez.ink/km777_gas
https://mez.ink/km777_aman
https://mez.ink/topcer33.
https://mez.ink/abc123.
https://mez.ink/nenogym.
https://mez.ink/domba33.
https://mez.ink/posjp33.
https://mez.ink/vip33.
https://mez.ink/sip33.
https://mez.ink/ultra33
https://mez.ink/hebat33
https://mez.ink/gacor33.
https://mez.ink/to188.
https://mez.ink/royal188.
https://mez.ink/royal188slot1
https://mez.ink/tkp188wd
https://mez.ink/tkp188slot
https://mez.ink/mami188slot
https://mez.ink/ormas188slot
https://mez.ink/makaiu
https://mez.ink/barat4dwd
https://mez.ink/desta4d
https://mez.ink/gofar4d
https://mez.ink/joki4dwd
https://mez.ink/bolu4d
https://mez.ink/jaka4d
https://mez.ink/bantul4d
https://mez.ink/asu4dlogin
https://mez.ink/bangka4dwd
https://mez.ink/wa4dslot
https://mez.ink/neo4dwd
https://mez.ink/garuda138wd
https://mez.ink/badak69wd
https://mez.ink/gajah138wd
https://mez.ink/buaya138wd
https://mez.ink/harta138wd
https://mez.ink/sawer138wd
https://mez.ink/vip555dp
https://mez.ink/vip555loh
https://mez.ink/mdg188slot
https://mez.ink/mgd188login
https://mez.ink/mega188slot
https://mez.ink/mega188wd
https://mez.ink/pvjbet4
https://mez.ink/pvjbet5
https://mez.ink/pvjbet6
https://mez.ink/pvjbetmacau
https://mez.ink/pvjbetlink
https://mez.ink/pvjbetslot
https://magic.ly/pvjbet
https://mez.ink/pvj.bet
Game development is a balance between creativity, technology, and player expectations. ManillaGames embraces this balance by producing engaging content about design principles, animation workflows, and modern gaming trends. We are passionate about storytelling, worldbuilding, and creating mechanics that keep players invested. Our articles and resources help beginners and experienced developers understand the logic behind successful games. From indie concepts to large-scale productions, we analyze what makes digital worlds memorable. ManillaGames is built on curiosity, experimentation, and a desire to push creative boundaries. Our goal is to transform ideas into experiences that players remember long after the credits roll.