æ°Žã®äžã«å°ç³ãæãããããã圢æããåãèŠãŠãã ããã
ããã§ãªããã°ããã®ãããªã¹ããŒã¯ç©ºã®æ¥œãã¿ã«ãªããŸãã
ã³ãºãã»ãã«ãã³ã ã çæ³ã®æå® ã
ãã®ã²ãŒã ã¯æ¬åœã«
æªå®æã®å»ºç©ã§ãã
6æã«äœæ¥ãéå§ããŸããã ç§ã¯æ¯æ¥ç Žãããšã¯èšããŸãããã圌女ã¯ç§ã«å€ãã®è¡ãã ãã«ããŸããã ä»æ¥ãããã¯
Axiomã§ã®ç§ã®æãé£ãããããžã§ã¯ãã§ãã ïŒéåžžã«éèŠãªïŒã³ãŒã
ã«é¢ããŠã¯ ã
MarGoã¯ãããã
Rhythm Machiaã«å¹æµããŸãã
ãã®ã²ãŒã ã®ç¹å¥ãªãšããã¯äœã§ããïŒ åœŒå¥³ã®ããã«ãããªã«èŠããããšã¯äŸ¡å€ããããŸãããïŒ ç§ã¯ããªãã«èšããŸãããããŠããªãã¯å€æããŸãã
è¡šé¢ã®é¡äŒŒæ§
ãå®ç§ãªã
Guoã®è©Šã¿ã¯ç¹°ãè¿ã
è¡ãã
ãŠããŸãããæåããããšã¯ãã£ãã«ãããŸããã ç§ã®æèŠã§ã¯ãMarGoã¯éåžžã«ãŸãã§ãïŒ ãã®ã²ãŒã ã§é
äºãããäž»ãªãã®ã¯ãGo
ã®ã»ããã®
äžã«ãããšããäºå®ã§ãã äžèŠã·ã³ãã«ãªGoã®ã«ãŒã«ããäºæ³å€ã«è€éãªæŠè¡çæ§æã«ã©ã®ããã«ã€ãªãããã«ã€ããŠã¯ãã§ã«
æžããŸããã ç¹°ãè¿ãã¯ããŸããããGoã«ã€ããŠæžãããã¹ãŠãMarGoã«ãåœãŠã¯ãŸããšã ãèšããŸãïŒé£è¡æ©ãè¶
ããªãéãïŒã ãã®ãããããšãã°ãæåãªã
ã©ãã ãã¯æ¬¡ã®ããã«ãªããŸã-3ã€ãååŸããããã®1ã€ã®ç³ã®æãåçŽãªç ç²è
ïŒ

