ç§ãã¡ã¯ããµã³ã¯ãããã«ãã«ã¯HSEã§å¿çšæ°åŠãšæ å ±åŠã®1幎çã®åŠéšç ç©¶ãè¡ã£ãŠããŸããC ++ã§åŠæã®ããŒã ãããžã§ã¯ãã«åãçµãã§ããéãããããåããIntellectorã®ã³ã³ãã¥ãŒã¿ãŒããŒãžã§ã³ãäœæããããšã«ããŸãããããã¯ãç¹æ®ãªå³åœ¢ãåããå è§åœ¢ã®ããŒãäžã®ãã§ã¹ã²ãŒã ã§ãã
ãã®èšäºã§ã¯ãã²ãŒã ã®éçºãã©ã®ããã«é²ãã ããå è§åœ¢ã®ããŒãã飌ããªããæ¹æ³ãã³ãã³ãã©ã€ã³ãæç»ããæ¹æ³ããããŠã»ãšãã©åããªãããããäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã

ç§ãã¡ã®ããŒã ã«ã¯ãYura KhudyakovãValera GolovinãMishaSavrasovã®3人ãããŸããç§ãã¡äžäººäžäººã«ãšã£ãŠãããã¯æåã®ããŒã ãããžã§ã¯ãã§ãããããäœæ¥ã®éçšã§ãããã«ã€ããŠæžãã ãã§ãªããããŒã ã§äœæ¥ããããŒãžã§ã³å¶åŸ¡ã·ã¹ãã ïŒãã®å Žåã¯gitïŒã䜿çšããããšãåŠã³ãŸããããã®ãããžã§ã¯ãã«ã¯ãç¹ã«èªè»¢è»ãªã©ãå€ãã®å¥åŠãªç¹ããããŸãã䜿çšã§ããåªããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ããããŸããããããç§ãã¡ã®ãããžã§ã¯ãã®ç®æšã¯çµéšãç©ãããšã ã£ãã®ã§ãç§ãã¡ã¯èªåãã¡ã§ããããã®çºæãšå®è£ ãè¡ããŸããã
ã€ã³ããªã¯ã¿ãŒãšã¯äœã§ããïŒ
ãŸããã©ã®ãããªã²ãŒã ãæžãããã説æãã䟡å€ããããŸãã
ã²ãŒã ãIntellectorããæè¿ç»å Žããä»ãªã人æ°ãéããŠããŸããä»å¹Žãæåã®ãªãŒãã³ãã£ã³ããªã³ã·ããããµã³ã¯ãããã«ãã«ã¯ã§éå¬ãããŸããã

