ãªããŠé
ãåœïŒ -女çã¯èšã£ãã -ããŠãããã§ã
ããªãã¯ç¥ã£ãŠãããããªãã¯ãã æ»åšããã ãéãèµ°ããªããã°ãªããªã
åãå Žæã«ïŒ å¥ã®å Žæã«è¡ããããªã
å°ãªããšã2åã®é床ã§å®è¡ããå¿
èŠããããŸãïŒ
ã«ã€ã¹ã»ãã£ãã«ã ã¢ãªã¹ã»ã¹ã«ãŒã»ã¶ã»ã«ããã³ã°ã»ã°ã©ã¹ ã仿¥ã¯ã2幎匱åã«åºäŒã£ããéå°è©äŸ¡ãããŠããçŽ æŽãããã²ãŒã ã«ã€ããŠã話ããããšæããŸãã ããæå³ã§ã
Dmitry Skiryukãšç¥ãåãã«ãªã£ãã®ã¯ããã®ã²ãŒã ãš
Urã® ãããã§ã ã åœæãç§ã¯ããŒãã²ãŒã ã«èå³ãæã¡å§ããŠããŸããã ç§ã®ç¥èã¯ä¹ãããå€ãã®ç¹ã§çŽ æŽã§ããã
ãã§ã€ã¹ã®ãããªã²ãŒã ã¯æåéãç§ã«åºå€§ãªäžçãéããã ä»ã§ãããã®ã²ãŒã ã§ã®äœæ¥ã¯ã倧éšåãæ¢åµå°èª¬ã«äŒŒãŠããŸãã ãã®ç¹ã§ãã²ãŒã ã
ãã§ã€ã¹ ãã¯ããã®ååãšé¡äŒŒç¹ã®äž¡æ¹ããæåãª
ã¢ã¡ãªã«ã®äœå®¶ã®ä»®åãšå®å
šã«æ£åœåããŸããã
ã²ãŒã ã¯ãã ã¯ã«ã·ã§ãã¹ããŒã«ãã£ãŠéçºããã1986幎ã«TSRã«ãã£ãŠéå§ãããŸããã ç¹å¥ãªããŒãã«å ããŠãåãã¬ã€ã€ãŒã¯10ãã¯ã¹ã®ãµã€ã³ããæã£ãŠããŸãããããã«ããããããããã®ã²ãŒã ã¯å¶ç¶ã®ã²ãŒã ã§ã¯ãããŸããã ãã¥ãŒãã¯ãé²è¡ã®é åºã決å®ããããã«äžåºŠã ãã¹ããŒãããå°æ¥çã«ã¯æ°åãšããŠã®ã¿äœ¿çšãããŸãã äžåŽã®ãã€ã³ãã®æ°ã¯ããã¥ãŒããç§»åã§ããã¹ãããã®æ°ã瀺ããŠããŸãã ãããã£ãŠã1ã€ã®ãã€ã³ããæã€ãã¥ãŒãã¯ã2ã€ã®ãã€ã³ãïŒçŽç·äžã®2ã€ã®ã©ã€ã³ã3ã€ã®ã©ã€ã³ã3ã€ã®ã©ã€ã³ãªã©ïŒã䜿çšããŠã6ã€ã®æ¹åã®ããããã«é£æ¥ãããã£ãŒã«ãã«ç§»åã§ããŸã ãã¥ãŒãã¯ãæå®ãããã¹ãããæ°ã ããæ£ç¢ºã«ç§»åããå¿
èŠããããŸãã ç§»åã®éçšã§ãç«æ¹äœã¯å察åŽãå転ããŸããïŒäžé¢ã®ç¹ã®æ°ã¯å€ãããŸããïŒã åæé
çœ®ã¯æ¬¡ã®ãšããã§ãã

ã«ãŒã«ã®è©³çްãã芧ãã ãããåãã¬ãŒã€ãŒã®äžé¢ã®åèšãã€ã³ãæ°ã¯25ã§ãããã¬ãŒã€ãŒã¯ãã²ãŒã ã®çµäºãŸã§ãã®éãç¶æããå¿
èŠããããŸãã ãã¬ã€ã€ãŒã¯ã¿ãŒã³ãåãããã®ãã¡ã®1人ã1人ïŒãŸãã¯2人ããããå¯èœïŒã®å Žåã察æŠçžæã¯ã²ãŒã ããé€å»ããããã€ã³ãã®åèšãæå°ãã€ã³ãæ°ã§ãµã€ã³ãã«è¿œå ããå¿
èŠããããŸãïŒã²ãŒã ã®éå§æãããã¯ãŠãããã®1ã€ã§ãïŒã ãã®åŸããã¹ãŠã®ãã€ã³ãã忣ãããªãå Žåãæ®ãã¯ããã«åæ£ãããåžžã«æå°ã®ãã€ã³ããæã€ãã¥ãŒãããéå§ãããŸãã ãµã€ã³ãã®æ®ãã5åæªæºã®ãã¬ãŒã€ãŒã¯ãããŒãã«æ®ã£ãŠãããµã€ã³ãã«å¿
èŠãªãã€ã³ãæ°ãåé
ã§ããªããããè² ããšãªããŸãã