ãšããã§ãèšãäžèšã®äœçœ®ã§ã®ãã©ãããã®äœ¿çšã¯å®å
šã«åé·ã§ãïŒ é»äººã¯ãã§ã«éåœã«ãããŸã;ãããããé£ã¹ããå¿
èŠã¯ãããŸããã ãããããªãMarGoã¯ãã®ãããªå°ããªããŒãã䜿çšããŠããã®ã§ããããïŒ äž»ãªçç±ã¯ãã²ãŒã ãé£è¡æ©ã§ã¯ãªããããªã¥ãŒã ã§ãããšããããšã§ãã ãã¬ã€ã€ãŒã¯ãã©ããããæ§ç¯ãã誰ãã19x19ããŒãã§ãããè¡ãå¿èãæã€ããšã¯ã»ãšãã©ãããŸããã MarGoã®æšæº9x9ããŒãGoã¯ãäž»ã«åå¿è
ã®ãã¬ãŒãã³ã°ã«äœ¿çšãããŸãïŒ
ãã§ã«9x9ããŒãã䜿çšããŠãããšãã«ãã¡ã¢ãªäžè¶³ã®åé¡ã«ééãããããããã¯å€§ããªå®å¿ã§ããã é
åããäœåãªè¡ãåé€ããŠããã®äœ¿çšã
æé©åããå¿
èŠããããŸããã ãã®ç¹ã¯éåžžã«æçœã§ãããã©ããããæ§ç¯ãããšã3次å
ããŒãã®ã»ãšãã©ã®ãã£ãŒã«ãã«å³åœ¢ãé
眮ã§ããŸããã
ã°ã«ãŒãã®ã¹ããŒã¿ã¹ã決å®ãããšããããŒãã®ãã¬ãŒã³ã«ãã空ã®ã¢ã€ãã ã®ã¿ãéèŠã§ãã ãçããŠãããã°ã«ãŒãã®åç³ã¯ããããã®ãã€ã³ãã®å°ãªããšã1ã€ïŒã
ãã¡ ããšåŒã°ããïŒãšæ¥ç¶ãããŠããå¿
èŠããããŸãïŒçŽæ¥ãŸãã¯ä»ã®ç³ãä»ããŠïŒã æåŸã®
ãã ãéãããããšããã«ãã°ã«ãŒãã¯æ»ãã§ããŸããããŒãããåé€ãããŸãã
ã©ã®ããã«æ©èœããŸããïŒGoæ©èœã®åºç€ã¯ãç°å¢ã«èœã¡ãç³ãé€å»ããã¡ã«ããºã ã§ãã ãšãŠãç°¡åã«æ©èœããŸãã ãããããç¡æ¡ä»¶ã«çããŠããç³ãèå¥ããå¿
èŠããããŸãïŒããŒãäžã®ç©ºã®ã¢ã€ãã ã«é£æ¥ããŠããŸãïŒã 次ã«ããçããŠãããç³ã®ã°ã«ãŒãã«ã以åã«è¿œå ããç³ã«é£æ¥ãããã¹ãŠã®ç³ïŒåãè²ã®ç³ïŒãè¿œå ããå¿
èŠããããŸãã
ZoG / Axiomã§ã®ã ãŒãã®å®è¡ã®æããªã»ãã³ãã£ã¯ã¹ããªããã°ããã¹ãŠãããŸãããã§ãããã 移åã®æ§ç¯å
šäœãéããŠãããŒãã®å
容ã¯èšç®ãéå§ãããæç¹ãšåãã«èŠããŸãïŒç§»åã«ãã£ãŠè¡ããããã¹ãŠã®å€æŽã¯ããã®å®äºæã«ã®ã¿è¡šç€ºãããŸãïŒã ç°¡åãªã±ãŒã¹ã§ã¯ããããšæŠãããšãã§ããŸãããç§ãã¡ã®ã²ãŒã ã¯æ±ºããŠç°¡åã§ã¯ãããŸããã§ããïŒ 3次å
ã®é¯èŠãäœæãããšããäºå®ã«ãããããŒãã«1ã€ã®ããŒã¹ã ããè¿œå ãããšãå€æ°ã®ã¿ã€ã«ãã£ã®ã¥ã¢ã移åããå¯èœæ§ããããŸãã ããããã¹ãŠã®ãç¹æ®ãªã±ãŒã¹ããç¹å¥ãªæ¹æ³ã§åŠçããããšã¯å®å
šã«éçŸå®çã§ãïŒ ããŒããžã®æ°ããããŒã¹ã®è¿œå ãšããã®åŸã®ã殺ããããããŒã¹ã®åé€ãåå²ããå¿
èŠããããŸããã
{players {player} W {player} B {player} ?C {random} players} {turn-order {turn} W {of-type} normal {turn} ?C {for-player} W {of-type} clean {turn} B {of-type} normal {turn} ?C {for-player} B {of-type} clean turn-order}
ãã¯ãªãŒãã³ã°ããèªåçã«å®è¡ããã«ã¯ããã£ã®ã¥ã¢ã®ææè
ã«ä»£ãã£ãŠè¡åããå¥ã®ãã¬ãŒã€ãŒãäœæããå¿
èŠããããŸããã ãã®åãã¯ãããŒãã®æªäœ¿çšãã£ãŒã«ãã®1ã€ã«ç¹å¥ãªïŒèŠããªãïŒå³åœ¢ãé
眮ããããšã§ãïŒ
æé©åã«ããããããããã®ãããªãã£ãŒã«ãã¯å€æ°ãããŸãïŒã ãæ»ãã ãã°ã«ãŒããåé€ãããã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ããã®ç§»åã®ãå¯äœçšããšããŠå®è¡ãããŸãã
: drop-m ( -- ) here a1 = verify ( ? ) drop ( ) ['] my-enemy? ( ) init-alive ( ) proceed-alive ( ) capture-all ( ) captured-tiles @ 0= IF ( ) ['] my-friend? ( ) init-alive proceed-alive capture-all ENDIF add-move ( ) ;
ãã®ã³ãŒãã¯ã2ã€ã®åé¡ãåæã«è§£æ±ºããŸãã
- æåŸã®ç§»åã§æ®ºããããã¹ãŠã®æµã°ã«ãŒããåé€ãã
- 移åãèªæ®ºã§ãããæµã殺ãããšãã§ããªãå Žåãå奜ã°ã«ãŒãã®èªæ®º
詳现 TOTAL [] alive[] ( ) VARIABLE alive-count ( ) : not-alive? ( -- ? ) ( ) TRUE 0 BEGIN DUP alive-count @ < IF DUP alive[] @ here = IF SWAP DROP FALSE SWAP TRUE ELSE 1+ FALSE ENDIF ELSE TRUE ENDIF UNTIL DROP ; : add-alive ( -- ) ( ) not-alive? alive-count @ TOTAL < AND IF ( ! ) here alive-count @ alive[] ! alive-count ++ ENDIF ; : check-alive ( 'op 'dir -- ) ( ) EXECUTE IF EXECUTE IF add-alive ENDIF ELSE DROP ENDIF ; : init-alive ( 'op -- 'op ) ( ) 0 alive-count ! 0 BEGIN ( ! ) DUP empty-at? IF DUP to OVER ['] n check-alive DUP to OVER ['] s check-alive DUP to OVER ['] w check-alive DUP to OVER ['] e check-alive ENDIF 1+ DUP PLANE >= UNTIL DROP ; : proceed-alive ( 'op -- 'op ) ( "" ) 0 BEGIN ( ) DUP alive-count @ < IF DUP alive[] @ to OVER ['] n check-alive DUP alive[] @ to OVER ['] s check-alive DUP alive[] @ to OVER ['] w check-alive DUP alive[] @ to OVER ['] e check-alive 1+ FALSE ELSE TRUE ENDIF UNTIL DROP ;
ããŒãã®ãµã€ãºãå°ããããã«
貎女ã®ç«¶äºãæ¿ãããªããŸãã Goããã¬ã€ãã人ã¯ãå°ããªããŒãïŒ9x9ïŒã§ã®æŠããæšæºçãªããŒãïŒ19x19ïŒã§ã®æŠããããã¯ããã«æ¿ããããšãç¥ã£ãŠããå¿
èŠããããŸãã æåã®åãããããã¬ã€ã€ãŒã¯å¯æ¥ã«æ¥è§Šãããçãšæ»ãã®åé¡ãç¶ç¶çã«è§£æ±ºããããšãäœåãªããããŸãã ããã¯MarGoã®ã²ãŒã ã§ããããããããªããç§ã¯ããã«ã€ããŠè©±ããªãã§ãããã
äž»ãªéã
ã²ãŒã ã®ååã¯ããããŒãã«ãïŒããŒã«ïŒãšããŽãŒãã®2ã€ã®åèªã§æ§æãããŠããŸãã äžç·ã«ãããå€æ-ãå²ballsããŒã«ããã¬ã€ãã åŸæ¥ã®ã²ãŒã ãšã®éãã¯äœã§ããïŒ äžæ¬¡å
ã§ïŒ 3次å
ã®ããŒãã§Goããã¬ã€ããè©Šã¿ã¯ç¹°ãè¿ãè¡ãããŠããŸãïŒä»»æã®ã°ã©ãã§ãã¬ã€ã§ããããã°ã©ã ã«ã€ããŠ
æžããŠããŸãïŒãããããã®ã±ãŒã¹ã®ã»ãšãã©ã§ãã²ãŒã ã®ãã©ã³ã¹ãã²ã©ãèŠããã§ããŸããã ãããããäŸå€ã¯ãã€ã€ã¢ã³ãçµæ¶æ Œåãæš¡å£ããããŒãã ãã§ãã ããã¯ãå€å
žçãªãã©ããããŒãã«ãã䌌ãŠããŸãã åããŒãã«ã¯2ã4åã®ãã€ããŒããããŸãã
MarGoã®ã¢ãããŒãã¯ãŸã£ããç°ãªããŸãã ããŒã«ã¯ãã ãå®ã«æµ®ãã¶ãããšã¯ã§ããŸããã ãããŒãã®äžã«ç«ã€ãããã«ã¯ã圌ã¯ä»ã®4ã€ã®ããŒã«ïŒåœŒãŸãã¯åœŒã®å¯ŸæŠçžæïŒã«é Œããªããã°ãªããŸããã ãã¡ããããã®ããŒã«ãçãç¶ããããã«ã¯ãå°ãªããšã1ã€ã®
ãã ã«ã¢ã¯ã»ã¹ã§ããã°ã«ãŒããšæ¥è§ŠããŠããå¿
èŠããããŸãã ããŒãã®å¹³é¢ã«ããçŽäº€ãžã§ã€ã³ãã«åçŽæ¹åãè¿œå ããããã©ãããã®åºéšã«ããããŒã«ãé ç¹ã§æ¥ç¶ããŸãã
ãã®æ¥ç¶ã¯äž¡æ¹ã®æ¹æ³ã§æ©èœããŸãã
ãã ãžã®ã¢ã¯ã»ã¹ã¯ããã©ãããã®ãäžéšãã«åœãå¹ã蟌ãã ãã§ãªããããŒãã®å¹³é¢ã«æšªããã£ãŠããæµã®ç Žçãå
ã¿èŸŒãããã«ãããã«äžã®å±€ã«ç§»åããããšãã§ããŸãã ããã ãã§ãã²ãŒã ãããé¢çœãããããšãã§ããŸããããã1ã€ãããã»ã©æçœã§ãªãç¹ããããŸãã ãã©ãããã®æäžéšã«ããç³ããçããŠãããéãããã®åºéšã®ç³ã¯ãæ»ãã ãã°ã«ãŒãã«å±ããŠããŠãåãé€ãããšã¯ã§ããŸããïŒ