ã€ã³ããªã¯ã¿ãŒã¯ããã£ãŒã«ãã®æ§é ãã«ãŒã«ãããã³ããŒã¹ã®ã»ããããã§ã¹ãšã¯ç°ãªããŸãããã ããå€ãã®èŠçŽ ã¯é¡äŒŒããŠããŸããããšãã°ãã²ãŒã ã«ã¯ããŒã³ã®åœ¹å²ãæããããã°ã¬ããµãŒãã£ã®ã¥ã¢ããããŸãã圌女ã¯åæ¹ã«ã®ã¿æ©ããæ¥µç«¯ãªåã«éãããšå¥ã®äººç©ã«å€ããããšãã§ããŸãã
ããã®çæ§ã¯ã€ã³ããªã¯ã¿ãŒãšåŒã°ãã人ç©ã§ããã²ãŒã ã®ç®çã¯ããã§ãã¯ã¡ã€ãã§ã¯ãªãããã®ããŒã¹ãã«ããããããšã§ãïŒããã¯ã»ãšãã©åãããšã§ããïŒã
ã²ãŒã ã®ä»çµã¿ã®éãã¯ããã£ãŒã«ãã®è©³çްããçããŸããIntellectãã£ãŒã«ãã¯å¯Ÿç§°çã§ããããã³ã°ãµã€ããšã¯ã€ãŒã³ãµã€ãã®ãã§ã¹ãšã¯å€§ããç°ãªããŸãã
ãã®èšäºãçè§£ããããã«ãã«ãŒã«ã®ç¥èãšãã¬ã€ããèœåã¯å¿ èŠãããŸããã
äžè¬çãªã¢ãŒããã¯ãã£
ã¢ããªã±ãŒã·ã§ã³ã«äœãå¿ èŠã§ããïŒ
ã²ãŒã ãæ©èœãããã«ã¯ããã®äž»èŠã³ã³ããŒãã³ãã§ããã²ãŒã ã®ããžãã¯ãå®è£ ããå¿ èŠããããŸããããŒãã¢ãã«ãšç§»åã«ãŒã«ãå«ãŸããŠããŸããããã«ã䟿å®äžãç§»åã®å±¥æŽãä¿æããå ã«æ»ã/ããçŽããå®è£ ããããšããå§ãããŸãã
ããŒãã衚瀺ãããŠãŒã¶ãŒããã¬ã€ã§ããããã«ããå¿ èŠããããŸããããã¯ãã²ãŒã ã®ã°ã©ãã£ãã¯ã³ã³ããŒãã³ãã§ããã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ãŠè¡ãããŸãããŠãŒã¶ãŒãã¬ã³ããªãŒãªã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ãã¡ãã¥ãŒãšèšå®ãå¿ èŠã§ãã
çµå±ã®ãšããããã¬ã€ããã«ã¯å¯ŸæŠçžæãå¿ èŠã§ãããã¬ã€ã€ãŒãã³ã³ãã¥ãŒã¿ãŒãšç«¶äºã§ããããã«ããããã®ç®çã®ããã«ããããäœæããããšã«ããŸããããã®å Žåããããã®è€éãã¯èª¿æŽå¯èœã§ããå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã©ã³ïŒ
- ã²ãŒã ããžãã¯
- å
è§åœ¢ã®ããŒãã¢ãã«
å è§åœ¢ã®ã»ã«ã®2次å é åãšããŠæ ŒçŽãããŸã - ããŒã¹ãç§»åããããã®ã«ãŒã«ç§»å
ã®æå¹æ§ããã§ãã¯ãããã¬ãŒã€ãŒã®ããã«ãããŒã¹ã«äœ¿çšå¯èœãªãã¹ãŠã®ç§»åãååŸããŸã - ç§»åå±¥æŽç§»åã
å ã«æ»ããããçŽããŸã
- å
è§åœ¢ã®ããŒãã¢ãã«
- ã€ã³ã¿ãŒãã§ãŒã¹
èšç»2ã€ã³ã¿ãŒãã§ãŒã¹ïŒncursesãšQtããããžã§ã¯ãã«ã¯ncursesã®ã¿ãå®è£ ãããŠããŸãã詳现ã«ã€ããŠã¯ããã€ã³ã¿ãŒãã§ãŒã¹ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã- ãã£ãŒã«ãã®è¡šç€º
ã³ã³ãœãŒã«ã§ã®ãã£ãŒã«ãã®ã¬ã³ããªã³ã°ãšæŽæ° - ããŒããŒãããŒã§ã«ãŒãœã«ãåãããããŠã¹ãªãã§åç
- ç§»åã®ããã¹ãå±¥æŽã衚瀺ãã
- ã¡ã€ã³ã¡ãã¥ãŒã®è¡šç€º
- ãã£ãŒã«ãã®è¡šç€º
- ããã
- ã©ã³ãã ããã
- 貪欲ãªããã
- ã¢ã«ãã¡ããŒã¿ããã
ãã¹ãŠã®åããç¹°ãè¿ãããã«æé©å
ããã¯ã©ã®ããã«è¡ãããŸããïŒ
éåžžã«åçŽåãããã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã¯ã次ã®å³ã§èª¬æãããŠããŸãã

ã²ãŒã ã»ã¯ã·ã§ã³ã¯ããã¹ãŠã®ã²ãŒã ããžãã¯ãæ åœããããŒããä¿åããŸãã
ã³ã³ãã¥ãŒã¿ãŒã䜿çšããã²ãŒã ããªã³ã«ãªããšãã²ãŒã ã¯ããã
ã³ã³ãããŒã©ãŒããããããšå¯Ÿè©±ããã²ãŒã ããã²ãŒã ã«é¢ããããŒã¿ãååŸããŠããã¬ãŒã€ãŒã«è¡šç€ºããããã«ã€ã³ã¿ãŒãã§ã€ã¹ã«è»¢éããŸããæ¬¡ã«ãã€ã³ã¿ãŒãã§ã€ã¹ã¯ããŠãŒã¶ãŒã®æäœã®çµæãã³ã³ãããŒã©ãŒãä»ããŠã²ãŒã ã«è¿ããŸãã
ã³ã³ãããŒã©ãŒåœ¢åŒã®äžéãªã³ã¯ã¯ãè€æ°ã®ã€ã³ã¿ãŒãã§ãŒã¹ãããå Žåã«åœ¹ç«ã¡ãŸãïŒåœåãã³ã³ãœãŒã«ãšã°ã©ãã£ã«ã«ã®2ã€ã®ã€ã³ã¿ãŒãã§ãŒã¹ãäœæããäºå®ã§ããïŒããããã®ãã¹ãŠã¯ããããããç°ãªãæ¹æ³ã§è¡ãã®ã§ã¯ãªããã³ã³ãããŒã©ãŒãä»ããŠåäžãªæ¹æ³ã§ã²ãŒã ãšéä¿¡ããŸãã
æè¡çãªè©³çް
ã²ãŒã ã¢ãã«
å è§åœ¢ã®ããŒã
äžã®å³ã®ã²ãŒã ã»ã¯ã·ã§ã³ãèããŠã¿ãŸããããããŒããä¿åããã²ãŒã å ã®ãã¹ãŠã®ããžãã¯ãåŠçããå¿ èŠããããŸãã
çè§£ãæ·±ããããã«ããã®ã¢ã€ãã¢ãåãå ¥ããèšäºãèªãããšãã§ããŸããæ¬¡ã®å³ã«ç€ºãããã«ã
ããŒãå šäœãã»ã«ã®2次å é åã«æ ŒçŽãããã®èŠçŽ ã¯åº§æšã®ãã¢ã«ãã£ãŠã€ã³ããã¯ã¹ä»ããã
(w,h)ãŸãããã®ãããªåº§æšã®éžæã¯èªç¶ã«æããŸããã圢ç¶ã®åãã説æããã«ã¯äžäŸ¿ã§ãïŒããšãã°ã察è§ç·ã«æ²¿ã£ãŠç§»åãããšãã«åº§æšãã©ã®ããã«å€åãããã芳å¯ããŠãã ããïŒã