ããŒãã®å¢çã¯ãããŒã¹ã®åãã劚ããŸããã ããŒãã®å·Šå³ã®å¢çç·ã¯äºãã«ãæ¥çããããŠãããå³ã®äžäžã®å¢çç·ããã¯ãè¿ã£ãŠè·³ãè¿ããŸãã ãã¡ãããããã¯æ°åã劚ããããã«åãããšãæå³ããŸããã 人ç©ã¯ãäºãã«ãé£ã³è¶ãããããšã¯ã§ãããã
åå·¥äŒè°æ ãã®äžå€®ãã£ãŒã«ããåæ§ã§ãã 察æŠçžæã®é§ããã£ããã£ããã«ã¯ããã®é§ãå®å
šãªæ°ã®ã¹ããããçŽç·ã§å®äºããããšã«ãã£ãŠããã®äžã«ãç«ã€ãå¿
èŠããããŸãïŒãã§ã¹ãã£ããã£ïŒã ç§»åã¯ããã®è²ã®æ°åã§çµäºããå ŽåããããŸãã ãã®å Žåãã
ãã³ãã³ã° ããçºçããŸããã¿ãŒã²ãããã£ãŒã«ãã«è¡šç€ºãããå³åœ¢ã¯ã1ã¹ããããã€ç§»åããç§»åæ¹åãç¶ç¶ããŸãïŒããŒããšãªããŠã³ãã®çµåãèæ
®ã«å
¥ããŠïŒã 次ã®ãã£ãŒã«ãã圌ã®ãã£ã®ã¥ã¢ã§å ããããŠããå Žåãã
ãã³ãã³ã° ãã¯æåã®ç©ºã®ãã£ãŒã«ããŸãã¯æµã®ãã£ã®ã¥ã¢ã§å ããããŠãããã£ãŒã«ããŸã§ããã«åºãããŸãïŒæµã®ãã£ã®ã¥ã¢ã¯åãé€ãããŸãïŒã ãã®ãããªåããäžå¯èœã«ããé害ã¯1ã€ã ãã§ãã
ãã³ãã³ã°ã䜿çšããŠäžå€®ã®ã»ã«ã«å³åœ¢ããæŒã蟌ããããšã¯çŠæ¢ãããŠããŸãã
æåã®äœçœ®ãããåãã¬ãŒã€ãŒã¯èªåã®ãã¹ãŠã®ããŒã¹ãåšæçã«ã·ããããããããã®ãŠãããã2ã®æ¹åã«ç§»åã§ããããšã«æ°ä»ãããšãã§ããŸãã åæ§ã®åããèŠåã§èš±å¯ãããŠããŸãã ãŸãã飿¥ãããã£ãŒã«ãã«ããåãè²ã®æ°åã®éã§ãã€ã³ãã®ã亀æããèš±å¯ããŸããã ãããã£ãŠã5ãš2ã®ãã¢ã¯ã4ãš3ããŸãã¯1ãš6ã«å€ããå¯èœæ§ããããŸãã 調æ»ãããŠããªãåãã¯1çš®é¡ã®ã¿ã§ãã ããŒãã®äžå€®ã®ãã£ãŒã«ãïŒ
Chamber ïŒãééã§ããããŒã¹ã¯ãããŸãããããã®ããŒãã§ã®åããçµäºã§ããŸãã ãããçºçããå Žåãå³ã¯ãã€ã³ãã®ç·æ°ãç¶æããªãã2ã€ã«ãåå²ããããŸãã æ°åã¯åžžã«åå²ãããåä¿¡ããæ°åã®1ã€ã®ãã€ã³ããä»ã®æ°åã®ãã€ã³ãã1以äžè¶
ããªãããã«ããŸããåãã¬ã€ã€ãŒã®æ°åã®åèšæ°ã¯10ãè¶
ããããšã¯ã§ããŸããïŒãã®å Žåãã²ãŒã ã®éå§æã«ãåãã¬ã€ã€ãŒã¯1ã€ã®ãã€ã¹äºåïŒã
æçã®ãæ¡å€§ãã®æ¹åã¯ãç¢å°ã®å
端ã«äŒŒãŠããŸãã 倿°ã®ãã€ã³ãïŒååšããå ŽåïŒãæã€ãã¥ãŒãã¯åžžã«å·Šã«ç§»åããŸãã 2ã€ã®ç¹æ®ãªã±ãŒã¹ã§ã¯ããåå²ãã¯äžå¯èœã§ãã ãŸããäžèšã§è¿°ã¹ãããã«ã1è²ã®ç«æ¹äœã®æ°ã¯10ãè¶
ããããšã¯ã§ããŸãããããã«ã1ãã€ã³ãã§ç«æ¹äœãåå²ã§ããªãããšã¯æããã§ãã ã©ã¡ãã®å Žåãã
éšå±ã«å
¥ãç«æ¹äœã¯ãã®ãŸãŸå·Šæ¹åã«åºãŸãã
åå·¥äŒè°æãåºãåãã£ã®ã¥ã¢ã¯ãèªåã®ãã£ã®ã¥ã¢ãå©ãããçžæã®ãã£ã®ã¥ã¢ãæã«å
¥ããããšã§
ãã³ãã³ã°ãéå§ã§ããŸãïŒãã®æ¹æ³ã§ã®ã¿ãäžåºŠã«2ã€ã®æµã®é§ãæã«å
¥ããããšãã§ããŸãïŒã
Tom KruszewskiãšTSRã¯ãæœåšçãªèŠèŽè
ã®èœåã倧ããé倧è©äŸ¡ããŠãããšèšããããåŸãŸããã å€§è¡æ¶è²»è
ã«ãšã£ãŠãã²ãŒã ã¯è€éãããŸããïŒãã§ã¹ãããã»ã©è€éã§ã¯ãããŸãããã誰ããæ
£ããŠããŸãïŒã è£œé æ¥è
ã¯çç£ã忢ããŠãããçŸåšãChaseã¯ããŸããŸãªèŠæ¬åžããªãŒã¯ã·ã§ã³ãè²©å£²ã§æã§ã®ã¿è³Œå
¥ã§ããŸãã ããã§ãããã®ã²ãŒã ã¯20äžçŽã®æé«ã®ã²ãŒã ã®1ã€ãšèããããŠããŸãã
ç°¡åãªä»äº
ã²ãŒã ã¯ããŒãããå§ãŸãããã§ã€ã¹ã®ããŒãã¯...ç¬ç¹ã§ãã 以åã¯ãå
è§åœ¢ã®ããŒãã§ã²ãŒã ãäœæããå¿
èŠã¯ãããŸããã§ããããããæåã®ïŒéåžžã«å°ããªïŒé害ã§ããã ããã¯è峿·±ãç¹ã§ãããç§ã¯ããã«ã€ããŠããªãã«ãã£ãšäŒãããã§ãã ZRFã§ã²ãŒãã³ã°ããŒããèšè¿°ããããã®ã¡ã«ããºã ã¯ååã«æ€èšãããŠãããé£è¡æ©ã«è¡šç€ºãããã²ãŒã äžã«å€åããªãéããã»ãŒãã¹ãŠã®ããŒããå®è£
ã§ããŸãã
ããã¯èŠãç®ã§ã(board (image "../Images/Chase/board.bmp") (grid (start-rectangle 48 32 108 82) (dimensions ("a/b/c/d/e/f/g/h/i/j/k/l/m" (60 0)) ("1/2/3/4/5/6/7/8/9" (-30 52)) ) (directions (se 1 1) (w 1 0) (sw 0 1) (nw -1 -1) (e -1 0) (ne 0 -1)) ) (kill-positions j1 k1 l1 m1 j2 k2 l2 m2 a3 k3 l3 m3 a4 k4 l4 m4 a5 b5 l5 m5 a6 b6 l6 m6 a7 b7 c7 m7 a8 b8 c8 m8 a9 b9 c9 d9 ) )
ã¢ãã«ã®è©³çްãèŠèŠåã®åé¡ãšæ··ããããšã¯äž»åŒµããŸããããäžæ¹ã仿¹ããåé¢ããå¿
èŠããããŸã§ïŒããšãã°ãããŒããã¢ã€ãœã¡ã§ã¯ãªããæ£çŽãªã3Dã§è¡šç€ºãããŸã§ïŒããã®ã¢ãããŒãã¯éåžžã«ããŸãæ©èœããŸãã ãã®èª¬æãããã«è©³ããèããŠã¿ãŸãããã
- 説æã®äžå¯æ¬ ãªéšåã¯ãããŒãã®ç»åãå«ããã¡ã€ã«ã§ãã å³åœ¢ã®å¹ŸäœåŠçãªãµã€ãºãšäœçœ®ã¯ãã¹ãŠããã«æ·»ä»ãããŸãïŒãã®ããã å庫çªã®å®è£
ã®ååžã®ã»ãšãã©ã¯ãããŸããŸãªåœ¢ç¶ãšãµã€ãºã®é»ãé·æ¹åœ¢ã§ãïŒã ããŒãã®ç»åãBMP圢åŒïŒ ZoGã¯ãã®åœ¢åŒã®ã¿ãçè§£ïŒã§å«ããã¡ã€ã«ã¯ãããŒã¯ãŒãimageã«ãã£ãŠæ±ºå®ãããŸã ã ããã§ã¯ãè€æ°ã®ãã¡ã€ã«ãäžåºŠã«ïŒã¹ãã³éã®åãæ¿ããå¯èœã«ããããã«ïŒå®çŸ©ã§ããŸããã幟äœåŠçãªæ¯çã¯åãã§ãã
- gridããŒã¯ãŒãã䜿çšãããšãäœçœ®ã®n次å
é
åãèšè¿°ã§ããŸãã ã»ãšãã©ã®å Žåãããã¯äœ¿ãæ
£ãã2次å
ã®ããŒãã§ãããç°ãªã次å
ïŒæå€§5ã€ïŒã®ããŒããå®çŸ©ããããšãã§ããŸãã åã
ã®äœçœ®ã«äžæã®ååãä»ããããŠããå ŽåãããŒãã¯è€æ°ã®ã°ãªããã§æ§æã§ããŸãã ã Quantum Tic-Tac-Toe ãã§è¡ãããæ¹æ³ãšåæ§ã«ãåŒ·ãæ¬²æ±ãããã°ã ã°ãªãããå¥ã®ã°ãªããã®äžã«é
眮ããããšããã§ããŸãã
- ãã»ã«ãã®ãµã€ãºãšã°ãªããã®äœçœ®ã¯ã start-rectangleããŒã¯ãŒãã«ãã£ãŠæ±ºå®ãããŸãã 2çµã®æŽæ°ã¯ãæåïŒå·ŠäžïŒã®ã»ã«ã®å·Šäžé
ãšå³äžé
ã®ç»é¢åº§æšïŒxãyïŒãæå®ããŸãã
- 以äžã¯ã次å
ãã®èª¬æã§ãã å説æã«ã¯ã2ã€ã®æŽæ°ã ãã§ãªããååã®æååïŒäœçœ®ã®ååã¯ãã«ã«ãç©ã«ãã£ãŠçµåãããŸãïŒãå«ãŸããŸãã ãããã®æ°åã«ã¯ãå
è§åœ¢ãçå°ºæ§ã®ããŒããèšè¿°ããããšãã§ãããéæ³ãããããŸãã ããã¯ã次ã®ã°ãªããã»ã«ãã·ããããã·ããã«ãããŸããã éåžžïŒ2次å
ããŒãã®å ŽåïŒã1ã€ã®æ¬¡å
ã§ã¯ãã»ã«ã¯xã®ã»ã«å¹
ã ãã·ããããããã1ã€ã®æ¬¡å
ã§ã¯-yã®ã»ã«ã®é«ãã ãã·ãããããŸããããããã®ã»ã«ãxã®å¹
ã®ååã ãã·ãããããšãå
è§åœ¢ã®ããŒãã®åªããããŒã¹ãååŸã§ããŸãã
- ã°ãªããã® ãããžãã¯ãã®2çªç®ã®ã³ã³ããŒãã³ãã¯æ¹åã§ãã ããŒãã¯äœçœ®ã ãã§ãªããããŒãéã®éä¿¡ïŒååä»ãããã³äžæ¹åïŒã§ããããŸãã ãã¡ããã忥ç¶ã®ååãšäœçœ®ã®ãã¢ãæå®ããããšã«ãã£ãŠã忥ç¶ãåå¥ã«æ±ºå®ããæéã¯ãããŸãããã倧ããªããŒããå®çŸ©ããå Žåããã®ããã»ã¹ã¯é¢çœããããŸããã DirectionsããŒã¯ãŒãã䜿çšãããšãäœçœ®åã§ã¯ãªããã°ãªããå
ã®ã«ãŒããæäœã§ããŸãã
- å¿
èŠãªåœ¢ç¶ã®ããŒããååŸããã«ã¯ããã倧ããªãµã€ãºã®ãé·æ¹åœ¢ãããŒãã䜿çšããæ¬¡ã«ã»ã«ãã»ã«ã®ååã ãã·ããããŸãã ãã®çµæãããŒããããåãé¢ããå¿
èŠããããäœåãªãããžã·ã§ã³ããããŸãã kill-positionsããŒã¯ãŒãã䜿çšãããšã以åã«å®çŸ©ãããäœçœ®åãç¡å¹ãšããŠå®£èšã§ããŸãã ãã¡ãããåé€ãããäœçœ®ã§ã¯ã察å¿ããæ¥ç¶ââãåæãããŸãã
gridããŒã¯ãŒãã䜿çšãããšããæšæºãããŒããèšè¿°ããéã®æäœæ¥ã®éã倧å¹
ã«åæžã§ããŸããããã®ã¢ãããŒãã«ã¯ç¹å®ã®æ¬ ç¹ããªãããã§ã¯ãããŸããã 第1ã«ãæŽæ°åº§æšãšãªãã»ããã®ã¿ã§åäœããéžæãã幟äœåŠç寞æ³ã«åãããŠããŒãã®ç»åãæç»ãããŠããªãå ŽåãããŒãã®ãã¹ãŠã®äœçœ®ã®äœçœ®ãå®å
šã«æããããšã¯å°é£ã§ãã äœçœ®ã®åã
ã®èª¬æã¯ç°¡æœã§ã¯ãããŸããããäºãã«ç¬ç«ããŠäœçœ®ã調æŽã§ããŸãã åæã«ãããã¯åçŽãªæ®ºäººéã®æäœæ¥ãå¿
èŠãšããŸãïŒè¡ããããã¹ãŠã®ã¿ã€ããã¹ãä¿®æ£ããå¿
èŠæ§ãèæ
®ããŠïŒã ãã®ããã»ã¹ãç°¡åã«ããããã«ãã倧ãŸããªã説æã«
ã°ãªããã䜿çšããŸãããã®åŸãå°ããª
ã¹ã¯ãªããã䜿çšããŠäœçœ®ã®åå¥ã®èª¬æãååŸã
ãŸã ã
ã¹ã¯ãªãã my @grid; my %kp; my $sx, $sy, $dx, $dy; my $dm = 0; while (<>) { if (/\(start-rectangle\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\)/) { $sx = $1; $sy = $2; $dx = $3 - $1; $dy = $4 - $2; } if (/\(\"([^\"]+)\"\s+\((-?\d+)\s+(-?\d+)\)\)/) { my @a = split(/\//, $1); $grid[$dm]->{ix} = \@a; $grid[$dm]->{x} = $2; $grid[$dm]->{y} = $3; $dm++; } if (/\(kill-positions/) { $fl = 1; } if ($fl) { if (/\s(([a-z0-9]{1,2}\s+)+)/i) { my @a = split(/\s+/, $1); foreach my $p (@a) { $kp{$p} = 1; } } if (/\)/) { $fl = 0; } } } sub try { my ($ix, $pos, $x, $y) = @_; if ($ix < $dm) { my $i = 0; foreach my $p (@{$grid[$ix]->{ix}}) { try($ix + 1, $pos . $p, $x + $i * $grid[$ix]->{x}, $y + $i * $grid[$ix]->{y}); $i++; } } else { if (!$kp{$pos}) { my $a = $sx + $x; my $b = $sy + $y; my $c = $a + $dx; my $d = $b + $dy; print " "; printf "($pos %3d %3d %3d %3d)\n", $a, $b, $c, $d; } } } try(0, '', 0, 0);
çµæ (positions (a1 48 32 108 82) (a2 18 84 78 134) (b1 108 32 168 82) (b2 78 84 138 134) (b3 48 136 108 186) (b4 18 188 78 238) (c1 168 32 228 82) (c2 138 84 198 134) (c3 108 136 168 186) (c4 78 188 138 238) (c5 48 240 108 290) (c6 18 292 78 342) (d1 228 32 288 82) (d2 198 84 258 134) (d3 168 136 228 186) (d4 138 188 198 238) (d5 108 240 168 290) (d6 78 292 138 342) (d7 48 344 108 394) (d8 18 396 78 446) (e1 288 32 348 82) (e2 258 84 318 134) (e3 228 136 288 186) (e4 198 188 258 238) (e5 168 240 228 290) (e6 138 292 198 342) (e7 108 344 168 394) (e8 78 396 138 446) (e9 48 448 108 498) (f1 348 32 408 82) (f2 318 84 378 134) (f3 288 136 348 186) (f4 258 188 318 238) (f5 228 240 288 290) (f6 198 292 258 342) (f7 168 344 228 394) (f8 138 396 198 446) (f9 108 448 168 498) (g1 408 32 468 82) (g2 378 84 438 134) (g3 348 136 408 186) (g4 318 188 378 238) (g5 288 240 348 290) (g6 258 292 318 342) (g7 228 344 288 394) (g8 198 396 258 446) (g9 168 448 228 498) (h1 468 32 528 82) (h2 438 84 498 134) (h3 408 136 468 186) (h4 378 188 438 238) (h5 348 240 408 290) (h6 318 292 378 342) (h7 288 344 348 394) (h8 258 396 318 446) (h9 228 448 288 498) (i1 528 32 588 82) (i2 498 84 558 134) (i3 468 136 528 186) (i4 438 188 498 238) (i5 408 240 468 290) (i6 378 292 438 342) (i7 348 344 408 394) (i8 318 396 378 446) (i9 288 448 348 498) (j3 528 136 588 186) (j4 498 188 558 238) (j5 468 240 528 290) (j6 438 292 498 342) (j7 408 344 468 394) (j8 378 396 438 446) (j9 348 448 408 498) (k5 528 240 588 290) (k6 498 292 558 342) (k7 468 344 528 394) (k8 438 396 498 446) (k9 408 448 468 498) (l7 528 344 588 394) (l8 498 396 558 446) (l9 468 448 528 498) (m9 528 448 588 498) )
ããã¯æŠãã®ååã«éããŸããïŒ ããŒãã®äœçœ®åã¯ãäžè¬ã«åãå
¥ããããŠããè¡šèšæ³ã«åãããŠä¿®æ£ããå¿
èŠããããŸãã ããã«ããšããžã®åšãã§ããŒãããã«ãŒããããããšãå¿ããã«ãäœçœ®ã®ãã¢ãæ¹åã«æ¥ç¶ããå¿
èŠããããŸãã ãã®çµæãããªãã®éã®
æäœæ¥ãå¿
èŠã«ãªããŸãããããã®ããžãã¹çšã®ã¹ã¯ãªããã¯äœæããŸããã§ããïŒããããããã ãã®äŸ¡å€ã¯ãããŸãããïŒã
çæ§ã®ç ã
ãã£ãšåã«ãã§ã€ã¹ã«äŒã£ãããæè¿ãŸã§ãã¬ã€ã§ããªãã£ãã ããã«ã¯éåžžã«è±ªè¯ãªããŒããå¿
èŠã§ãã ããçšåºŠã®ã¹ãã«ãããã°ãå°giç€ïŒ9x9ïŒã§ãã¬ã€ã§ããŸãããç§ãæã£ãŠããŸããã§ããã éåžžã®ãã§ã¹ç€ïŒ8x8ïŒã¯ããã®ã²ãŒã ã«ã¯ãŸã£ããäžé©åã§ãã æåŸã®
Zilantkonã§ãã§ã€ã¹ã®ããŒããç²åŸããããšãã§ããŸãããããµã€ã³ãã¯å«ãŸããŠããŸããã ç§ã¯è²·åãé æ¹ã®æ£ã«æããŸããããäºä»¶ãä»å
¥ããªããã°å€±æããã§ãããã
äºæ
ã¯å¶ç¶ã§ã¯ãããŸããç§ã®åšã¯ãç§ãã¡ãé·ãéå人ã§ãã£ãå®¶æãšäžç·ã«èªçæ¥ã«æåŸ
ãããŸããã èŽãç©ãšããŠã
ããŒãã²ãŒã ãéžã°ããŸãããæ°äººã®å€§äººãåäŸã®ã«ãã§ã«3æéã»ã©åº§ã£ãŠããªããã°ãªããªãã£ãã®ã§ã圌ãïŒãããŠç§ïŒãäœãã§å é ããå¿
èŠããããŸããã å¯èœãªéžæè¢ãšããŠã
å¥ã®ã²ãŒã ãææ¡ãããŸããããç§ã¯ããæœè±¡çãªã²ãŒã ã奜ããããç§ãäœããæã£ãŠè¡ãããšã«ããŸããã åœåãç§ã¯
Urã«ã€ããŠèããŸããããç§ãæã£ãŠãããããã§ã¯ãåååœ¢ã®æ£ã®åœ¢ã§äœããã圌ã®D2ã骚ãïŒ
Senetã«ããå
žåçïŒã¯ããªãäžå¿«ã§ãæãã®éã«å€ãã®ãã€ãºãåºããä»ã®äººãšå¹²æžããå¯èœæ§ããããŸããã
ãã®æããã§ã€ã¹ãæãåºããŸããã 圌ã®ã»ããã«20åã®ãµã€ã³ããè£å
ããå¿
èŠããããŸããããç§ã¯ãŸã ããŒãã²ãŒã ã¹ãã¢ïŒã®ããçšïŒã«åãã£ãŠããã®ã§ãããã¯ïŒåœæã®ããã«æããïŒåé¡ã§ã¯ãããŸããã§ããã ãã®ãµã€ãã§ãç§ã¯çŽ æŽãããåéæã®ãã¥ãŒãïŒãããã70ã«ãŒãã«ïŒãèŠãŸãããã人çã¯èª¿æŽãããŸããã ã¹ãã¢ã§ã¯ãç§ãé¢åãèŠãŠãããã¥ãŒãã
1ã€ã®ã³ããŒã«ããå«ãŸããŠããªãã£ãããšã倿ããŸããã ã«ã¶ã³ã¯ã¢ã¹ã¯ã¯ã§ã¯ãããŸãããç§ã¯äºç®ãªãã·ã§ã³ã«æºè¶³ããicoãdodeãããã³ä»ã®é¢äœã®å£²ãæããæäŸããããã¬ãŒãµãŒããå¿
èŠãªãã¥ãŒããåéããå¿
èŠããããŸããã èµ€ãŸãã¯ç·ã®ããããçµã¿ç«ãŠãããšã¯ã§ããŸããã§ããããéãšçœïŒå€§äžå€«ã倧äžå€«ã
ãããã«é»è²ããã£ãïŒã®ãã¥ãŒããçšæãããŠããŸããã
ãã¡ãããç§ã¯ã«ãŒã«ã誀ã£ãŠè§£éããŸããïŒèšæ¶ã«ã€ããŠè©±ããŸããïŒã ç§ã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ããã¬ããªã±ãŒã¿ãŒãã®åºå£ã«ãããæçãã®é£è¡çµè·¯ã¯ç¢å°ã§ã¯ãªããã©ãã³æåã
Y ãã«äŒŒãŠããŸããã ã©ããããç¹å®ã®åœ¹å²ã¯ãçŽ ç²åã®åŽ©å£ã¹ããŒã ãšã®é¡äŒŒæ§ã«ãã£ãŠæããããã ããã©ã°ã¡ã³ããã¯ãã«ãŒã«ã®å
ã®ããŒãžã§ã³ã®ããã«1ã€ã®ã»ã«ãç§»åããŸããã§ãããããé¡é¢ãã«åŸã£ãŠç§»åããŸããã ããã«ããã®ãããªç§»åã¯ãããã¯ããã®ãã¯ããã«ç°¡åã§ããã é害ç©ïŒç Žçã®éªéã«ãªã£ãããããŒãäžã«10åã®ããŒã¹ââããã£ãããããªã©ïŒã¯ãç§»å
ã§ããªããšè§£éãããŸããã ã«ãŒã«ã®å
ã®ããŒãžã§ã³ã§ã¯ãå
¥åããéäžã§æ°åãèšå®ããããšã«ãã£ãŠã®ã¿ã
åå·¥äŒè°æ ãããããã¯ã§ããŸãã
ã
ç Žæããé»è©± ãã®å¥ã®ãªã³ã¯ã¯ã
ããããªãŒèªèº«ã§ããã ãã§ã€ã¹ã®èª¬æã®äžã§ã圌ã¯ãæç²ãè¡ã£ã人ç©ãïŒ
ãã§ãã«ãŒãšã®é¡æšã«ãã£ãŠïŒå奪åããæš©å©ãæã£ãŠãããšè¿°ã¹ãã
å
ã®ãœãŒã¹ã«ã¯ããã«ã€ããŠã®èšèã¯ãããŸããã§ããïŒèŠªæãªã
ã²ã¹ãã¯åœŒã«éç¥ããããšã«å€±æããŸããã§ããïŒãããã®ç¬éãç§ã¯ããã«æ³šæãæããŸããã§ããã ç§ã¯èšããªããã°ãªããªããããã§ã€ã¹ããšããã§ãã«ãŒãã亀差ããããšããã¢ã€ãã¢ã¯ãã§ã«å€ãã®çåãæèµ·ããã ãªãã¬ãŒã¹èŠåã
ãã³ãã³ã°ã«æ¡åŒµããå¿
èŠããããŸããïŒ å³ãåå²ããŠåŸããããæçãã«ïŒ åãã©ã°ã¡ã³ãããã£ããã£ãå®è¡ããå Žåã¯ã©ãããã°ããã§ããïŒ
ãã³ãã³ã°ã¯ã©ãã§ããïŒ ããããç§ãã¡ãèªåã§åµé ããããšãã§ãããããªå°é£ã¯ãããŸããïŒ ç§ã¯ç±å¿ã«ä»äºã«åãæãããŸãã...
ããã¥ã¢ã«æ¥æ²¡ãã¡ããããŸã第äžã«ã
ãã©ããã®ãããªã²ãŒã ã«ZoGã§äœ¿çšãããéšåç§»åã¡ã«ããºã ã䜿çšããããšããŸããã
ããæè¿ã§ã¯ãéåžžã«
é£ããã²ãŒã ãäœæããéçšã§ãç§ã«ãšã£ãŠéå®ããŸããã ä»ãŸã§ãAxiomã§äœ¿çšããå¿
èŠã¯ãããŸããã§ãããããã¹ãŠãåããŠçºçããŸãã éšåçãªåãã®æ¬è³ªã¯ãè€éãªè€åçãªåããå°ããªã¹ãããã«åå²ãããããšã§ãã ãã§ãã«ãŒã§ã¯ããã®ãããªéšåçãªåãã§çžæã®é§ãåãããšãå®è£
ãããŸãã åæã«ãã³ãŒã¹å®è¡ã®ãããããã¢ãŒããã䜿çšãããŸããããã«ããããã£ããã£
ãå®äºãã
ããã«æ¬¡ã®éšåç§»åã
å¿
èŠã§ããããšã瀺ãããšãã§ããŸãã
ZoGã§ã®è€åçãªåãã®å®è£
ã«æºè¶³ããŠããªãã®ã¯ãã®ããã§ãã ãŸããZoGãçè§£ããäžã§ãéšåçãªç§»åã¯ãåå¥ã®ç¬ç«ããã¢ã¯ã·ã§ã³ã«ãããŸããã åºæ¬çã«ãããã¯åããã¬ã€ã€ãŒã次ã
ã«å®è¡ããäžé£ã®åãã§ãã éšåçãªç§»åã®éã«äžéæ
å ±ã転éããããšã¯ã§ããŸããïŒ ã°ããŒãã«ãã©ã°ãšäœçœ®ãã©ã°ã¯ãåã¿ãŒã³ã®éå§æã«èªåçã«ãªã»ãããããŸãã ããã¯æªéçãªäžå¿«æã§ãããããã¯åé¡ã®äžéšã«ãããŸããïŒ ZoGã¯ãè€åç§»åãåäžã®ãšã³ãã£ãã£ãšèŠãªãããšã¯ã§ããŸããïŒç¹ã«ããã®ãããã
æå€§ãã£ãã㣠ãããŒãã³ãŒããªãã·ã§ã³ãå°å
¥ããŠã倿°æ±ºãã«ãŒã«ãå®è£
ããå¿
èŠããããŸããããã®ããŒãã³ãŒãã«é©åããªãä»ã®ã¢ã€ãã¢ã¯å®è£
ã§ããŸããïŒ
ããã¯ãClaude Leroyã«ãã£ãŠçºæããã
Manaã²ãŒã ã®äžéšã§ãã åäœçœ®ã®ããã·ã¥ã®æ°ã¯ããã£ã®ã¥ã¢ãç§»åã§ããã¹ãããæ°ã瀺ããŸãã æ£ç¢ºãªæ°ã®ã¹ããããå®è¡ããå¿
èŠãããããã®éãé転äžã«åŒãè¿ãããšã¯ã§ããŸããã ããã¯åŸ
ã¡äŒããç§ãã¡ãåŸ
ã£ãŠãããšããã§ãïŒ éåžžã«ãŸãã§ããã2ã€ã®ã¹ããããå®äºãã人ç©ããè¡ãæ¢ãŸããã«é¥ãããšããããŸãã 圌女ã¯åããç¶ããããšãã§ããŸããããªããªããä»ã®éšåã圌女ã«å¹²æžããåããå®äºããªããã°ãªããªãã®ã§ã次ã®äžæ©ãèžã¿åºã矩åãããããã§ãïŒ ãããŠãZoGã¯ãã®åé¡ã解決ããææ®µããŸã£ããæäŸããŠããŸããïŒ
ãã1ã€ã®å¶éã¯ãåã®éšåç§»åã«ãã£ãŠç§»åãããåãããŒã¹ã®ã¿ãè€åç§»åãç¶è¡ã§ããããšã§ãã ããã¯ãã§ãã«ãŒã§ãŸãã«èµ·ããããšã§ãããããã§ã€ã¹ãã§ã¯ç¶æ³ã¯ããå°ãè€éã§ãã ããšãã°ã
ãã³ãã³ã°ã䜿çšããŠãã£ããã£ãå®è¡ã§ããŸããã€ãŸããç§»åãå®è¡ãããã£ã®ã¥ã¢ã§ã¯ãããŸããã
åå·¥äŒè°æã§ã¯ ãããã«å°é£ã§ãã ã©ã¡ãã®æçãæµã®é§ã奪ãåããè«ççã«ã¯æ¬¡ã®éšåç§»åãå®è¡ããæš©å©ããããŸãã ãããŠã圌ãã¯äž¡æ¹ãšã
åå·¥äŒè°æã«å
¥ã£ã人ç©ã§ã¯ãããŸããïŒããŒãäžã®äººç©ã¯ãã¯ãååšããŸããïŒïŒ
åèªãæžãããã³ãŒããå¢ãããŸãã : val ( -- n ) piece-type mark - ; : mirror ( 'dir -- 'dir ) DUP ['] nw = IF DROP ['] sw ELSE DUP ['] ne = IF DROP ['] se ELSE DUP ['] sw = IF DROP ['] nw ELSE ['] se = verify ['] ne ENDIF ENDIF ENDIF ; : step ( 'dir -- 'dir ) DUP EXECUTE NOT IF mirror DUP EXECUTE verify ENDIF ; : bump ( 'dir -- ) BEGIN here E5 <> verify friend? here from <> AND IF piece-type SWAP step SWAP create-piece-type FALSE ELSE TRUE ENDIF UNTIL DROP ; : slide ( 'dir n -- ) alloc-path ! val SWAP BEGIN step SWAP 1- DUP 0= IF TRUE ELSE my-empty? verify SWAP FALSE ENDIF UNTIL DROP from here move + enemy? IF + cont-type partial-move-type + ENDIF bump enemy? IF alloc-all ELSE alloc-path @ 0= verify ENDIF add-move ;
æçµçã«ã¯ãæµã®ããŒã¹ãååŸãããšãã«ïŒ
è¡çªãè¡ãåã«ïŒ
éšåç§»åã¿ã€ãã®åŒã³åºãã远å ãã
ããšã«ãªããŸãã äžèšã®å¶éã¯åŒãç¶ãæå¹ã§ãã åããå§ãŸã£ã人ç©ã«ãã£ãŠãã£ããã£ãå®è¡ãããªãã£ãå ŽåïŒ
Chamberã§ã®
è¡çªãŸãã¯ãåè£ãã®çµæïŒãéšåçãªåããå®è¡ããããšã¯ã§ããŸãããããã®åœ¢åŒã§ããã®ã³ãŒãã¯è¯ã解決çã«ãªããŸãã 圌ã皌ãã å ŽåïŒ
ãã®rebusãè§£èªã§ãããã³ãŒããAxioméçºè
ã«éä¿¡ããŸããã ã°ã¬ãã°ã¯ãŸã åçããŠããŸãããã圌ã¯åé¡ã解決ããããšãæãã§ãããããã«åãçµãã§ããããã§ãã å¥åŠãªããšã¯ãAxiomã®éšåçãªåããæ¬åœã«æ©èœãããšããããšã§ãïŒ ããã«ãZRFã®æ©èœã倧å¹
ã«æ¡åŒµããŸãã ãããã¯ãã¹ãŠããã¥ã¡ã³ãã§è©³ãã説æãããŠãããããã€ãã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããŸãã ã©ããããç§ã¯ã¡ããã©éãæªãã£ãã
éšåçãªç§»åãæ©èœããªãã£ããããåé¡ã解決ããå¥ã®æ¹æ³ãæ¢ãå¿
èŠããããŸããã 1åã®åãã§ãã¹ãŠã®ã¢ã¯ã·ã§ã³ãå®äºã§ããªãå Žåã¯ãããã€ãã®åãã§ã¹ãã¬ããã詊ã¿ãããšãã§ããŸãïŒ ç§ã¯ãã§ã«ä»ã®ã²ãŒã ã§ãããè¡ã£ãŠãããããŒãäžã«ç¹å¥ãªäžå¯èŠã®äœçœ®ãäœæãããã®äžã«æã®ãã£ã®ã¥ã¢ãé
眮ããŸããã ããŒã¹ãçžæã®ãã®ã§ããå Žåããã¬ãŒã€ãŒã¯èªåã®ã¿ãŒã³ãã¹ãããããå¿
èŠãããããšãç¥ã£ãŠããŸããã ããã¯
å°ããªå€æŽã§ãããä»ã®äººãæ¹ãã€ããŸããã ç§»åãç¶ã
ãããŒã¹ã
ããŒã¯ããå¿
èŠãããïŒç§»åãéå§ããããŒã¹ã ãã§ãªãïŒãç§»åã®è»¢éé åºã
è€éã«ããªããã°ãªããŸããã§ããã å
šäœãšããŠãããã¯ããªãé¢åã§éåžžã«åä»ãªæ±ºå®ã§ããã
ç§ã®åªåã®çµæãã²ãŒã ã®éåžžã«ãªãªãžãã«ã®ä¿®æ£ãè¡ãããŸããããæ®å¿µãªãããªãªãžãã«ãšã®å
±éç¹ãå°ãªãããŸããã ããã«ãAIã®ãã€ã³ããªãžã§ã³ã¹ãã«ãã£ãŠããè€éãªã
ã¿ãŒã³ãªãŒããŒã®äœ¿çšãæã¡è² ããããŸããã 圌ã䜿çšãã
ããããã¯ã¹ã¢ã«ãŽãªãºã ã¯ããã®ãããªèªç±ã«éåžžã«åŠå®çã«åå¿ãããå
ç«ã
æ€çŽ¢ãšã³ãžã³ ïŒAxiom AIã®ä»£æ¿æ§æïŒã§ã¯ãæ·±ãæ€çŽ¢ãå®è£
ããããšã¯éåžžã«å°é£ã§ãã
ãã³ããçš
ããŠãç§ãã¡ã¯èªåã§å¯ŸæŠçžæã1ã€ïŒãŸãã¯2ã€ïŒåãããã®åŸãè¥ãæ¹ããé ã«æ®ãã®ãã€ã³ãã«å¿ããŠãã€ã³ããåé
ããŸãã ããããè¥ã人ç©ãè€æ°ããå Žåã¯ã©ãã§ããããïŒ ããšãã°ãã²ãŒã ã®æåã®æ®µéã§ã¯ãåãã¬ãŒã€ãŒã«ã¯2ã€ã®ã1ãããããŸãã 1ã5ãã€ã³ãã®é¡é¢ãæã€ä»»æã®æ°åãååŸãããšããã€ã³ãã®ååžã«2ã€ã®ãªãã·ã§ã³ãäžããããã©ã¡ããéžæãããã«ãã£ãŠã²ãŒã ã®ã³ãŒã¹ã倧ããå€ããå¯èœæ§ããããŸãã
åãçµã¿åããè«ããã§ã¯ãã»ãšãã©éãããè峿·±ãçµã¿åããã®åé¡ãçºçããŸãã ãã€ã³ããã©ã®ããã«ïŒããŒã¹ãååŸãããšãã«ïŒåé
ã§ããããçè§£ããããã«ã¯ãã²ãŒã ã«è¡šç€ºãããïŒãã¬ã€ã€ãŒã®1人ã®åŽã®ïŒæ°åã®ãã¹ãŠã®çµã¿åãããæ³åããå¿
èŠããããŸãã æ¬¡ã®3ã€ã®æ¡ä»¶ã®ã¿ããããŸãã
- åå³ã¯ã1ã6ãã€ã³ãã®é¡é¢ãæã€ããšãã§ããŸãã
- æ°åã®æ°ã¯10ãè¶
ããããšã¯ã§ããŸãã
- ãã€ã³ãã®åèšæ°ã¯åžžã«25ã§ã
ãã®åé¡ã«ã¯çŸããåæãœãªã¥ãŒã·ã§ã³ãããããšã¯ééããããŸããïŒããããèªè
ãæããŠãããã§ãããïŒããç§ã¯ãããæ¢ãå§ããŸããã§ããã ã¹ã¯ãªãããã³ã³ãã€ã«ããŠãæå®ãããæ¡ä»¶ãæºãã圢ç¶ã®ãã¹ãŠã®å¯èœãªã»ãããçæããŸããã ã»ããå
ã®æ°åã¯é¡é¢é ã«äžŠã¹ãããŸããããã¯ãååŸãããã€ã³ãããã®é åºã§ååžããããã§ãã
ã¹ã¯ãªãã my @d; my %s; sub out { my ($deep) = @_; for (my $i = 0; $i < $deep; $i++) { print "$d[$i]"; } print "\n"; } sub dice { my ($start, $deep, $sum) = @_; if ($sum == 25) { out($deep); } if ($deep < 10 && $sum < 25) { for (my $i = $start; $i <= 6; $i++) { $d[$deep] = $i; dice($i, $deep + 1, $sum + $i); } } } dice(1);
çµæ 1111111666 1111112566 1111113466 1111113556 1111114456 1111114555 1111122466 1111122556 1111123366 1111123456 1111123555 1111124446 1111124455 111112666 1111133356 1111133446 1111133455 1111134445 111113566 1111144444 111114466 111114556 111115555 1111222366 1111222456 1111222555 1111223356 1111223446 1111223455 1111224445 111122566 1111233346 1111233355 1111233445 1111234444 111123466 111123556 111124456 111124555 1111333336 1111333345 1111333444 111133366 111133456 111133555 111134446 111134455 11113666 111144445 11114566 11115556 1112222266 1112222356 1112222446 1112222455 1112223346 1112223355 1112223445 1112224444 111222466 111222556 1112233336 1112233345 1112233444 111223366 111223456 111223555 111224446 111224455 11122666 1112333335 1112333344 111233356 111233446 111233455 111234445 11123566 111244444 11124466 11124556 11125555 1113333334 111333346 111333355 111333445 111334444 11133466 11133556 11134456 11134555 11144446 11144455 1114666 1115566 1122222256 1122222346 1122222355 1122222445 1122223336 1122223345 1122223444 112222366 112222456 112222555 1122233335 1122233344 112223356 112223446 112223455 112224445 11222566 1122333334 112233346 112233355 112233445 112234444 11223466 11223556 11224456 11224555 1123333333 112333336 112333345 112333444 11233366 11233456 11233555 11234446 11234455 1123666 11244445 1124566 1125556 113333335 113333344 11333356 11333446 11333455 11334445 1133566 11344444 1134466 1134556 1135555 1144456 1144555 115666 1222222246 1222222255 1222222336 1222222345 1222222444 122222266 1222223335 1222223344 122222356 122222446 122222455 1222233334 122223346 122223355 122223445 122224444 12222466 12222556 1222333333 122233336 122233345 122233444 12223366 12223456 12223555 12224446 12224455 1222666 122333335 122333344 12233356 12233446 12233455 12234445 1223566 12244444 1224466 1224556 1225555 123333334 12333346 12333355 12333445 12334444 1233466 1233556 1234456 1234555 1244446 1244455 124666 125566 133333333 13333336 13333345 13333444 1333366 1333456 1333555 1334446 1334455 133666 1344445 134566 135556 1444444 144466 144556 145555 16666 2222222236 2222222245 2222222335 2222222344 222222256 2222223334 222222346 222222355 222222445 2222233333 222223336 222223345 222223444 22222366 22222456 22222555 222233335 222233344 22223356 22223446 22223455 22224445 2222566 222333334 22233346 22233355 22233445 22234444 2223466 2223556 2224456 2224555 223333333 22333336 22333345 22333444 2233366 2233456 2233555 2234446 2234455 223666 2244445 224566 225556 23333335 23333344 2333356 2333446 2333455 2334445 233566 2344444 234466 234556 235555 244456 244555 25666 33333334 3333346 3333355 3333445 3334444 333466 333556 334456 334555 344446 344455 34666 35566 444445 44566 45556 55555
294ã®å¯èœãªãªãã·ã§ã³ã®ã¿ã ããããããã¯æŠãã®ååã«éããŸããã ã¬ã€ã¢ãŠãèªäœã§ã¯ãªããã©ã®ããã«ããŠããããã®å³åœ¢ã«ãã€ã³ããé
眮ã§ãããã«èå³ããããŸãã è©³çŽ°ãªæšè«ã§èªè
ãéå±ãããããšã¯ãããã¹ã¯ãªãããšãã®äœæ¥ã®æçµçµæã®ã¿ã瀺ããŸãã
ã¹ã¯ãªãã my @d; my %s; sub out { my ($deep) = @_; for (my $i = 0; $i < $deep; $i++) { print "$d[$i]"; } print "\n"; } sub proc { my ($x, $r, $m) = @_; if ($x == 0) { $s{$r}++; } else { my $n = $x % 10; for (my $i = 0; $i < $n; $i++) { proc(int($x / 10), $r + $i * $m, $m * 10); } } } sub alloc { my ($x, $deep, $res) = @_; if ($x == 0) { proc($res, 0, 1); } else { my $vl = 6; for (my $i = 0; $i < $deep; $i++) { if ($d[$i] < $vl) { $vl = $d[$i]; } } if ($vl < 6) { my $cn = 0; my $ix = 0; for (my $i = 0; $i < $deep; $i++) { if ($d[$i] == $vl) { $cn++; $ix = $i; } } my $y = $d[$ix]; $d[$ix] = 6; $x -= 6 - $vl; if ($x < 0) { $x = 0; } alloc($x, $deep, $res * 10 + $cn); $d[$ix] = $y; } } } sub dice { my ($start, $deep, $sum) = @_; if ($sum == 25) { for (my $i = 0; $i < $deep; $i++) { my $x = $d[$i]; $d[$i] = 6; alloc($x, $deep, 0); $d[$i] = $x; } } if ($deep < 10 && $sum < 25) { for (my $i = $start; $i <= 6; $i++) { $d[$deep] = $i; dice($i, $deep + 1, $sum + $i); } } } dice(1, 0, 0); my $all; foreach my $k (sort { $s{$a} <=> $s{$b} } keys %s) { $all += $s{$k}; print "$k\t=> $s{$k}\n"; } print "\n$all\n";
çµæ 102 => 1 331 => 1 200 => 1 ... 22 => 93 5 => 106 21 => 152 20 => 152 11 => 152 10 => 220 4 => 259 3 => 584 2 => 1061 1 => 1677 0 => 2407 7954
â , . , «20» , ( 0), , . , , «» , «3333445» (, «» «»). , , «» , 30% (2407/7954) , , 64%!
ç¹ã«ãã®ãããªå ŽåãZoGã¯è峿·±ãã€ã³ã¿ãŒãã§ãŒã¹æ©èœãæäŸããŸããç§»åãå®è¡ãããšããã¬ãŒã€ãŒã¯éå§ãšçµäºã®2ã€ã®ãã£ãŒã«ãã瀺ããŸããéžæãããã£ãŒã«ãã®ãã¢ãã€ãªãããã€ãã®ç°ãªãå¯èœãªåããããå Žåããã¬ã€ã€ãŒã«ã¯éžæããæ©äŒãäžããããŸãïŒãããã¢ããã¡ãã¥ãŒïŒãæãåçŽãªäŸã¯ããã§ã¹ã®ããŒã³ã®å€æã§ããæåŸã®æ°Žå¹³ã«å°éãããšãããŒã³ã¯ä»»æã®ããŒã¹ïŒãã·ã§ããããã¯ã€ãŒã³ãŸã§ïŒã«å€ããå¯èœæ§ãããããã¬ã€ã€ãŒãéžæããå¿
èŠããããŸãããã®ãªãã·ã§ã³ã䜿çšããããšã«ããŸããããã³ãŒã«ãšã°ã¬ãŒãã«ã«ïŒâ , ZoG , , ZSG-. , .
, , , . , ( ) 10, . . ( , ), . , . 0, .
VARIABLE alloc-path VARIABLE alloc-val VARIABLE alloc-target VARIABLE alloc-pos : alloc-to ( pos -- ) DUP add-pos DUP val-at 6 SWAP - DUP alloc-val @ > IF DROP alloc-val @ 0 alloc-val ! ELSE alloc-val @ OVER - alloc-val ! ENDIF my-next-player ROT ROT OVER piece-type-at + SWAP create-player-piece-type-at ; : alloc ( -- ) 6 0 BEGIN DUP enemy-at? OVER not-in-pos? AND IF SWAP OVER val-at MIN SWAP ENDIF 1+ DUP A9 > UNTIL DROP DUP 6 < IF alloc-target ! alloc-path @ 10 MOD alloc-pos ! 0 BEGIN DUP enemy-at? OVER not-in-pos? AND IF DUP val-at alloc-target @ = IF alloc-pos @ 0= IF DUP alloc-to 0 alloc-target ! DROP A9 ELSE alloc-pos -- ENDIF ENDIF ENDIF 1+ DUP A9 > UNTIL DROP alloc-target @ 0= verify alloc-val @ 0> IF alloc-path @ 10 / alloc-path ! RECURSE ENDIF ELSE DROP ENDIF ; : alloc-all ( -- ) 0 pos-count ! here add-pos alloc ;
alloc-path « ». , 105 , , . , 4 . , :
: eat ( 'dir n -- ) LITE-VERSION NOT IF check-pass check-neg ENDIF + alloc-path ! val SWAP BEGIN step SWAP 1- DUP 0= IF TRUE ELSE my-empty? verify SWAP FALSE ENDIF UNTIL DROP from here move LITE-VERSION NOT enemy? AND IF from piece-type-at mark - ABS mark SWAP - create-piece-type ENDIF bump DROP here E5 <> verify enemy? verify LITE-VERSION NOT IF clear-neg set-pass ENDIF + val alloc-val ! + alloc-all add-move ; : eat-nw-0 ( -- ) ['] nw 0 eat ; : eat-sw-0 ( -- ) ['] sw 0 eat ; : eat-ne-0 ( -- ) ['] ne 0 eat ; : eat-se-0 ( -- ) ['] se 0 eat ; : eat-w-0 ( -- ) ['] w 0 eat ; : eat-e-0 ( -- ) ['] e 0 eat ; : eat-nw-1 ( -- ) ['] nw 1 eat ; : eat-sw-1 ( -- ) ['] sw 1 eat ; : eat-ne-1 ( -- ) ['] ne 1 eat ; : eat-se-1 ( -- ) ['] se 1 eat ; : eat-w-1 ( -- ) ['] w 1 eat ; : eat-e-1 ( -- ) ['] e 1 eat ; : eat-nw-2 ( -- ) ['] nw 2 eat ; : eat-sw-2 ( -- ) ['] sw 2 eat ; : eat-ne-2 ( -- ) ['] ne 2 eat ; : eat-se-2 ( -- ) ['] se 2 eat ; : eat-w-2 ( -- ) ['] w 2 eat ; : eat-e-2 ( -- ) ['] e 2 eat ; : eat-nw-3 ( -- ) ['] nw 3 eat ; : eat-sw-3 ( -- ) ['] sw 3 eat ; : eat-ne-3 ( -- ) ['] ne 3 eat ; : eat-se-3 ( -- ) ['] se 3 eat ; : eat-w-3 ( -- ) ['] w 3 eat ; : eat-e-3 ( -- ) ['] e 3 eat ; {moves p-moves {move} split-nw-0 {move-type} normal-priority {move} split-ne-0 {move-type} normal-priority {move} split-sw-0 {move-type} normal-priority {move} split-se-0 {move-type} normal-priority {move} split-w-0 {move-type} normal-priority {move} split-e-0 {move-type} normal-priority {move} split-nw-1 {move-type} normal-priority {move} split-ne-1 {move-type} normal-priority {move} split-sw-1 {move-type} normal-priority {move} split-se-1 {move-type} normal-priority {move} split-w-1 {move-type} normal-priority {move} split-e-1 {move-type} normal-priority + {move} eat-nw-0 {move-type} normal-priority + {move} eat-ne-0 {move-type} normal-priority + {move} eat-sw-0 {move-type} normal-priority + {move} eat-se-0 {move-type} normal-priority + {move} eat-w-0 {move-type} normal-priority + {move} eat-e-0 {move-type} normal-priority + {move} eat-nw-1 {move-type} normal-priority + {move} eat-ne-1 {move-type} normal-priority + {move} eat-sw-1 {move-type} normal-priority + {move} eat-se-1 {move-type} normal-priority + {move} eat-w-1 {move-type} normal-priority + {move} eat-e-1 {move-type} normal-priority + {move} eat-nw-2 {move-type} normal-priority + {move} eat-ne-2 {move-type} normal-priority + {move} eat-sw-2 {move-type} normal-priority + {move} eat-se-2 {move-type} normal-priority + {move} eat-w-2 {move-type} normal-priority + {move} eat-e-2 {move-type} normal-priority + {move} eat-nw-3 {move-type} normal-priority + {move} eat-ne-3 {move-type} normal-priority + {move} eat-sw-3 {move-type} normal-priority + {move} eat-se-3 {move-type} normal-priority + {move} eat-w-3 {move-type} normal-priority + {move} eat-e-3 {move-type} normal-priority {move} slide-nw {move-type} normal-priority {move} slide-ne {move-type} normal-priority {move} slide-sw {move-type} normal-priority {move} slide-se {move-type} normal-priority {move} slide-w {move-type} normal-priority {move} slide-e {move-type} normal-priority -( {move} exchange-1-nw {move-type} normal-priority - {move} exchange-1-ne {move-type} normal-priority - {move} exchange-1-sw {move-type} normal-priority - {move} exchange-1-se {move-type} normal-priority - {move} exchange-1-w {move-type} normal-priority - {move} exchange-1-e {move-type} normal-priority - {move} exchange-2-nw {move-type} normal-priority - {move} exchange-2-ne {move-type} normal-priority - {move} exchange-2-sw {move-type} normal-priority - {move} exchange-2-se {move-type} normal-priority - {move} exchange-2-w {move-type} normal-priority - {move} exchange-2-e {move-type} normal-priority - {move} exchange-3-nw {move-type} normal-priority - {move} exchange-3-ne {move-type} normal-priority - {move} exchange-3-sw {move-type} normal-priority - {move} exchange-3-se {move-type} normal-priority - {move} exchange-3-w {move-type} normal-priority - {move} exchange-3-e {move-type} normal-priority - {move} exchange-4-nw {move-type} normal-priority - {move} exchange-4-ne {move-type} normal-priority - {move} exchange-4-sw {move-type} normal-priority - {move} exchange-4-se {move-type} normal-priority - {move} exchange-4-w {move-type} normal-priority - {move} exchange-4-e {move-type} normal-priority - {move} exchange-5-nw {move-type} normal-priority - {move} exchange-5-ne {move-type} normal-priority - {move} exchange-5-sw {move-type} normal-priority - {move} exchange-5-se {move-type} normal-priority - {move} exchange-5-w {move-type} normal-priority - {move} exchange-5-e {move-type} normal-priority ) moves}
, Axiom ( ). ? ! , . (
exchange -), . , .
å³å¯ã«èšãã°ãããã¯å®å
šã«æ£ãã解決çã§ã¯ãããŸããã ããã§ã€ã¹ãã®ã«ãŒã«ã«ããã°ããã€ã³ããåé
ããããšã¯ãåãããããã¬ã€ã€ãŒã§ã¯ãªãã圌ã®å¯ŸæŠçžæã§ãªããã°ãªããŸããã ZoGã䜿çšããŠãããéæããæ¹æ³ã¯ããããŸããããéåžžã«ç°¡åãªåé¿çããããŸãã ZoGã€ã³ã¿ãŒãã§ãŒã¹ã¯ãããŒããç·šéããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãããããã¢ããã¡ãã¥ãŒã³ãã³ãã䜿çšããŠããã¬ãŒã€ãŒã¯ããŒãäžã®ããŒã¹ãåé€ããããå¥ã®ããŒã¹ãäœæãããã§ããŸãããã®æ©èœã¯ãããã°ã«äžå¯æ¬ ã§ããããã䜿çšããŸããäžè¬ã«ããã€ã³ãã®èªåé
åžãæ°ã«å
¥ããªãã£ããã¬ã€ã€ãŒã¯ãç°¡åã«æåã§ãã€ã³ããåé
åžã§ããŸãïŒã ãŒãã®ã·ãŒã±ã³ã¹ã«éåããããšã¯ãããŸããïŒãæå°éã®æ³šæã®ã¿ãå®ã£ãŠãã ãããç·šéããã»ã¹äžããã¬ãŒã€ãŒã®1人ã5åæªæºã®å Žåã¯èš±å¯ããªãã§ãã ããããã®å Žåã圌ã¯ããã«æåãšèªããããã²ãŒã ã¯åæ¢ããŸãã... 1ã€ã«æ°ããŸãïŒ
é£ã¹ããããã€ã³ãã®ãå¯å€ãååžã®ã¢ã€ãã¢ã倱æããã®ã§ãç§ã¯ZRFãéããŠã²ãŒã ã®éçºã«æ»ããŸãããååãšããŠãAxiomã®å®è£
ãæ©èœããŸããããAIããŸã ãããŸããïŒAxiomã¯æšæºã®ZoG-ovskyã䜿çšã§ããŸããïŒãäžè¬çã«ããã®ã¿ã¹ã¯ã¯è©äŸ¡é¢æ°ã®æ£ããã³ãŒãã£ã³ã°ã«èŠçŽãããŸãïŒéº»é
çšã®ãã«ã¹ã¿ã ãšã³ãžã³ãããããŸãïŒãããããç°¡åã§ã¯ãããŸããïŒãããã«ãããChaseã®ç§»åæ§ãšç©è³ªåæ¯ãèæ
®ã«å
¥ããæšæºçãªè©äŸ¡é¢æ°ã¯æè¯ã§ãããšã¯èšŒæãããŸããã§ãããããã€ãã®è©³çް, , :
: OnEvaluate (
â
mobility . â , . , ,
â , , :
: mobility ( -- score ) move-count current-player TRUE 0 $GenerateMoves move-count - $DeallocateMoves ;
, «» « », . â , . , , Axiom :
{pieces {piece} p1 {moves} p-moves 6 {value} {piece} p2 {moves} p-moves 5 {value} {piece} p3 {moves} p-moves 4 {value} {piece} p4 {moves} p-moves 3 {value} {piece} p5 {moves} p-moves 2 {value} {piece} p6 {moves} p-moves 1 {value} pieces}
«» , . , , ! AI . , . , / , ( , ),
Chamber ., , ZRF. AI ZoG- , .
äºçްãªããšã¯1ã€ãããããŸããã§ãã-ZRFã«ã¯ç®è¡æŒç®ããŸã£ãããããŸããã§ããïŒãã§ã€ã¹ã¯ãåžžã«æ°ããªããã°ãªããªãã²ãŒã ã§ãïŒå Žåã«ãã£ãŠã¯ãå€ã«åºãããšãã§ããŸããããšãã°ããã¹ãŠã®æ°åã§ãã€ã³ãïŒæå€§25ïŒãã«ãŠã³ããã代ããã«ããã¬ãŒã€ãŒã®æåã倿ãããšãã«ãæ°åã®æ°ã®æšæºãã§ãã¯ã«å¶éããããšãã§ããŸãã 25ãã€ã³ãã¯æããã«4ã€ã®ãã£ã®ã¥ã¢ã«çœ®ãããšã¯äžå¯èœã§ãããããã«å€ãã®ãã£ã®ã¥ã¢ã«åé
ããããšã¯åžžã«å¯èœã§ãããããã²ãŒã ãå®äºããããã®æ¬¡ã®æ¡ä»¶ã§ååã§ãã (loss-condition (Red White) (pieces-remaining 4) ) (loss-condition (Red White) (pieces-remaining 3) )
ã²ãŒã ã§ã¯ã1ã€ã®åãã§2ã€ã®ããŒã¹ãåæã«åãããå ŽåïŒãã£ã³ããŒå
ã§ããŒã¹ãåå²ããåŸïŒã«ç¶æ³ãçºçããå¯èœæ§ãããããã2çªç®ã®ãã§ãã¯ãå¿
èŠã§ããæ®å¿µãªãããæŽæ°æŒç®ãå¿
èŠãªåé¡ã1ã€ãããŸãïŒãã¡ãããããã¯ãé£ã¹ãããããã€ã³ãã®ååžã§ããZRFã§ã¯ãéžæã§ããããã€ãã®å¯èœãªé
ä¿¡ãªãã·ã§ã³ãæäŸããããšã¯ããŠããŸãããäžçªè¥ããã®ããå§ããŠããã¹ãŠã®æ°åã調ã¹ãŠããŸã ååžããŠããªããã€ã³ããæ£ãã远å ããã ãã§ããããã«ç§ããããããæ¹æ³ããããŸãïŒäž»ã«ã¹ãã£ãã¯ãã( ). ZRF- , ( ). ( ) . , «», ( ) :
/ (define clear (set-flag $1-8 false) (set-flag $1-4 false) (set-flag $1-2 false) (set-flag $1-1 false) ) (define inc (if (flag? $1-1) (set-flag $1-1 false) (if (flag? $1-2) (set-flag $1-2 false) (if (flag? $1-4) (set-flag $1-4 false) (if (flag? $1-8) (set-flag $1-8 false) else (set-flag $1-8 true) ) else (set-flag $1-4 true) ) else (set-flag $1-2 true) ) else (set-flag $1-1 true) ) ) (define dec (if (not-flag? $1-1) (set-flag $1-1 true) (if (not-flag? $1-2) (set-flag $1-2 true) (if (not-flag? $1-4) (set-flag $1-4 true) (if (not-flag? $1-8) (set-flag $1-8 true) else (set-flag $1-8 false) ) else (set-flag $1-4 false) ) else (set-flag $1-2 false) ) else (set-flag $1-1 false) ) )
â :
! (define not-10? (or (not-flag? $1-8) (flag? $1-4) (not-flag? $1-2) (flag? $1-1) ) ) (define calc (clear x) mark START (while (on-board? next) next (if friend? (inc x) ) ) (verify (not-10? x)) back )
, , . , . . ZRF â , - !
åæå (define init (clear $1) (if (or (piece? p1) (piece? p3) (piece? p5)) (set-flag $1-1 true) ) (if (or (piece? p2) (piece? p3) (piece? p6)) (set-flag $1-2 true) ) (if (or (piece? p4) (piece? p5) (piece? p6)) (set-flag $1-4 true) ) )
, . ( , ), , , , «». ! :
- (define sum (while (not-0? $2) (inc $1) (dec $2) ) )
, . «» ? , , ?
(define try-alloc (if (is-0? x) (inc y) else (dec x) ) ) (define set-piece (if (am-i-red?) (create White $1) else (create Red $1) ) ) (define alloc-to (clear y) (if (piece? p1) (try-alloc) (try-alloc) (try-alloc) (try-alloc) (try-alloc) ) (if (piece? p2) (try-alloc) (try-alloc) (try-alloc) (try-alloc) ) (if (piece? p3) (try-alloc) (try-alloc) (try-alloc) ) (if (piece? p4) (try-alloc) (try-alloc) ) (if (piece? p5) (try-alloc) ) (if (is-0? y) (set-piece p6) else (if (is-1? y) (set-piece p5) else (if (is-2? y) (set-piece p4) else (if (is-3? y) (set-piece p3) else (set-piece p2) ) ) ) ) ) (define alloc (if (not-0? x) mark ST (while (on-board? next) next (if (and enemy? (piece? $1) (not-0? x) (not-position-flag? is-captured?)) (alloc-to) ) ) back ) ) (define alloc-all (alloc p1) (alloc p2) (alloc p3) (alloc p4) (alloc p5) )
alloc-all ,
x ( â 12, ).
x 0, ,
p1 p5 ( , , ).
alloc-to . . , (
p1 5 .
p2 â 4 ..). ,
x , â
y . ( 4), , .
ãã®çµæããã¹ãŠã®ãç°åžžãªç®è¡ãã¯éåžžã«èš±å®¹å¯èœãªããã©ãŒãã³ã¹ã§åäœããAIã¯ãŸã£ãã圱é¿ãåããŸããããã®ãããªå®éšã¯åžžã«æåãããšã¯éããªããããšãã°ããã®ããŒãžã§ã³ã®é»åïŒZRFã«ã¯ç®è¡æŒç®ããªãããšãæãåºããŸãïŒã¯ãåè«ãšããèŠãªããŸããããã®ããã©ãŒãã³ã¹ã¯ã²ã©ãã§ãïŒããããç§ãã¡ã®å Žåããç°åžžãªããã°ã©ãã³ã°ããæåã®è§£æ±ºçã§ããããšã蚌æãããŸããã