ãã®ãããªç³ã¯ã
女ç¥ãžã®ã¢ã¯ã»ã¹ã奪ãããç°ãªãè²ã®äººç©ã«ãã£ãŠæŒãã€ã¶ãããããŸã³ãããšåŒã°ããã殺ããããã°ã«ãŒãã®æ®ãããããå»ããšããããŒãã«æ®ããŸãã ãŸã³ãã¯æç²ãããç³ãšåçãšèŠãªãããŸãïŒããŒãããåé€ãããŸãïŒããããŒãã«æ®ã£ãŠããéããä»ã®ç³ãžã®ã¢ã¯ã»ã¹ãã転éãã§ããŸãïŒçªç¶è¡šç€ºãããå ŽåïŒã ããã«ããã©ãããã®äžéšãåé€ããããšã«ããããŸã³ããèãããããšãã§ããŸãã
3D䟵ç¥3次å
å¹æãäœæããã«ã¯ãåå³ã4ã€ã®ã¿ã€ã«ã«åå²ããå¿
èŠ
ãããããšãæ¢ã«
æžããŸããã ããã¯æ©èœããŸãããåé¡ã¯ãã¿ã€ã«ã®æ°åãéåžžã«å¥åŠãªæ¹æ³ã§ãç«äœãããŒãã«é
眮ããå¿
èŠãããããšã§ãã ããã¯é¿ããããŸããã ãäžãããèŠãããã¹ãŠã®ã¿ã€ã«ã¯åãå¹³é¢ã«ãªããã°ãªããŸããã ãã®ã¬ã€ã¢ãŠãã¹ããŒã ã«ã¯ç¬èªã®å©ç¹ããããŸãããããã²ãŒã·ã§ã³ã¯éåžžã«è€éã§ãã ãŸããçæ³ã®ããã«
ãã³ãã©ãå¿
èŠã§ããã
4 AA 3 8 8|9 9 2 5 5|6 6|7 7 1 1 1|2 2|3 3|4 4 + ABCDEFGH 1 1|5|8|AA|9|7|4 2 1|2 2|3 3|4 3 5|6 6|7 4 8|9
ç§ã¯åæããŸããåçã¯ãŸããŸãã§ãããã©ãã«ãããŠãªãªãšã³ããŒã·ã§ã³ãããããšãã§ããŸããã ãã®ãã¿ãŒã³å
ã®èªç¶ãªåãã®æ¹åæ§ãå¿
èŠã§ããã 幞ããªããšã«ãAxiomã®èŠ³ç¹ããèŠããšãæ¹åãšã¯ãåŒã³åºãã®å¯äœçšãšããŠçŸåšã®äœçœ®ã®äœçœ®ããŒã«ãŒãå€æŽããé¢æ°ã«ãããŸããïŒãã®ãããªé¢æ°ãåŒã³åºãããšã®äž»ãªçµæã¯ãããŒã«å€ãè¿ãããšã§ã移åãæåããããšãæå³ããŸãïŒã äžè¬ã«ãæ¹åã¯åå®çŸ©ã§ããããã«ããããã®éå±€å
šäœãã§ããŸããã