暪軞
wãšçžŠè»žã«æ²¿ã£ãã»ã«ã®åº§æšh
å³ã®åãã説æããããã«ã3次å 座æšã䜿çšããŸãã座æšãæã€åç §ã»ã«ãšããŠããã€ãã®ã»ã«ãéžæããŸããã
{0,0,0}ïŒäŸ¿å®äžã(0, 0)é
åã®ã»ã«ãšäžèŽããŸãïŒã

座æšäžå¿çްèã«å¯ŸããŠçްèã®äžæ¬¡å 座æš
{0,0,0}
ãå·ŠãåºãŸã§å³ããã察è§ç·ã«æ²¿ã£ãŠå€äœåº§æšã§è¡šããã
x座æšã«ãã£ãŠ- ãäžããäžãžã®å€äœãyãããã ããããããžãå·Šããå³ãžããšå¯Ÿè§ç·ã«æ²¿ã£ãå€äœ-座æšã«ãã£ãŠzã飿¥ããã»ã«ã«ç§»åãããšã察å¿ãã座æšã1ã€å€åããŸãããããã£ãŠãäžã®å³ã®ããã«ãåã»ã«ã¯3ã€ã®åº§æšãåãåããŸãã
ãã®å Žåãã»ã«ã«ã¯ãããŸããªçªå·ãä»ããããŸããããšãã°ã座æš
{0,0,0}ãæã€äžå€®ã®ã»ã«ããå·Šäžã«ç§»åããŠããäžã«ç§»åãããšãã»ã«ã®åº§æšãååŸãã{0,1,-1}ãŸãããã ãã{1,0,0}åã®å³ã«ç€ºãããã«ãäžå€®ã®ã»ã«ããçŽæ¥ã¢ã¯ã»ã¹ãããšãåãã»ã«ã«åº§æšããããŸãã

ã»ã«ã®åº§æšãæå®ããããã®å¥ã®ãªãã·ã§ã³
{1,0,0}ã
ãå·Šäžã-ãäžã-ãå³äžãã®ãµã€ã¯ã«ã§ä»»æã®ã»ã«ããã©ããŒã¹ãããšãåãã»ã«ã«ç§»åããŸããããã®åº§æš
{-1,1,-1}ã«ãã¯ãã«ã远å ããããã®åº§æšã®åèšã¯ã«çãããªã-1ãŸããåãæ¹åãŸãã¯å察æ¹åã«ç²Ÿç¥çã«ãã®ãããªæ©è¡ãæ°åå®è¡ãããšãä»»æã®ã»ã«ã®åº§æšãåçã®åº§æšã«å€æŽã§ããŸããããã¯ããã¯ãã«æ¯äŸã«ãã£ãŠç°ãªããŸã{-1,1,-1}ããããŸãããåãé€ãããã«ãåç䟡ã¯ã©ã¹ã§ã座æšã®ããªãã«ã代衚ãšããŠéžæããŸãããã®åèšã¯ãŒãã«çãããªããŸãããã®åº§æšã®éžæã¯ãŠããŒã¯ã§ãïŒããã蚌æããŠãã ããïŒïŒã
ã¯ã©ã¹å ã§2次å 座æšãã3次å 座æšã«ããŸãã¯ãã®éã«å€æããããã®ã¢ã«ãŽãªãºã ã«ã€ããŠããã«èª¬æããŸã
Positionã
Position(int w, int h) //
: x_{-w/2 â w % 2 - h}
, y_{w % 2 + 2 * h}
, z_{w / 2 â h} {
}
int posW() const { //
return -x_ + z_;
}
int posH() const { //
return (x_ + z_ â (x_ + z_)%2) / 2 + y_;
}
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯
(x,y,z)ãåèšããŒãã«ãªã座æšãçæããããšã«æ³šæããŠãã ããããã®å Žåã座æšå€æ(x,y,z)ã®(w,h)座æšã®ã»ããã®ããã«æ£ããåäœã¯ãïŒåã¯ãŒãã§ããå¿
èŠã¯ãããŸããïŒã
ããããã¹ãŠã®åŒãã©ã®ããã«ããŠèŠã€ããŸãããïŒç§åŠçãªçªãæ¹æ³ã«ããïŒ2次å 座æšã®1ã€ã
1ïŒã³ã³ã¹ãã©ã¯ã¿ãŒïŒã«ãã£ãŠå察æ¹åã«ã·ããããããšãã®3次å
座æšã®å€åãåæããããšã«ãã£ãŠïŒæ¹æ³ïŒã
3次å 座æšã䜿çšãããšãã»ã«ãåäžçŽç·äžã«ããããšãç°¡åã«ç¢ºèªã§ããŸããããšãã°ã2ã€ã®ã»ã«ãåã察è§ç·äž
zã«ããããšã確èªããã«ã¯ããããã®ã»ã«ãæ¥ç¶ãããã¯ãã«ãèŠã€ããŠããã®ç䟡ã¯ã©ã¹ã«æ¬¡ã®åœ¢åŒã®ãã¯ãã«ãå«ãŸããŠããããšã確èªããå¿
èŠããããŸãã{0, 0, z}..ãZã¯äœã§ãããŸããŸãã-ãã®æ°å€ã¯ã»ã«éã®è·é¢ã瀺ããŸããç§»åã®æ£ç¢ºæ§ã®ãã§ãã¯ãå®è£
ããç§»åã«äœ¿çšã§ãããã¹ãŠã®ã»ã«ãèŠã€ããã®ã¯éåžžã«ç°¡åã§ãã
ããŒãã衚ã2次å é åã«ãå³åœ¢ã®äœçœ®ã«é¢ããæ å ±ãæ ŒçŽããŸããåã»ã«ã«ãã§ã¹ããŒã¹ãããå Žåã¯ããã®ã¿ã€ããšè²ãä¿åããŸãã
ããŒãã¯ã©ã¹ã§ã®å®è£ ã§ã¯ãããŒã¹ã®ã¿ã€ãã®ã¿ãã»ã«ã«æ ŒçŽããŸãããã®ããŒãäžã®ããŒã¹ã®å¯èœãªãã¹ãŠã®åããèŠã€ããŠãåãã®æ£ç¢ºãããã§ãã¯ã§ããã¯ã©ã¹ãå¿ èŠã§ãã
ããŒã¹ã®åã
FigureMoveValidatorãã£ã®ã¥ã¢ã®çš®é¡ããšã«6ã€ã®åå«ãæã€
ã¯ã©ã¹ãäœæããŸããïŒåã¡ãœããã§ãã£ã®ã¥ã¢ã®çš®é¡ã®ã¹ã€ããã±ãŒã¹ãäœæãããšãåå«ãªãã§å®è¡ã§ããŸããïŒãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ã«ã¯ãäœçœ®ãšããŒãåç
§ã®2ã€ã®ãã©ã¡ãŒã¿ããããŸãããŸããã¯ã©ã¹ã«ã¯2ã€ã®ã¡ãœããallMovesãšãããcheckMoveãŸãã
æ¹æ³ãèããŠã¿ãŸããã
allMovesããã¹ãŠã®åããèŠã€ããããã«ãå¯èœãªå€äœã®ãã¯ãã«ã®é
åãäœæãããããééããŠã¿ãŸããããäžæ©åãããŒã¹ã®å ŽåãããŒãããé£ã³éããããããŒã¹ã®ããã»ã«ã«èœã¡ããããŠããªãããšã確èªããå¿
èŠããããŸããè€æ°ã®ã»ã«ãçŽç·ã§ç§»åããå³ã®å Žåãåã®æ¡ä»¶ãééããéã«ç§»åãã¯ãã«ã远å ããŸãã
ä»
checkMove..ãæ°åãåãçŽç·äžã«ãããã©ããã確èªããæ¹æ³ãç¥ã£ãŠããããšãèŠããŠããŸãããã®è¡ã«ä»ã®éšåããªãããšã確èªãããšãããããŒã¿ãŒïŒã«ãŒã¯ã®ã¢ããã°ïŒã®æ¢è£œã®ã¡ãœãããåŸãããŸããããŒã¹ã1ã€ã®çŽç·äžã«ããå Žåããããã®éã®è·é¢ãèŠã€ããŠãããã°ã¬ããµãŒïŒããŒã³ïŒããã£ãã§ã³ããŒïŒãã³ã°ã®ããã«æ©ãïŒãã€ã³ããªãžã§ã³ã¹ïŒãã³ã°ãã«ããã§ããªãïŒããªãã¬ãŒã¿ãŒïŒ1ã€ã®ã»ã«ãééããŠä»»æã®ã»ã«ã«ç§»åã§ããïŒã®ã¡ãœãããååŸã§ããŸããåŽïŒãçŸåšã®ãã®ãã6ã€ã®æ¹åã«æãã«ã»ã«ã«ç§»åããã¢ã°ã¬ããµïŒè±¡ã®ã¢ããã°ïŒãäŸç¶ãšããŠååšããïŒçްèãã{0, 0, 0}ã®{0, 1, 1}ãžã{0, 2, 2}ãªã©ããïŒä»¥äžã®ç»åã®ç°è²ã®ã»ã«ãåç
§ããŸãïŒããã®å³ã§ã¯ã座æšã®1ã€ããŒãã«ããŠãæ®ãã®2ã€ã®åº§æšã®çµ¶å¯Ÿå€ãçããããšã確èªã§ããŸãïŒ3次å
座æšã®ãããã§ïŒã