ãã®å³ã¯ãå³å¯ã«ãåãã«ã€ãªããé¢æ°ã®ã¿ã瀺ããŠããŸãïŒããæå³ïŒã ç§ã¯ãã§ã«ãããã®ããã€ãã以åã«äœ¿çšããŸããã ããšãã°ãæ¹å '
n 'ã¯ãã¡ã¢ãªäœ¿çšéãæé©åããããã«ãããŒãã¢ã¬ã€ããäœåãªè¡ãæšãŠããšãã«å
¥åããå¿
èŠããããŸããã ããã±ããç§åŠãã®äž»èŠãªéšåã¯ãããŒãã®å¹³é¢ã«å¹³è¡ãªå¹³é¢å
ã移åã§ããæ©èœã§ãã
ç§ã¯ããã«ã³ã¡ã³ãããããšããããŸããã : common-internal ( 'dir -- ? ) here is-plane? IF get-height SWAP EXECUTE IF get-height - DUP 0= IF DROP TRUE ELSE 0> IF FALSE ELSE BEGIN d NOT empty? OR UNTIL empty? IF u verify ENDIF TRUE ENDIF ENDIF ELSE DROP FALSE ENDIF ELSE here OVER EXECUTE NOT empty? OR IF to BEGIN u NOT UNTIL EXECUTE ELSE 2DROP TRUE ENDIF ENDIF ;
ãã®åŸã«çºèŠããããšã©ãŒã®ã»ãšãã©ã¯ããã®ç¹å®ã®æ©èœã«é¢é£ããŠããŸããïŒãããŠããããããã¹ãŠä¿®æ£ãããã©ããã¯ãŸã ããããŸããïŒã ããã«åºã¥ããŠãåå
éšãåå
éšãªã©ã®åããæ§ç¯ãããŸãã
: north-internal ( -- ? ) ['] n common-internal ; : south-internal ( -- ? ) ['] s common-internal ; : west-internal ( -- ? ) ['] w common-internal ; : east-internal ( -- ? ) ['] e common-internal ;
ãããã¯ã»ãŒå®å
šãªç§»åæ©èœã§ãããæ¬ ç¹ã¯1ã€ã ãã§ãã 移åã«å€±æãããšãçŸåšã®äœçœ®ã®ããŒã«ãŒäœçœ®ã¯æªå®çŸ©ã«ãªããŸãã ããã¯ç°¡åã«ä¿®æ£ã§ããŸãã äœããã®çç±ã§ç§»åã§ããªãã£ãå Žåã¯ã移åãã
åã«ããŒã«ãŒã®äœçœ®ãèšæ¶ãã埩å
ããã ãã§ååã§ãã
: wrap-direction ( 'dir -- ? ) here ( "" ) SWAP EXECUTE IF ( ) DROP TRUE ( , ) ELSE to FALSE ( , "" ) ENDIF ; : north ( -- ? ) ['] north-internal wrap-direction ; : south ( -- ? ) ['] south-internal wrap-direction ; : west ( -- ? ) ['] west-internal wrap-direction ; : east ( -- ? ) ['] east-internal wrap-direction ;
å°ãã ãæ®ã£ãŠããŸãã ããŒãã®å¹³é¢ã«ãããæ°Žå¹³ãéåã«å ããŠã1ã€ã®å¹³é¢ããå¥ã®å¹³é¢ã«åããæ¹åïŒãäžãããã³ãäžãïŒãå¿
èŠã§ãã
ã³ã¡ã³ãã®ãªãããã«å¥åŠãªã³ãŒã : up-internal ( -- ? ) here is-plane? IF FALSE ELSE d NOT empty? OR IF BEGIN u NOT UNTIL ENDIF TRUE ENDIF ; : down-internal ( -- ? ) here is-plane? IF d NOT empty? OR IF FALSE ELSE BEGIN d NOT empty? OR UNTIL empty? IF u verify ENDIF TRUE ENDIF ELSE u verify here is-plane? NOT ENDIF ; : up ( -- ? ) [
ããã ãã§ãïŒ ããã§ããæ¥ç¶ããããã°ã«ãŒãã®æ€åºã«å¿
èŠãªæ¹åã®å®å
šãªã»ãããã§ããŸããã
ãŸã³ãã¯ãã²ãŒã ã®ã·ã³ãã«ã§è«ççãªã«ãŒã«ã«ãã£ãŠçæãããèå³æ·±ãæ°ãããšã³ãã£ãã£ã§ãã èå³æ·±ãããããã ãã§ã¯ãããŸããïŒ MarGoã«ã¯ä»ã«ãé©ãããããŸãã
æ©ãšæžè°·
ãã©ãããã®äžéšã«ããç³ã¯ãåšå²ã®å¯èœæ§ãããå奜çãªç³ãžã®ã¢ã¯ã»ã¹ããéä¿¡ãããŸãã ç°å¢ãåé¿ããå¥ã®æ¹æ³ããããŸãïŒ ããããããããŸãã«ãGoã
3次å
ã§ãã¬ã€ããããš
ãããŸãé¢çœããªãçç±ã§ãã ã°ã«ãŒãã殺ãã®ã¯é£ããã§ãïŒ ä¿®æ£ããæ¹æ³ããããŸãã

Goã§ã¯ããã®ãããªæ¥ç¶ã¯ããããæ§ç¯ãããã¬ã€ã€ãŒã®èµ·ããããééãã«é¢ä¿ãªããåºæ¬çã«åæãããªããšèŠãªãããŸãã è¿ãã«ç«ã£ãŠããç³ã¯çããŠäžç·ã«æ»ã«ãŸãã ããããåé¢ããããšã¯äžå¯èœã§ãããMarGoã§ã¯ã§ããŸããïŒ ãã®ã²ãŒã ã§ã¯ãç«ã£ãŠããç³ã®äžã«æ©ãæ¶ããããšã§ããã®ç³ããåããããšãã§ããŸãã æ©ã®å察åŽã«ããäžã®ç³ã¯ã2ã€ã®ã°ã«ãŒãã«åãããŸãã
æ©ãæž¡ã£ãŠãåæãã®æ¬è³ªã¯ãéžæããæ¹åã«ç§»åã§ããªãããšã§ãã ããã¯ãäžã§æžããæ¹åã®éå±€ãæ¡åŒµããå¿
èŠãããããšãæå³ããä»ã®äººã
ã®ãé ã®äžãã®äººç©ããæ§ç¯ããããæ©ãã®ååšãå¶åŸ¡ããæ°ããæ¹åãè¿œå ããŸãã ãããªããžãåæããããšããã«ãŒã«ã¯ãªãã·ã§ã³ã«éåžžã«äŒŒãŠããããïŒã²ãŒã ã¯ããããªããŠãé¢çœãå ŽåããããŸãïŒãæäœãå¶åŸ¡ãããã©ã°å®æ°ãå®çŸ©ããŸãã
TRUE CONSTANT BRIDGE-CUTTING
ãã®åŸããã¹ãŠãç°¡åã§ã : is-covered? ( -- ? ) player up empty? NOT AND IF player <> ELSE DROP FALSE ENDIF ; : check-bridge? ( 'dir piece-type -- ? ) piece-type SWAP equal-types? IF here is-covered? IF SWAP OVER to EXECUTE IF is-covered? SWAP to ELSE to FALSE ENDIF ELSE to DROP FALSE ENDIF ELSE DROP FALSE ENDIF ; : common-cutting ( 'dir 'dir piece-type 'dir piece-type -- ? ) BRIDGE-CUTTING IF check-bridge? IF 2DROP TRUE ELSE check-bridge? ENDIF ELSE 2DROP 2DROP FALSE ENDIF IF DROP FALSE ELSE EXECUTE ENDIF ; : north-cutting ( -- ) ['] north ['] east nw-piece ['] west ne-piece common-cutting ; : south-cutting ( -- ) ['] south ['] east sw-piece ['] west se-piece common-cutting ; : west-cutting ( -- ) ['] west ['] south nw-piece ['] north sw-piece common-cutting ; : east-cutting ( -- ) ['] east ['] south ne-piece ['] north se-piece common-cutting ;
ãã§ãã¯ããªããžã«ã¯ãã¹ãŠã®éæ³ãé ãããŠã
ãŸããïŒ ã é ã®äžã«ãããæ©ããç¹å®ããã«ã¯ã誰ãã®ã¿ã€ã«ãæ¢ããŠãèŠäžãããŸãã é£æ¥ããã¿ã€ã«ã§ãåãããšãè¡ããŸãã äž¡æ¹ã®ã¿ã€ã«ãå¥ã®è²ïŒç°ãªãïŒã§ãèŠãããŠãããå Žåã察å¿ããæ¹åããåãå»ã¿ããè¿ãããå€ãåœã®å€ã«çœ®ãæããŸãã
ããã¯é©ããçµãã£ãå Žæã ãšæããŸããïŒ ã©ããªã«ïŒ
æãé£ããã±ãŒã¹
èªæ®ºã®åãã¯çŠæ¢ãããŠããŸãïŒãããŠã»ãšãã©åœ¹ã«ç«ããªãïŒã ãã¬ãŒã€ãŒã¯ãçžæã®ç³ã1ã€ãåãåããªããšããç°å¢ã«ãç³ã眮ãããšãã§ããŸããã Goã§ã¯ãããã¯ç°¡åã§ãã ç¹å®ã®ç³ã®ã°ã«ãŒããååŸããå Žåãæ°ããè¿œå ãããç³ãšæ¥è§ŠããŠããå¿
èŠãããããã®ã殺害ãã¯çãæ®ãããã«å¿
èŠãª
ãã ãéããŸãã ããããMarGoã«ã¯ãŸã³ããããŸãïŒ

ãã©ãããã®é äžã§ç³ããšã£ãŠããçœãç³ã¯äŸç¶ãšããŠãå²ãŸãããããã«ãã£ãŠåãå
¥ããããªãäœçœ®ãäœãåºããŸãïŒ 2ã€ã®é»ãç³ã¯ããã®åºéšã«ããããŸã³ããã«ãã£ãŠä¿è·ããããä»®æ³ã°ã«ãŒãããæ§æããŸãã ãã®é²åŸ¡ãéåžžã«çåœã§ããããšã¯é¢çœãã çœäººãäœããã®çç±ã§åœŒã«é£æ¥ãã4ã€ã®ç³ã®ããããã奪ããšããä»®æ³ã°ã«ãŒããã®ä¿è·ã¯ç¡å¹ã«ãªããŸãã ããã¯åãªã人工æ§é ã§ã¯ãããŸããã ä»®æ³ã°ã«ãŒãã¯ãMarGoïŒã®éèŠãªæŠè¡ã³ã³ããŒãã³ãã§ãã ããšãã°ããã®ããžã·ã§ã³ã®ã¹ããŒã¿ã¹ã«ã€ããŠã©ãæããŸããïŒ

ããã¯å®å
šã«å²ãŸããã°ã«ãŒãïŒ1ã€ã®ãç®ãïŒã®ããã«èŠããçœãé£ã¹å§ããŸããã åççã«ã¯ããã§ãããé»äººã®ã°ã«ãŒãããä»äžãããããšã¯ããã»ã©ç°¡åã§ã¯ãããŸããã çœã¯ãå·Šäžé
ã ãã«è¡ãããšã¯ã§ããŸããã 2ã€ã®çœãç³ãããŸã³ããã®ã¿ãå²ãããããã®ãããªåãã¯èªæ®ºãšèŠãªãããŸãã ããããé»ã¯äŸµå
¥ããçœãç³ãé£ã¹ãããã«æ¥ãã§ã¯ãããŸããïŒ

ãã©ãã¯ã¯ããŸã³ããã§ã¯ãªãç³ãããŒãã«è¿œå ããããã«ãã£ãŠãä»®æ³ã°ã«ãŒããã®ä¿è·ãç Žå£ããŸãã ãã¯ã€ãã¯ã圌ãé£ã¹ãã°ããã®ç³ãšåããã€ã³ãã«è¡ãæš©å©ãååŸãã5ã€ã®é»ãç³ãåããŸãã é»ã®æåã®è§£æ±ºçã¯äœãããªãããšã§ãã ãã¡ãããããã§ã¯ãããŸããã ãã¯ã€ãã«ã¯ã°ã«ãŒãã殺ãå¥ã®æ©äŒããããŸãã

é»äººããã®è
åšãç¡èŠãããšã圌ã®ã°ã«ãŒãã¯éåœã¥ããããŸãïŒ åœŒãã®ã°ã«ãŒããã€ãªãããšã«ãããçœäººãã¬ã€ã€ãŒã¯æåŸã®
åèªãå®å
šã«åãããšãã§ããŸãã ãã®ãããªäŸµå
¥ã«å¯Ÿããé²åŸ¡ã¯æããã§ãã çžæã®æé«ã®åãã¯ããªãã®æé«ã®åãã§ãïŒ
æ¬åœã«é£ããäžèšã§æžããããã«ããã¬ãŒã€ãŒã«ç³ãè¿œå ãããããããã°ã«ãŒããåé€ãããšã2ã€ã®é£ç¶ããåãã«åå²ããå¿
èŠããããŸããïŒããã§ãªããã°ããã¹ãŠãéåžžã«å°é£ã§ããïŒã ä»ã®äžäŸ¿ãã®äžã§ããããã¯åã«ãã¬ã€ã€ãŒããèªæ®ºçãã§ãããšããçç±ã ãã§ããã¬ã€ã€ãŒã«åããçŠããããšãã§ããªãããšãæå³ããŸãã ååãšããŠãããã¯ããã»ã©å€§ããªåé¡ã§ã¯ãããŸããã 移åããŠãè¿œå ãããç³ãåçŽã«æ»ãªããŠã¿ãŸãããïŒç¬èªã®è²ã®ä»ã®ç³ã®ã°ã«ãŒãã䜿çšããŠïŒããããã¯åé¡ã®äžéšã«ãããŸããïŒ ãã®ã³ãŒãã®ãããªãã®ãæžããããšãèŠããŠããŸããïŒ
: drop-m ( -- ) here a1 = verify drop ['] my-enemy? init-alive proceed-alive check-zombies capture-all captured-tiles @ 0= IF ['] my-friend? init-alive proceed-alive check-zombies capture-all captured-tiles @ NEGATE update-variables ELSE captured-tiles @ update-variables ENDIF add-move ;
æµã®ç³ãåãé€ãããšããŠããŸããããããæåããªãã£ãå Žåã¯ãèªåã®ç³ãåãé€ãããšããŠããŸãïŒåã蟌ãã ç³ãåæã«æ°ããŸãïŒã ãã®ããããã®ã³ãŒãã¯æ©èœããŸããïŒ å®éãããªãããŒãªã±ãŒã¹ãèŠããšãçžæã®ç³ãåãé€ãããŠããããšãããããŸãããè¿œå ãããç³ã¯ãŸã å²ãŸãããŸãŸã§ãïŒ ããã¯æ¬åœã«åé¡ã§ãã ãã¹ãŠãé©åã«æ©èœããããã«ã¯ãæµã®æ»ãã ç³ãåãé€ããããããç§ãã¡ã®ãã®ãåãé€ããå¯èœã§ããã°æµã®ç³ãå
ã®å Žæã«æ»ããªããã°ãªããŸããã ã¯ããAxiomã«ã¯ãããŒãã®ã³ããŒãäœæããå€æŽãå ãããã¹ãŠãããŒã«ããã¯ã§ããæ©èœããããŸãããããã§ã¯äœ¿çšããŸããã 幞ããªããšã«ãå¥ã®é©åã«æ©èœããå€æŽããŒã«ããã¯ã¡ã«ããºã ããããŸãã
ãããã°ã«ãŒãåé€ã³ãŒãã2ã€ã®éšåã«åå²ãã {players {player} W {player} B {player} ?C {random} players} {turn-order {turn} W {of-type} high-priority {turn} ?C {for-player} W {turn} B {of-type} high-priority {turn} ?C {for-player} B turn-order} {move-priorities {move-priority} normal-priority {move-priority} low-priority move-priorities} {moves w-drop {move} drop-w {move-type} high-priority {move} drop-nw {move-type} high-priority moves} {moves n-drop {move} drop-n {move-type} high-priority {move} drop-ne {move-type} high-priority moves} {moves e-drop {move} drop-e {move-type} high-priority {move} drop-se {move-type} high-priority moves} {moves s-drop {move} drop-s {move-type} high-priority {move} drop-sw {move-type} high-priority moves} {moves m-drop {move} clear-e {move-type} normal-priority {move} clear-f {move-type} low-priority moves} {pieces {piece} M {drops} m-drop {piece} tw {drops} w-drop {piece} zw {piece} ww {piece} bw {piece} tn {drops} n-drop {piece} zn {piece} wn {piece} bn {piece} te {drops} e-drop {piece} ze {piece} we {piece} be {piece} ts {drops} s-drop {piece} zs {piece} ws {piece} bs pieces}
åªå
床ãé«ãïŒ
éåžž ïŒå Žåãã³ãŒãã¯æµã®ãããã°ã«ãŒãïŒclear-eïŒãåé€ããäœãïŒ
low ïŒ-ãããã°ã«ãŒããåé€ããŸãïŒ
é«ã¬ãã«ãåªå
ãªã¹ãå€ãéåžžã®ããŒããžã®ç³ã®è¿œå ã®ããã«äºçŽããŸãïŒã ããã§ãã¹ãŠãæ£åžžã«æ©èœããããã«ãªããŸããã ãŸããã ãŒããžã§ãã¬ãŒã¿ãŒã¯åªå
床ã®é«ã
clear-eãå®è¡ããããšããæåŸã«è¿œå ãããç³ãç°å¢ã«å
¥ã£ããã©ããã確èªããŸãïŒãããçºçããå Žåãã ãŒããçŠæ¢ããŸãïŒã åªå
移åããã§ãã¯ã®1ã€ã«å€±æããå Žåã移åãžã§ãã¬ãŒã¿ãŒã¯ãã¹ãŠã®å€æŽãããŒã«ããã¯ããäœåªå
床
clear-fãæºãããŸãã ãã®ã³ãŒãã¯åžžã«æåããŸãã å®è£
ã®å¯äœçšãšããŠããèªæ®ºãã°ã«ãŒããåé€ãããããšããããŸãã
ã¯ãªãŒã³ã¢ããã³ãŒããè€éã§ã : clear-e ( -- ) 0 captured-count ! here a1 = verify drop ['] my-enemy? init-alive proceed-alive check-zombies capture-all captured-tiles @ 0> verify captured-tiles @ update-variables ['] my-friend? init-alive proceed-alive check-zombies check-not-captured add-move ; : clear-f ( -- ) 0 captured-count ! here a1 = verify drop ['] my-friend? init-alive proceed-alive check-zombies capture-all captured-tiles @ 0> IF captured-tiles @ NEGATE update-variables ELSE DROP ENDIF add-move ;
äžè¬ã«ãå°ãæ··ä¹±ããŸãããåäœããŸãã
ã³ããŽãªã
ããŠããã1ã€ã®
é£ããã±ãŒã¹ããããŸããããã¯ãããäŒçµ±çãªããŒãžã§ã³ã®ã²ãŒã ããç¶æ¿ããããã®ã§ãã ãã§ã«è¿°ã¹ãããã«ãããŒãã®é¢ã§ã¯Goã®ãã¹ãŠã®ã«ãŒã«ãæå¹ãªãŸãŸãªã®ã§ã次ã®ããªãã¯ãå®è¡ããããšã¯éåžžã«å¯èœã§ãã

ã©ãã«ããã®æ¥œããããã¹ãŠå£ããªããã°ããã¬ã€ã€ãŒã¯ãäºãã®ç³ãç¡æéã«é£ãå°œããæ©äŒãåŸãã§ãããã ãã¡ãããMarGoã¯ãããèš±å¯ã§ãããåã®äœçœ®ã®ç¹°ãè¿ãã«ã€ãªããåããçŠæ¢ããŸãã
ã²ãŒã ã®
ã«ãŒã«ã§ã¯ ãç§ãã¡ã¯
ç¶æ³ã®ã¹ãŒããŒã³ã«ã€ããŠè©±ããŠããŸãã

é»äººã¯ããã«çœãç³ãé£ã¹ãããšãã§ãããããŒãã®å¥ã®éšåã«æ©ããããŸãã 次ã¯ãçœãæ¥ç¶ã§ããŸãã
èŠããªã人çæ²ããããªãç§ã¯äœçœ®çãŸãã¯ç¶æ³çã¹ãŒããŒã³ã®æ€åºãå®çŸã§ããŸããã ããã«ã¯ä»¥åã®äœçœ®ã«é¢ããæ
å ±ïŒå°ãªããšãããã·ã¥ïŒãå¿
èŠã§ãããç§ã«ã¯ãããŸããïŒ å¹žããªããšã«ãããããã¹ãŠã®ã
åšæçãªå ããã
æ°žé ã®åœ ããããã³ä»ã®ç°åœçãªå°äœã¯å€©æ°ãæªåãããŸããã å®éã®Koãã¡ã€ãã§ã¯ãã»ãšãã©ã®å Žåã
åçŽãªKoã衚瀺ãããŸãã 圌ãæãŸããŸãã
ã空ããã€ã³ããžã®ç§»åãçŠæ¢ããã«ã¯ã空ã«ããªãããã«ããå¿
èŠããããŸã : drop-marks ( -- ) 0 BEGIN DUP captured-count @ < IF mark OVER captured[] @ create-piece-type-at 1+ FALSE ELSE TRUE ENDIF UNTIL DROP ; : clear-marks ( -- ) 0 BEGIN DUP empty-at? NOT IF DUP piece-type-at mark = IF DUP capture-at ENDIF ENDIF 1+ DUP PLANE >= UNTIL DROP ;
é衚瀺ã®ã¿ã€ã«ãããŒãã«é
眮ããŠãéžæããäœçœ®ã«ç§»åã§ããªãããã«ããããšãã§ããŸãã èš±å¯ããããã€ã³ããžã®ç§»åãå®è¡ããå Žåããããã®å¹²æžãåã«é€å»ããŸãã ããã§ã¯ãMarGoã®éèŠãªç¹æ§ã®1ã€ãç§ãã¡ã®æã«æž¡ã£ãŠããŸãã å
±åæŠéã¯åžžã«ããŒãã®ããŒã¹ã®å¹³é¢ã§çºçããŸãïŒ è¿œå ãããã空ã®ãã¿ã€ã«ãã°ã«ãŒãã®ã¹ããŒã¿ã¹ã®æ±ºå®ã«å¹²æžããªãããã«ãããŒãã®ç¡å¹ã決å®ããé¢æ°ãå€æŽããŸãã
: my-empty-at? ( pos -- ? ) DUP curr-pos ! - empty-at? IF + DUP empty-at? SWAP piece-type-at mark = OR IF TRUE ELSE ... ENDIF ;
ããŒãã«å
±åããŒãã³ã°ãè¿œå ããããšã¯æ®ã£ãŠããŸãã æµã®é€å»ãããç³ã®ä»£ããã«ãããè¡ããŸãããã®ç³ãé€å»ãããªãã£ãå Žåããèªå·±ç Žå£ããããã°ã«ãŒãã¯æ°ããè¿œå ãããã¡ããã©1ã€ã®ç³ã§æ§æãããŸãã è€éã«èãããŸããïŒ äžè¬çã«ã¯ãããã§ãã
èåŸã«ã¯äœããããŸããïŒ
ãã¡ããããã¹ãŠãé 調ã«é²ãã ããã§ã¯ãããŸããã ããã€ãã®ã«ãŒã«ãå®è£
ã§ããŸããã§ããã ããšãã°ãMarGoã§ã®èªæ®ºè¡çºã¯çµ¶å¯Ÿã«çŠæ¢ãããŠããŸãã ããã¯ããã¬ãŒã€ãŒããã®åãã§æµã®ç³ã
åãåããªãéããæåŸã®
ãã ã®ã°ã«ãŒãïŒããããè¿œå ãããã°ããã®1ã€ã®ç³ã ãã§æ§æãããïŒã奪ãåããããæš©å©ããªãããšãæå³ããŸãã
ç§ã¯ç³ãè¿œå ããåããšåãããç³ãåãé€ãåããåé¢ããããåŸãããèªæ®ºãã®åããçŠæ¢ããå¯èœæ§ã奪ãããŸããã ããã¯äºçŽ°ãªããšã®ããã«æãããããããŸããã æçµçã«ãGo
ã«ãŒã«ã®ã»ãšãã©ã®ããªãšãŒã·ã§ã³ã§ã¯ãèªæ®ºçããªåãã¯çŠæ¢ãããŠã
ãŸãããIngaã«ãŒã«ã§ã¯èš±å¯ãããŠããŸãã ããã«ã¯ååãªçç±ããããŸãã èªåã®ã°ã«ãŒãã殺ããšããã¬ã€ã€ãŒãå®å
šã«
絶æçãªç¶æ³ã§è±åºã§ããïŒéåžžã«ãŸããªïŒããžã·ã§ã³ããããŸãã
é¢ã¯ãã€ã³ããç²åŸããŸããããã°ã«ãŒãã®å®å
šãªæ倱ãšæ¯èŒãããšãæµããã€ã³ããç²åŸã§ããªããããããã¯æ·±å»ãªå©ãã§ãïŒ æ®å¿µãªãããäžæ¹ãä»æ¹ãåŒã£åŒµããŸãã
ïŒGoãšã¯ç°ãªãïŒMarGoã§ã¯ããã¬ã€ã€ãŒã¯ç§»åãã¹ãããã§ããŸãããããããäžåºŠçµ¶æçãªç¶æ³ã«é¥ã£ãå Žåããã¬ãŒã€ãŒã¯ã»ãšãã©ã®å Žåãæ°ããè¿œå ãããç³ã®èªæ®ºã«ã€ãªããåããããããšãã§ããŸãããã¹ã§ãªãå Žåãããã¯äœã§ããïŒãããçŠæ¢ã§ããŸãããããã«ããããããã®éãã¯ããã»ã©éèŠã§ã¯ãªãã®ã§å¿é
ãã䟡å€ããããŸããã AIã¯ã¯ããã«æªããçŸåšã®å®è£
ã§ã¯ãåã«ååšããŸããïŒãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã2人ã§ãã¬ã€ããããã¹ã±ãããåæãããããããã®ãã€ã³ããªãžã§ã³ããªãããŒããšããŠäœ¿çšã§ããŸãããããã§éã¶ããšã¯ã§ããŸããã Go for AIã®è€éãã§ãããããŸããïŒZoGéçºè
ã¯DLLãšã³ãžã³ã䜿çšããå¿
èŠããããããŸãããŸãæ©èœããŸããïŒã AIã«ã€ããŠèããåã«ãå°ãªããšãã¹ã³ã¢ãªã³ã°ããžãã¯ãå®è£
ããå¿
èŠããããŸããå²gameã²ãŒã ã®ç®æšã¯ãæµã®ç³ããé£ãå°œãããããšã§ã¯ãªãïŒæåŸãŸã§ã«ãŠã³ããããŸããïŒãé åãå é ããããšã§ãïŒãããäžåœã®ã«ãŒã«ãšã©ã®ããã«ç°ãªããã«ã€ããŠãç§ã¯ããã«æžããŸããïŒïŒãã¬ã€ã€ãŒã®é åã¯ãã¹ãŠç©ºã®ãã€ã³ããšèŠãªãããèªåã®è²ã®éšåã«ã®ã¿å°éã§ããŸãã MarGoã¯ãã®æŠå¿µãæ¡åŒµããŸããããŒãã®å¹³é¢ã«ããé åã®äŒçµ±çãªãã€ã³ãã«ã4ã€ã®è²ã®ç³ã§æ§æãããããµã€ããã«ãã€ã³ããè¿œå ãããŸããèããŠã¿ããšããããé åã§ãããããã®ãã€ã³ãã§ã¯ãç³ã眮ãããšãã§ãããããããèªåã®ç³ã ãã«ãååŸãã§ããŸããç§ã¯ãã®ãããªã¢ã€ãã ãåèªã§ã¯ãªãããšã匷調ããŸãïŒã©ã€ãã°ã«ãŒãã¯ãããŒãã®å¹³é¢ã«ããç¡æã®ã¢ã€ãã ã®ã¿ãæäŸããŸãããã®ããã«å®çŸ©ãããé åãæ°ããããšã¯è€éã§ãããããªã解決å¯èœã§ããæ®å¿µãªãããããã¯ããã«éå®ãããŸããã MarGoã¯ããã¬ã€ã€ãŒããæœåšçã«ãåããããšãã§ãããã€ã³ããé åã«è¿œå ããŸããããšãã°ããã¬ã€ã€ãŒãèªåã®è²ã®16ããŒã¹ã§æ§æããã4x4ã®æ£æ¹åœ¢ãæã£ãŠããå Žåã圌ã®ããµã€ããã«4ã€ã®ç³ãé
眮ããããšãã§ããŸãïŒå¥ã®ç³ã®ããã«æ°ããé åã圢æããŸãïŒãããã«ãæåã®4x4æ£æ¹åœ¢ãå¡ãã€ã¶ãããŠããªãå Žåããã®å
éšãã€ã³ããããªããªãŒã«è¿œå ãããŸããããã¯ãã¹ãŠçã«ããªã£ãŠããããã«æããŸããããããŸã§ã®ãšãããForthScriptã§ãã®ãããªã¿ã¹ã¯ã«åãçµãããšããæããŠããŸãã
æç²ãããç³ãæ°ããããšãé£ããä»äºã§ãããã¡ãããã²ãŒã äžã«ãã£ããã£ãããç³ã«å ããŠãããŸã³ãããè¿œå ãããŸãïŒå€§äžå€«ãããªãã¯ããããæ°ããããšãã§ããŸãïŒã ãéåžžãã¹ã³ã¢ãªã³ã°ã®åã«ããã¬ã€ã€ãŒã¯ãããããã°ã«ãŒããæåã§åé€ããæ©äŒãäžããããŸãããZoGã§ã¯ããã¯ãŸã ææŠã§ãïŒãããã®åé¡ããã¹ãŠè§£æ±ºã§ãããšããŠãããã®ã²ãŒã ã«å°ãªããšãäœããã®åœ¢ã§åŒ·åãªAIãå®è£
ã§ãããšããããã§ã¯ãããŸãããããããè©ŠããŠã¿ã䟡å€ã¯ãããŸãã