æ»æè ã«èããããåãæ¬¡ã«ããã®åãã
ã©ãããããçè§£ããå¿ èŠããããŸããç§»åã«å¿ èŠãªãã¹ãŠã®æ å ±ãæ ŒçŽããMoveã¯ã©ã¹ãäœæããŸãããã2ã€ã®äœçœ®ãš4ã€ã®ããŒã¹ãä¿åããããšã«ããŸãããããŒã¹ãç§»åããäœçœ®ãããŒã¹ãæ¥ãäœçœ®ãããã³ãããã®åã»ã«ã«ã©ã®ããŒã¹ãç«ã£ãŠããããç§»åãé©çšããåŸã«ã©ã®ããŒã¹ãç«ã€ãã«é¢ããæ å ±ã§ããããã«ãããç§»åå±¥æŽã·ã¹ãã ãšç§»åããŒã«ããã¯ã®å®è£ ãç°¡åã«ãªããŸãã
ã€ã³ã¿ãŒãã§ãŒã¹
建ç¯
ã¢ããªã±ãŒã·ã§ã³ã¯ncursesã³ã³ãœãŒã«ã©ã€ãã©ãªã«èšè¿°ãããŠããŸãïŒããã«ãã®ãã¥ãŒããªã¢ã«ããããŸãïŒããã®ã©ã€ãã©ãªã䜿çšãããšãã³ã³ãœãŒã«ã§ç䌌ã°ã©ãã£ãã¯ãäœæã§ããŸããããšãã°ãMidnightCommanderãšNanoã¯ããã«åºã¥ããŠããŸãã
éžæã¯éåžžã«å¥åŠã«æãããããããŸãããä»ã«ãå€ãã®ã©ã€ãã©ãªããããããçŸããã䟿å©ã§ãã¯ãã¹ãã©ãããã©ãŒã ã§ããããã¯ãåœåãã³ã³ãœãŒã«ãšã°ã©ãã£ã«ã«ã®2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããšãèšç»ããŠãããšããäºå®ã«é¢é£ããŠããŸãããããžã§ã¯ããé ä¿¡ããããŸã§ã«2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããšã¯ã§ããã代ããã«ã³ã³ãœãŒã«ããŒãžã§ã³ã§ããå€ãã®æ©èœãäœæããŸãããã¢ãŒããã¯ãã£äžã§ã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ããŸããŸãªã€ã³ã¿ãŒãã§ã€ã¹çšã«èšèšãããŠããŸãããã£ã¹ãã¬ã€ãšã³ã³ãããŒã©ãŒã®
2ã€ã®äž»èŠãªãšã³ãã£ãã£ããããŸã..ããããã³ã°ã¯ãã¬ã€ã€ãŒã«ç»åã衚瀺ããã³ã³ãããŒã©ãŒã¯ããŸããŸãªãããã³ã°ãšå éšã²ãŒã ã¢ãã«ã®éã仲ä»ããŸãã
ãã£ã¹ãã¬ã€ã¯ãã«ãŒãœã«ã®äœçœ®ãšåãã圢ç¶ã®éžæã䜿çšå¯èœãªãã£ãŒã«ãã®åŒ·èª¿è¡šç€ºãã²ãŒã ã®å®äºãªã©ããã¹ãŠã®ãŠãŒã¶ãŒæäœãåŠçããŸããããŒãã«åœ±é¿ãäžããã¢ã¯ã·ã§ã³ã¯ãã³ã³ãããŒã©ãŒãåç §ããã¢ãã«ãšã®éã§å¿ èŠãªæ å ±ãéåä¿¡ããŸãã
ãã£ã¹ãã¬ã€ã¯ç¬èªã®ããŒãžã§ã³ã®ããŒããäœæããŸãããã«ãŒãœã«ã®äœçœ®ãã»ã«ã®è²ãªã©ãå¿ èŠãªè¿œå ã®ãã©ã¡ãŒã¿ãŒããããŸãããããã³ã°ããšã«å¿ èŠãªãã©ã¡ãŒã¿ãç°ãªãããããããã®ãã©ã¡ãŒã¿ãã¡ã€ã³ã¢ãã«ã«è¿œå ããããšã¯ã§ããŸãããããšãã°ãã³ã³ãœãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãå³ã®éžæãšç§»åã¯ããŠã¹ã§è¡ããããããã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãªããã«ãŒãœã«ã®äœçœ®ãä¿åããå¿ èŠããããŸãã
ãã¬ã€ã€ãŒãç§»åã«äœ¿çšã§ãããã£ãŒã«ããç¥ãããå Žåã¯ã次ã®ããã«ãªããŸãã
- ãã¬ã€ã€ãŒã¯ã«ãŒãœã«ããã£ã®ã¥ã¢ãã£ãŒã«ãã«ç§»åããã¹ããŒã¹ããŒãæŒããŸã
- 圢ç¶ã®ãã£ãŒã«ãã¯éžææžã¿ãšããŠããŒã¯ãããŸã
- ã€ã³ã¿ãŒãã§ã€ã¹ã¯
selectCellãã³ã³ãããŒã©ãŒäžã®ã¡ãœãããåç §ããŸã - ã¡ãœãã
selectCellã¯allFigureMovesãã¢ãã«ã®ã¡ãœãããæããŸã allFigureMovesFigureMoveValidatorå©çšå¯èœãªãã¹ãŠã®åããèšç®ããäœæallFigureMovesèŠã€ãã£ã転éã¯ã³ã³ãããŒã©ãŒã«æ»ããŸã- ã³ã³ãããŒã©ã¯ããããã€ã³ã¿ãŒãã§ã€ã¹ã«æž¡ããŸã
- ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã£ãŒã«ããåæç»ãã䜿çšå¯èœãªãã£ãŒã«ãã匷調衚瀺ããŸã

ã«ãŒãœã«ã¯ããŒãã®äžå€®ãã€ãŸãæ·¡ããã«ãŒã®æ£æ¹åœ¢ã«ãããŸãããã®äœçœ®ã«ç§»åããåã«ããŠãŒã¶ãŒã¯åœ¢ç¶ãéžæããŸãããå©çšå¯èœãªç§»åã¯ç·è²ã§åŒ·èª¿è¡šç€ºãããéžæããã»ã«èªäœã¯çŽ«è²ã§è¡šç€ºãããŸãã
ãã£ãŒã«ãã¯ã©ã®ããã«æç»ãããŸããïŒ
ã³ã³ãœãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãããã¹ãè¡ã®ããé·æ¹åœ¢ã®ãŠã£ã³ããŠã«ã¬ã³ããªã³ã°ãããŸããã·ã³ãã«ãé©åãªå Žæã«é 眮ããŠè²ãä»ãããšã次ã®ãããªç»åãåŸãããŸãã

ïŒãoãã®æåã§æãããéªæªãªããã¯ãã³ïŒ ncurses
ã®é¢æ°
move(int y, int x)ã¯çŸåšã®äœçœ®ã倿Žãã颿°addch(chtype c)ã¯æåã远å ããŠçŸåšã®äœçœ®1ãå³ã«ã·ããããŸãïŒx â> x+1ïŒã
è€éãªç»åã2次å é åãšããŠä¿åãã1è¡ãã€è¡šç€ºã§ããŸããè¡ãçµäºããããçŸåšã®äœçœ®ã次ã®è¡ã®å é ã«ç§»åããŸããåçã¯ã¿ã€ãã©ã€ã¿ãŒãšéåžžã«äŒŒãŠããŸãã
ãŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã§ã¯ã端æ«ãè²ããã®ä»ã®ããã¹ã屿§ããµããŒãããŠããå Žåãã²ãŒã ã®ãã£ãŒã«ãã¯è²ä»ããããŸãã
Ncursesã䜿çšãããšãéçºè ã¯ããã¹ããã³ã³ãœãŒã«ã«åºåããããšãã«ããã¹ãã®å±æ§ïŒè²ã倪åãç¹æ» ïŒã倿Žã§ããŸãããããè¡ãã«ã¯ã次ã®ã³ãŒããèšè¿°ããŸãã
attron( *attributes* );
addch(c);
attroff( *attributes* );
åã·ã³ãã«ã«ã¯ãç¬èªã®è²ãšèæ¯è²ããããŸããææ°ã®ã³ã³ãœãŒã«ã¯æå€§256è²ããµããŒãããŠãããããéãããã»ããã§äœæ¥ããå¿ èŠããããŸããã«ã©ãŒãã¶ã€ã³ã®ç¹ã§éåžžã«æ²ããã§ãã
åºåçšã®ç»åã¯ãïŒæåââã«è¡ã£ãããã«ïŒã³ãŒãã«ä¿åããããšããããã°ã©ã ã®èµ·åæã«å¥ã®ãã¡ã€ã«ã«ä¿åããŠèªã¿åãããšãã§ããŸãããã®ããã«ãç¬èªã®ãã¡ã€ã«åœ¢åŒãèãåºããŸãã
*.btnã
ã²ãŒã ãèªã¿åã£ãŠè¡šç€ºããããã¹ãç»åãä¿åããŸããããšãã°ã圢ç¶ããŸãã¯ãçœãåã€ã/ãé»ãåã€ããšããç¢æããŸãã¯ã¡ãã¥ãŒãã¿ã³ããã®å Žåã以åã«æç»ããããã®ãäžæžãããªãããã«ãéææ§ãå¿ èŠã«ãªãå ŽåããããŸãããããè¡ãã«ã¯ãæåã®è¡
#ãšãåºåã§ç¡èŠããããééçãªãã·ã³ãã«ã®ãªã¹ãã®åŸã«ããã·ã¥ã远å ããŸãã
ããšãã°ãç»é¢ã«3ã€ã®é·æ¹åœ¢ãæãããŠãããšããŸãã

次ã®ãã¡ã€ã«ããäžå€®ã«é·æ¹åœ¢ã远å ããŸãã
#C
AAAAAAAAA
ACCCCCCCA
ACCCCCCCA
ACCCCCCCA
ACCCCCCCA
ACCCCCCCA
AAAAAAAAA
ãããŠã次ã®å³ã衚瀺ãããŸãã

ïŒããããããããããã«é»è²ã§åŒ·èª¿è¡šç€ºãããŠã
ãŸãïŒãã®åœ¢åŒã¯ãã¡ãã¥ãŒãéçºãããšãã«ç¹ã«åœ¹ç«ã¡ãŸããã
ã¡ãã¥ãŒ
ã²ãŒã ã«ã¯èšå®ãå«ãã¡ãã¥ãŒããããã²ãŒã ã®éå§åãšçµäºåŸã«æç»ãããŸãã
ã¡ãã¥ãŒãã¿ã³ã¯ãã¡ã€ã«ããèªã¿åãããŸã
*.btnããããã®ãã¿ã³ã«ã¯ã倧ãããŠçŸããããã¹ããå¿
èŠã§ããASCIIæåã䜿çšããŠçŸããæç»ããæ¹æ³ã¯ããããŸããããASCIIããã¹ããããŸããŸãªãã©ã³ãã§è¡šç€ºããããã®ãŠãŒãã£ãªãã£ã§ããfigletã¯æ¬¡ã®ããšãã§ããŸãã

ãã¿ã³ã¯ããã¡ã€ã«ããèªã¿åãããã©ãã«ãå²ã¿ãŸãã

次ã«ããããã¯äžå€®ã«é 眮ãããé çªã«åºåãããŸãã

äžéšã®ã¡ãã¥ãŒã§ã¯ã倱æããŠãããšãã°ããããã®è€éããšè²ã調æŽã§ããŸãã

ã¡ãã¥ãŒã·ã¹ãã ã®èšèšã§æãè峿·±ãéšåã¯ããã®èŠçŽ ã1ã€ã®ã·ã¹ãã ã«çµåããããšã§ããããã¯ããã«ããã¬ã¯ãµãšåŒã°ããã·ã¹ãã ã®å¥ã®èŠçŽ ã«ãã£ãŠè¡ãããŸãããã®ååã¯ãã¿ãŒããã«ãã«ããã¬ã¯ãµã«ç±æ¥ããŠããŸãã
ãã«ããã¬ã¯ãµã¯ããŠãŒã¶ãŒãæŒããããŒãåãå ¥ããçŸåšè¡šç€ºãããŠãããã¹ãŠã®ã¡ãã¥ãŒã«éä¿¡ããŸããåã¡ãã¥ãŒã¯ãããŒãã©ãåŠçããããèªåã§æ±ºå®ããŸããç¡èŠããããäœããã®æ¹æ³ã§åŠçããŸããã¡ãã¥ãŒã®åŠççµæã¯ãã«ããã¬ã¯ãµã«è¿ããããã«ããã¬ã¯ãµã¯æ¬¡ã«äœãããããæ±ºå®ããŸããã¡ãã¥ãŒãéããæ°ããã¡ãã¥ãŒãäœæããèšå®ã倿Žããã¢ããªã±ãŒã·ã§ã³ãéããŸã...
ãã®ã¢ãããŒãã¯ç§ãã¡ã®ããŒãºã«äŸ¿å©ã§ããããšãããããŸããããäžè¬çã«ã¯ååã§ã¯ãªããããããŸããã2ã€ã®ç°ãªãã¡ãã¥ãŒãåãããŒã«åå¿ãããŠãŒã¶ãŒã¯ã©ã¡ãã®ã¡ãã¥ãŒã«åå¿ããããéžæã§ããã¯ãã§ãã解決çã¯ãããŸããŸãªã¡ãã¥ãŒãåãæ¿ããããšãã§ããç¹å¥ãªããŒããŒãã·ã§ãŒãã«ããã§ããããšãã°ãtmuxã®ããã«ãããããããã¯ããéãã§ãããå¿ é ã§ã¯ãããŸããã§ããã
ããã
äžèšã®ããã«ãç§ãã¡ã®ã²ãŒã ã«ã¯ãããããããŸããåå¿è ã«ãããã©ã³ã«ãé¢çœãããããšæããŸããã
ãããã«ã€ããŠèª¬æããåã«ãããã€ãã®å®è£ ã®è©³çްã«ã€ããŠèª¬æããããšæããŸããå圢ç¶ã«éã¿ãå²ãåœãŠãŸããã倧ããã»ã©ããã®æ°åã®äŸ¡å€ã¯é«ããªããŸããåŒïŒçœãéšåã®ééã®åèšïŒ-ïŒé»ãéšåã®ééã®åèšïŒã䜿çšããŠãããŒãäžã®äœçœ®ãã©ãã ãé©åãã倿ããŸããçœããã®è¡šçŸãæå€§åããé»ãæå°åããããšã¯æçã§ãã
åãã®ããªãŒå šäœãå®å šã«èšç®ããã®ã¯é£ããäœæ¥ãªã®ã§ãæåã®æ°åã®åãã ããèšç®ããŸããïŒå ãèŠæ®ããŠã6åå ã«èšç®ãããããšãããããŸããïŒãããŒãäžã®ç¹å®ã®æ·±ãã®ãã¹ãŠã®ç¶æ ãããã©ããŒãµã«ããªãŒã®èãšèŠãªããŸããã
ã²ãŒã ã«ã¯3ã€ã®ç°ãªãã¿ã€ãã®ãããããããŸãã
RandomBotâ . .GreedyBotâ «» , , .AlphaBetaBotâ , - .
æé©åã®å®éšãéå§ãããšãããããã®ãŠããããã¹ããªãã§ã¯å®è¡ã§ããªãããšã«æ°ä»ããã®ã§ã
AlphaBetaBotãaãã®ååã®å
åŒãäœæããŸããOptimizedAlphaBetaBotãã§æé©åã®ãã¹ãŠã®ã¢ã€ãã¢ããã¹ãããOptimizedAlphaBetaBotãŠããããã¹ãã¯ã2人ã®ååã®å
åŒãåãæçšãªåããèŠã€ããããšã確èªããã®ã«åœ¹ç«ã¡ãŸãããRandomBotã¯ãããŒãäžã«ã©ã³ãã ãªãã¿ãŒã³ãçæããããšã§ãç§ãã¡ã«åœ¹ç«ã¡ãŸããããããè¡ãã«ã¯RandomBotãåæ¹ã«æ°ååå°ããŠè¡ãã ãã§ååã§ããã
åèšã§
OptimizedAlphaBetaBot ã3ã€ã®äž»èŠãªæé©åãå®è£
ãããŸããïŒããã§ã¯ããŠãŒãã£ãªãã£ã®éé ã§ç€ºãããŠããŸãïŒã
- ããŒã«ããã¯ã®äœ¿çšããã®æé©åã®åŸãç§»åããããã«ããŒããäœåºŠãã³ããŒããå¿ èŠããªããªããŸããã
-
FigureKeeper, , .std::vector. -
std::unordered_mapZobrish hashing.
äž»èŠãªæé©åã«å ããŠãããå°ããªãã®ããããŸãããããšãã°ãäžŠã¹æ¿ããåã«ãç¹å®ã®åããèæ ®ããŠããŒãäžã®äœçœ®ã®ãã¹ãŠã®å€ãèšç®ããå Žåãè€éãªãªããžã§ã¯ããäžŠã¹æ¿ããå¿ èŠ
Moveã¯ãªããåã«int'sãäžŠã¹æ¿ããå¿
èŠããããŸãã
åœåãããã€ãã®è©äŸ¡æ©èœãå®è£ ããããšãèšç»ãããŠããŸãããããšãã°ãæµã«è ãããã人ç©ã¯ååã®ã³ã¹ãã§èŠç©ããããŸãããããããããã¯éåžžã«ããããã«ãåçãããããã€ãã®ããŒã¹ã倱ãããšã倿ãããããåçŽãªéã®æ¹ããã广çã§ããããšã倿ããŸããã
ãã ãããããã¢ãŒããã¯ãã£ã¯ãæ°ããè©äŸ¡æ©èœã®è¿œå ãåŒãç¶ããµããŒãããŸãããããè¡ãã«ã¯ã次ã®3ã€ã ããå®çŸ©ããå¿ èŠããããŸãã
- äžããããå³ã®é 眮ã«ã€ããŠããŒããããã³ã¹ããèšç®ããå¿ èŠãããå Žåã«æ©èœããŸã
- ãã«ã¿é¢æ°ãç¹å®ã®ç§»åã®ã³ã¹ãããã°ããåèšç®ããå¿ èŠããããŸãã
- ã«ã¹ã¿ã ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãã®é¢æ°ã»ããã®æ°
FunctionSetã
ãããã®æŠãããªã³ã«ããŠãããã»ã¹ãèŠãããšãã§ããŸãã

åãé£æåºŠã®2ã€ã®ãããã®ã²ãŒã ïŒ6ã€ã®ãã¡ã¬ãã«4ïŒãã«ãŒãœã«ã¯ã²ãŒã å šäœã®ãã£ãŒã«ãã®äžå€®ã«ãããŸã
çµè«
ãã§ã¹ã«äŒŒãã²ãŒã ãå®è£ ããŸããããã«ãŒã«ãç°ãªããããŒããç°ãªããŸããç§ãã¡ã®å®è£ ã«ã¯æ¡åŒµã®äœå°ããããŸããIntellectorèªäœãéçºããã³å€æŽãããŠããŸããæè¿ãã«ãŒã«ãæŽæ°ãããŸããããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãŸã ãµããŒããããŠããŸãããããšãã°ãæåã®2ã¿ãŒã³ã¯äžå¿ç·ãè¶ããããšãã§ããªããªããŸããã
ããã«ãåœåèšç»ããããŸããŸãªæ©èœããããŸããããããžã§ã¯ãã®æç¹ã§ã¯å®è£ ã§ããŸããã§ãããããšãã°ããã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããã¯ãŒã¯ã²ãŒã ãèŠãããšæã£ãŠããŸãããŸããããšãã°Qtã®ãããªåªããã¯ãã¹ãã©ãããã©ãŒã ã€ã³ã¿ãŒãã§ã€ã¹ã¯åé¡ãããŸããã
ãããããããã®å šéšãŸãã¯äžéšãè¿ãå°æ¥ã«çŸããã§ãããããããŸã§ãèªãã§ãããŠããããšãïŒ
Githubãªããžããª