ã¯ããã«
ã¹ããŒãã²ãŒã ããã§ãã«ãŒãã¯ãã³ã³ãã¥ãŒã¿ãŒããŸã å®å
šã«èšç®ããŠããªã人é¡ã®ã²ãŒã ã®1ã€ã§ãã ç§åŠè
ãã³ã³ãã¥ãŒã¿ã決ããŠå€±ãããªãæŠç¥ãèŠã€ãããšãããã¥ãŒã¹ããããŸãã ãã®ã²ãŒã ã«å°å¿µããŠãã9幎éã§ãç§ã¯1ã€ã®ããã°ã©ã ã«ããåºäŒãããšãã§ããŸããã§ããã ããããç§ã®ã¹ããŒãã®çµéšããããããäžèšã®æŠç¥ãå®è¡ããããã°ã©ã ã§ãããšæ³å®ããããšãå¯èœã«ãªãã§ãããã é©ããããšã«ã60 MBããå¿
èŠãšããŸããã§ããã ãããšããåºå°ã«ããèšç·Žããããã¥ãŒã©ã«ãããã¯ãŒã¯ããã£ãã®ã§ããããïŒ ããã§ããèšç®ããããšã¯äžå¯èœã ãšã¯ä¿¡ããããŸããã 10 ^ 20ã®ããžã·ã§ã³ãããªãã®ã§ãããç§ã®ã³ã³ãã¥ãŒã¿ãŒã¯ãã®ãããªã¿ã¹ã¯ã«å¯ŸåŠã§ããŸãããïŒ ãŸããã²ãŒã ã®éå§æã«ã察æŠçžæããµãŒãã«ãäžããŠæŠè¡çåªäœã«ç«ã€æŠè¡ã¯æ¬åœã«ãããŸãããïŒïŒ ç§ã¯ãã®ãããªããã¥ãŒãèŠãããšããããŸããã 確èªã«è¡ããŸã...
çµã¿åããåé¡ã解決ããããã®ã¢ã«ãŽãªãºã ã®å®è£
æåã®è©Šã¿ã¯2幎ç®ã®çµããã«è¡ãããŸããã Cèšèªã®è³ªã®é«ãç 究ã®åŸãC ++ãåŠã¶ã®ã«å®³ã¯ãªããšæããŸããã ãã®èšèªã«é¢ããå€æ°ã®è¬çŸ©ãèŠãåŸãç§ã¯ããã€ãã®ãããžã§ã¯ããåãäžããããšæããŸããã ãããŠåœŒã¯ãã§ãã«ãŒãåãäžããã å€æ°ã现ããåŠçããããšã§ãããžã·ã§ã³ã®åççãªèšç®ã«ããå€ãã®æéãè²»ããããšãã§ããŸããã ãããã®ã¢ã¯ã·ã§ã³ãã°ã©ãã䜿çšããã¢ã¯ã·ã§ã³ã«äŸãããšããã®ã¢ã«ãŽãªãºã ã¯å¹
åªå
æ€çŽ¢ãšåŒã°ããå¯èœæ§ããããŸãã ã¢ã«ãŽãªãºã ã®åæ¢ã¯ãã°ã©ããå®å
šã«ééããããšã§ããã
ããŒãäžã®ç¶æ³ã説æãããªããžã§ã¯ãã1ã€ãããŸããã 1ã€ã®ãªããžã§ã¯ãã«ä¿åãããïŒ
class Queue { public: Queue *pnr; Queue *ppr; Map *pdb; char *action; Queue *pp; Queue *pfc; int nmd; int color; };
ããã§ã¯å¹
åªå
æ€çŽ¢ã¢ã«ãŽãªãºã ãå®è£
ãããŠãããããããŒã¿ã¯äºéã«æ¥ç¶ãããã·ãŒãã«æ ŒçŽã§ããŸãããã®å Žåãpnrããã³pprãã€ã³ã¿ãŒããã®ã³ã¬ã¯ã·ã§ã³ãå®è£
ããŸãã
pdb-ããŒãã®é
眮ãžã®ãã€ã³ã¿ãŒã
action-ãã®äœçœ®ãéæããããã«ã芪ã«ãã£ãŠè¡ãããé²æç¶æ³ã«é¢ããããŒã¿ã ããã¯ããã§ãã«ãŒã移åãããšãã®ãã§ãã«ãŒãc3 â d4ããŸãã¯åæãããšãã®ãc3ïŒe5ãã®ç§»åã®éåžžã®èšé²ã®ããã«èŠããŸããã ãã®å€æ°ã¯ãçŸåšã®ç¶æ³ãããæ£ç¢ºã«ãããã°ããããã«å¿
èŠã§ããã
pp ã pfc-芪ããã³æåã®åã®äœçœ®ãžã®ãã€ã³ã¿ãŒã ãªããªã æ€çŽ¢ã¢ã«ãŽãªãºã ã¯å¹
ã§å®è£
ãããäºéã«ãªã³ã¯ããããªã¹ãã§çæããããã¹ãŠã®äœçœ®ã¯ã次ã
ã«äžŠãã§é
眮ãããŸããã ãããã£ãŠãããŒã¿ãããªãŒã®åœ¢åŒã§ä¿åããã«ã¯ãæåã®åãžã®ãã€ã³ã¿ãŒãšããã以éã®ãã¹ãŠã®åãåã芪ãåç
§ããããã«ä¿åããã ãã§ååã§ãã ãã®ã¢ã«ãŽãªãºã ã«ããã芪ã¯åã®çµæãæœåºã§ããŸããã€ãŸããçŸåšã®ç¶æ³ãåæãããã®åããŸãã¯ãã®åããåãçããããçµæã®ã¿ã調ã¹ãããšãã§ããŸãã
nmd-ã²ãŒã ãåŒãåããšèŠãªããããŸã§ã«æ®ã£ãŠããåãã®æ°ã瀺ãæ°å€ã ããšãã°ã1人ã«å¯ŸããŠ3人ã®å¥³æ§ã®ç¶æ³ã§ã¯ãã²ãŒã ãå®äºããããã«15ã®ç§»åã®ã¿ãå²ãåœãŠãããŸãã ãã§ãã«ãŒã®æ°ãå€ãããšããã§ãã«ãŒãã¯ã€ãŒã³ã«ãªã£ãåŸããã®æ°ãåèšç®ãããŸãã
è² -誰ã®åãã¯ä»ã§ãã
ã¹ã¿ãã¯ãªãŒããŒãããŒãéåžžã«æããŠãããé¢æ°ã«ãã€ã³ã¿ãæž¡ãæ¹ãè¯ããšèããããããªããžã§ã¯ãããã©ã¡ãŒã¿ãšããŠçŽæ¥æž¡ãããšã¯é¿ããã å®è£
ã¯ç°¡åã§ããããã¥ãŒããèŠçŽ ãåãåºããŠèª¿ã¹ãåŸç¶ã®äœçœ®ãçæããŠããããã¥ãŒãã次ã®èŠçŽ ãåãåºããŠããšããããã«åã§å²ã¿ãŸãã
çµæïŒ
é²èŠ§ïŒ61.133ã¢ã€ãã
åŸ
æ©ãšã³ããªïŒ264.050ã¢ã€ãã
RAMïŒ2 GBïŒã¯ãã®ãããªããŒã¿ã§ã®ã¿çµäºããŸããã ãã®ãããªçµæã¯ãçãçµã¿åããã®åé¡ã«ã®ã¿é©ããŠããŸãã
ãããããã§ãã«ãŒã®äœçœ®ãæäœãããã®æ¹æ³ã«ãããããã°ã©ã ã®ãã³ã¢ãã®äœæ¥ãæ
éã«ãããã°ããããšãã§ããŸããã
ãããŒãžã§ã³ç®¡çã·ã¹ãã ããžã®ç§»è¡
ãã®ã¢ã«ãŽãªãºã ã§ã¯ãããŒãã«é¢ããããŒã¿ã®ä¿åã«å€ãã®ã¡ã¢ãªãè²»ããããŸããã ã¡ã¢ãªãŒã®å²ãåœãŠã«å¿
èŠãªåäœçœ®ã ããã«ãçŸåšã®ãã§ãã«ãŒã®é
眮ãããè¯ãã³ãŒãã£ã³ã°ããæ¹æ³ã«ã€ããŠã¯æãã€ããŸããã§ããã
class Checkers { public: chlive live; chstatus status; }; class PosCheckers { public: chcolor color; Checkers *ptrCheckers; }; class Map { public: PosCheckers coordinate[8][8]; };
color-ãã§ãã«ãŒã«ã©ãŒã é»ãçœããŸãã¯ç©ºã
ptrCheckers-ãã®ãã£ãŒã«ãã«ãã§ãã«ãŒããªãå Žåãã¡ã¢ãªãå²ãåœãŠãŸããã
ã¹ããŒã¿ã¹ -ã¯ã€ãŒã³ãŸãã¯ãã§ãã«ãŒã
live-ãã§ãã«ãŒã¯çããŠããŸãã ãã®ãã§ãã«ãŒãå床åæžããªãããã«ã®ã¿ã
座æš[8] [8]ã®ä»£ããã«ã座æš[8] [4]ã ããçãããšãã§ããããšãç解ããŠããŸãããç¬èªã®ã³ãŒãã®ç解ã¯éåžžã«åœ±é¿ãåããŸãã
äžè¬ã«ãããžã·ã§ã³ãç¶æããã«ã¯å€ãã®ã¡ã¢ãªãå¿
èŠã ã£ãã®ã§ããã©ããã®ããžã·ã§ã³ãç¹å®ãã責任ãã¢ã¯ã·ã§ã³ã«å²ãåœãŠãããšã«ããŸãã-ãc3-d4ããªã©ã®ããŒã¿ãå«ã芪ã®é²æç¶æ³ã®èšé²ã
ããŠããã¥ãŒããèŠçŽ ãååŸãããšãæåããå§ããŸãã ç§ãã¡ã¯ãã§ãã«ãŒã®éå§äœçœ®ãåãããã§ã«æ»ã£ãŠããããã®åäŸãåŒãä»ããåããå®è¡ããŸãã ãããã£ãŠãã©ã€ã³ã®åèŠçŽ ã®ããŒãäžã®ãã§ãã«ãŒã®é
眮ãæ§ç¯ãããŸããã
çµæïŒ
é²èŠ§ïŒ1.845.265ã¢ã€ãã
ãã¥ãŒãšã³ããªïŒ8.209.054ã¢ã€ãã
ãããŒãžã§ã³ç®¡çã·ã¹ãã ãã®æåŠã ãã£ãŒããµãŒãã«è¡ã
æ®å¿µãªãããå¹
åªå
ã®æ€çŽ¢ã«ã¯å°ãªããšãããã€ãã®é倧ãªåé¡ããããŸãããå Žåã«ãã£ãŠã¯ãåãããŒãã£ã®é
眮ãäœæãããŸããã ãããŠããã§ã«äœæãããå€ãã®ããŒã¿ãæã€ããŒãã£ãŒãèªèããã®ã¯æéãããããŸããã ãŸããã¡ã¢ãªäžè¶³ã«ãªã£ããšãã®å¯ŸåŠæ¹æ³ãæ確ã§ã¯ãããŸããã§ããã ã€ããªãã®ãŒã®é£éã埩å
ããã«ã¯ãä¿åããããã¹ãŠã®ããŒã¿ãå¿
èŠã§ããããã®ãããå¿
èŠã«å¿ããŠãã©ããããã¡ã¢ãªãããããåãããçµå±ã¯ãããªããŸããã§ããã
ã詳现ãªãæ€çŽ¢ã«ãããããŒã«ã«åé¡ïŒçµã¿åããåé¡ã®è§£æ±ºçïŒããã°ããŒãã«åé¡ïŒãããå
šäœã®èª€èšç®ïŒã«ç§»è¡ããããšãã§ããŸããã ãã®ã¢ã«ãŽãªãºã ã¯ããã§ãã«ãŒã®çŸåšã®é
眮ãèæ
®ããåå«ãçæãããããããæåã®ãã§ãã«ãŒãéžæãããããçŸåšã®ãã§ãã«ãŒã®åœ¹å²ã«å²ãåœãŠãŸãã åå«ããªãå Žåããã®äœçœ®ã§è² ããããšã瀺ãã芪ãšã®æ¬¡ã®åã決ããæ€èšããŸãã
ãŸãã女æ§ã®ååšäžã§ç¹°ãè¿ãäœçœ®ãèšç®ããªãããã«ããã¹ãŠã®èŠªã®äœçœ®ã調ã¹ãããšã«ããŸããã ããå Žåãç§ã¯ãããèæ
®ããŸãããã次ãžé²ã¿ãŸãã
çµæãç¥ãããŠããæ座ããgreatå«ã®èšæ¶ãåãé€ãããšã決å®ãããŸããã ãããã£ãŠããªãŒããŒãããŒãåé¿ããããšãã§ããŸããã æãæ·±ãèŠçŽ ãæ€çŽ¢ãããšãã«ãªãŒããŒãããŒãçºçããªãå Žåã
ãŸããäœçœ®ãä¿åããæ°ããæ¹æ³ãè¿œå ããããšã決å®ãããŸãã-圢ç¶ã®ãªã¹ãïŒ
class ListCheckers { public: ListCheckers *pnr; chcolor color; chstatus status; int x,y; };
ããã«ããããã°ããŠã¹ã®å¯èœæ§ãããè¿
éã«èŠã€ãå§ãã移åã®å¯èœæ§ããã§ãã¯ãããã§ãã«ãŒãæŽçããŸããã ããã§ããã¥ãŒã«æ ŒçŽããããäœçœ®ããªããžã§ã¯ãã«ã¯æ¬¡ã®ãã£ãŒã«ãããããŸããã
class Queue { public: ListCheckers *plch; ListChilds *pcs; chcolor color; int draw; chresult result; };
freeã³ãã³ã
ã100ïŒ
ã®ç©ºãã¡ã¢ãªãä¿èšŒããªããšã¯æã£ãŠ
ããŸããã§ãã ã ãããã°äžã«ãfreeã³ãã³ããå®è¡ããåŸãã¡ã¢ãªããŸã£ãã解æŸãããªãããšãå€æããŸããã ãã©ãŒã©ã ã®æéã®ã©ããã§ãfreeã¯OSã«ã¡ã¢ãªã®è§£æŸã«é¢ããæ瀺ã®ã¿ãäžããOSã ããã¡ã¢ãªã解æŸãããã©ããã決å®ããããšãããããŸããã äžè¬çã«ãç§ã®OSã¯ã貪欲ãã ã£ããããå¥ã®æ¹æ³ã§ã¡ã¢ãªãæäœããå¿
èŠããããŸããã æåã®ãåäŸãã®ãã§ãŒã³ãç¶æããããã«ãå¿
èŠã«å¿ããŠã¡ã¢ãªãå²ãåœãŠãŸããã ãããŠã衚瀺ãããæåã®ãåãåé€ãã代ããã«ãããã«é¢ããããŒã¿ã¯æ¬¡ã®åã«é¢ããããŒã¿ã§äžæžããããŸããã
ãã®ããã«ãã¡ã¢ãªã䜿çšããåçãªäœæ¥ãæ
åœããèŠçŽ ãéçºãããŸããã
class MainQueue { public: MainQueue* parent; MainQueue* next_record; Queue* now; int draw; };
çµæïŒ
1æ¥ã®é£ç¶æäœã®å ŽåïŒ
2.040.963ããããäœæãããŸãã
1.241.938ã²ãŒã ãé²èŠ§ãããŸãã
ã©ã³ãã ã¢ã¯ã»ã¹ã¡ã¢ãªäžã®å æå ŽæïŒ1.378 MB
ãã¡ã€ã«ãæäœãã
æ®å¿µãªããã次ã®èŠçŽ ããã®ããã«éžæãããšãåãäœçœ®ã§é·ãéããã³ã°ãããŠããŸããŸãã ç¹ã«å¥³æ§ã®ããã®èª€ç®ã§ã ãã®ããããã§ã«è¡šç€ºãããäœçœ®ã®çµæãä¿åãããããŒã¿ããŒã¹ãå®è£
ãããã£ãã®ã§ãã ãã®ãããåãããã«é¢ããããŒã¿ãä¿åããããšã«ããŸããã
ã¡ã¢ãªã®åé¡ããé¢ããŠãç§ã¯åã³ããã«ééããŸããã RAMãäžè¶³ããŠãããããå€éšã¡ãã£ã¢ã䜿çšããããšã«ããŸããã index.txtããã³queue.txtãã¡ã€ã«ã«æžã蟌ãã ãã¹ãŠã®ããžã·ã§ã³ã queue.txtã«ãåãããã«é¢ããããŒã¿ãä¿åããŸããã ãŸããindex.txtå
-ãããèå¥åãšqueue.txtå
ã®ãã®ãããã«é¢ããæ
å ±ã®å Žæãã€ãŸããªãã»ããã ããŒã¿ãå§çž®ãããã£ãã®ã§ãããèªã¿ããããŸãŸã«ããŠãããŸããã ãŸã ãã£ããã·ã¥ã©ã€ã³ãŸã§é ããšæã£ãããã§ãã ãããã£ãŠã次ã®åœ¢åŒã§ããŒã¿ãä¿åããŸããã
queue.txt : aaaaeaaaaacaaaaa aaaaeaaaaaakaaaa 50 U Aaaaaaeaaacaaaaa Aaaaaaauaacaaaaa 49 U aaaaaaeakaaaaaaa aaaaaaeacaaaaaaa 48 W Aaaaaaaaaauaaaaa 47 L ⊠index.txt : Aaaaeaaaaaaacaaa000000000000000000000 aaaaeaaaaacaaaaa000000000000000000040 aaaaeaaaaaakaaaa
ããŒãäžã§ã¯ãã²ãŒã ã»ã«ã¯5ã€ã®ç¶æ
ãåãããšãã§ããŸããçœ/é»ã®ãã§ãã«ãŒãçœ/é»ã®ã¯ã€ãŒã³ããŸãã¯ç©ºã§ãã ãããã£ãŠã2ã€ã®ã»ã«ã«ã¯ããŸããŸãªçµã¿åããã§25ã®ç¶æ
ããããŸãã ã©ãã³ã¢ã«ãã¡ãããã«ã¯26æåãããã1ã€ã®æåã§2ã€ã®ã²ãŒã ã»ã«ã®ç¶æ
ãäžåºŠã«èšè¿°ããã®ã«éåžžã«é©ããŠããããšã«æ³šæããŠãã ããã ããã¯ã32åã®ã²ãŒã ã»ã«ãåããããŒãå
šäœã16æåã®ã©ãã³ã¢ã«ãã¡ãããã§èšè¿°ã§ããããšãæå³ããŸãã ãŸãããã®äœçœ®ã§èª°ã®åããä¿åããå¿
èŠããããŸãã 次ã«ãæåã®æåã倧æåã®å Žåã移åã¯é»ã«ãªããŸãã ãŸããçŸåšã®ã©ã€ã³ãããããããžã·ã§ã³ãããŒãåãå
¥ãããŸã§ã®ç§»ååæ°ãèŠããŠããå¿
èŠããããŸãã ãŸããçµæïŒW-winãL-loseãD-drawãU-unknownã ãŸãããããã°ã¯ããã»ã©é£ãããããŸããã
çµæïŒ
2æéãããã°ã©ã ã¯4 MBã®RAMããå¿
èŠãšããŸããã§ããããæ°å°ãªãããŒãã£ãã«ãŠã³ãããŸããã queue.txtã«ã¯2918ã®ãšã³ããªãããã401 KBã§ããã index.txtãã¡ã€ã«ã«ã¯6095ã¬ã³ãŒããå«ãŸããŠãããééã¯232 KBã§ããã ãã®ãããªããŒã¹ã§ã¯ãèšç®ã§ããã®ã¯5å= 5 * 10 ^ 8ããžã·ã§ã³ã ãã§ãããç§ã®1TBãã©ã€ãã¯ååãªã¡ã¢ãªããªããšå ±åããŸããã ã¯ããããã¯éåžžã«ããã«èµ·ãããŸãã èšç®ãããäœçœ®ã¯ãã²ãŒã å
šäœã«åŒ±ã圱é¿ãåãŒããŸãã
ããŒã¿å§çž®
ãããžã§ã¯ããä¿é²ããããã®ãªãã·ã§ã³ã¯3ã€ãããããŸããã
- 5 ^ 32-æ°åã®ããŸããŸãªé
眮ã
2 * 5 ^ 32-ãã®åããäžãããã
2 *ïŒ2 * 5 ^ 32ïŒ-å æã¹ããŒã¹ã®æ倧éã¯ã9.32 * 10 ^ 22ãããã§ã ããã ããåé
眮ã§çµæã2ãããã«çããããšã瀺ãã®ã«ååã§ãã
ããã«ãéåžžã®ãããã«ã¯5 * 10 ^ 20ã®ç°ãªãäœçœ®ããããŸãã
ãããã£ãŠãçŽ2 *ïŒ2 * 5 * 10 ^ 20ïŒ= 2 * 10 ^ 21ãããã¯æ
å ±æäŸã§ãããæ®ãã®ãïŒ9,12 * 10 ^ 21ïŒã¯ããã®ããŒãã£ã§ã®ãã©ããã®ãã®ãããªé
眮ãååšããªãããšã瀺ããŸãã
1TB = 8 * 10 ^ 12ããããå©çšå¯èœ
é«éããŒã¿ã€ã³ããã¯ã¹ãç¶æããªããããã®ã¿ã¹ã¯ã®å§çž®ã¢ã«ãŽãªãºã ãéçºããå¿
èŠããããŸãã
- éåžžã®ãããã§ã¯ã5 * 10 ^ 20ã®ç°ãªãããžã·ã§ã³ããããŸãã
è¿
éãªã€ã³ããã¯ã¹äœæã®ããã«ããã®ãåäŸãã®åäœçœ®ãšçµæãä¿åããŸãã å¹³åããŠãããžã·ã§ã³ã«ã¯çŽYã®åå«ããããŸãã
åå«ãžã®ããªã³ã¯ããXãããã§ãšã³ã³ãŒãããŸããçµæã¯2ãããã§ãZã®ãšã³ããªéã®ã»ãã¬ãŒã¿ãŒã§ããåäœçœ®ã«å¯ŸããŠïŒX * Y + 2 + ZïŒããããååŸããŸãã åèšïŒX * Y + 2 + ZïŒ* 5 * 10 ^ 20ããã㯠ãåæé
眮ã§äœ¿çšããããã¹ãŠã®äœçœ®ã®ã¹ãã¬ãŒãžã«å²ãåœãŠãããå¿
èŠããããŸãã
1TB = 8 * 10 ^ 12ããããå©çšå¯èœ
é«éããŒã¿ã€ã³ããã¯ã¹ãç¶æããªããããã®ã¿ã¹ã¯ã®å§çž®ã¢ã«ãŽãªãºã ãéçºããå¿
èŠããããŸãã
- ã¬ã³ãŒãå
ã®ç¹°ãè¿ããã¿ãŒã³ãèŠã€ããŠããªãã¬ã€ãããçãã¬ã³ãŒãã«çœ®ãæããŠå®è£
ããŠã¿ãŸãããã ã¢ã«ãŽãªãºã ã¯çæ³çã«ã¯ãããã³ã³ãŒãã«äŒŒãŠããŸãã
ããã»ã©é«éã§ã¯ãªãã€ã³ããã¯ã¹äœæã«æªåœ±é¿ãåãŒããŸãã
åèšã§ãããŒã¿ãâ10^ 22ãã10 ^ 13ãããã«å§çž®ããå¿
èŠããããŸãã ãã®ãããããŒã¿ã99.9999999914163ïŒ
ã ãå§çž®ã§ããã¢ã«ãŽãªãºã ãèšè¿°ããå¿
èŠããããŸããã ããã«ãé«éãªã€ã³ããã¯ã¹äœæãç¶æããå¿
èŠãããããšããŸã èæ
®ããã«ãã©ã®ã¢ã«ãŽãªãºã ã§ããããå¯èœã§ãããšã¯æããŸããã
çµæïŒ
ãã¹ãŠã®é¢ä¿è
ã«é¢ããããŒã¿ãä¿åããããš
ã¯ãŸã£ããé©çšã
ããŸããã
ã©ã³ãã ã¢ã¯ã»ã¹ã¡ã¢ãªã§ã®ã¿ãããžã§ã¯ãã®äœæ¥ã«æ»ããŸãã ãããã»ããµãŒãã®äœæ
RAMã®ãã¡ã€ã«ã«ä¿åãããããŒã¿ãä¿åããã®ãæ
£äŸã§ããã ãããè¡ãããã«ãããŒã¿ã¹ãã¬ãŒãžæ§é ãå€æŽããããšã決å®ãããŸããã
class list_strings { public: list_strings* next; char* data; list_strings() { data = new char[17]; data[0] = '\0'; next = nullptr; } }; class Queue { public: ListCheckers *plch; list_strings *pcs; chcolor color; chresult result; int to_draw; }
ãŸããQueueãªããžã§ã¯ããæ ŒçŽããååãå€æŽãããŸããã MainQueueãæžãæããããåŸãMainQueueãæãQueueãªããžã§ã¯ããæžãæããããŸãã
ãåäŸããä¿åããããã®ãpcsããã£ãŒã«ãã¯ããAaaaaaaaacaaaaaããªã©ã®ããŒã¿ãå«ãåäžãªã³ã¯ãªã¹ããšããŠå®è£
ãããå¿
èŠã«å¿ããŠæ¡åŒµãããŸãã å²ãåœãŠãããã¡ã¢ãªãç¹°ãè¿ã䜿çšããããïŒäžââæžãæïŒãããŒã¿ãã£ãŒã«ã㯠'\ 0'-ãŒãã«çãããªãããã£ãŒã«ãã«éèŠãªæ
å ±ãå«ãŸããŠããªãããšã瀺ããŸããã ãªããªã ããªããžã§ã¯ãããå€æŽãããŸããã
çµæïŒ
æ倧䜿çšå¯èœã¡ã¢ãªé åïŒ844 KBã 7æéå®è¡ãããšã8.865.798.818ã®äœçœ®ã衚瀺ã§ããŸããã ãã ããããžã·ã§ã³ã¯ç¹°ãè¿ãããšãã§ããŸãã ãããã®çµæã¯ã蚱容å¯èœãªãªãŒãã¿ã€ã ã§åœäºè
ã®å®å
šãªèšç®ãéæããã«ã¯äžååã§ãã
ããã§ãäœçœ®ãã°ã©ã€ã³ããããããã»ããµããããã844 KBã®RAMã ããå¿
èŠã§ãããšèšããŸããã€ãŸããæ®ãã®ã¡ã¢ãªãæå¹ã«äœ¿çšã§ããŸããããšãã°ãæ¢ã«èšç®ãããäœçœ®ãèšç®ããªãããã«ããã£ãã·ã¥ã¡ã¢ãªããå®è£
ããŸãã
ããã£ãã·ã¥ããäœæãã
ã¡ã¢ãªããããŒã¿ãæéã§ååŸããããã«ãRAMã®æ倧ã¹ããŒã¹ãåããããã·ã¥ããŒãã«ãéžæãããŸããã ããã·ã¥é¢æ°ãšããŠãmd5ã¢ã«ãŽãªãºã ã®æåŸã®çªå·ãéžæããããã®å
¥åã«ã¯ãšã³ã³ãŒããããèšè¿°äœçœ®ãäžããããŸããã ã€ãŸããmd5
0237d0d0b76bcb8872ecc05a455e5dcfã®äœçœ®ãAaauaueaaacckaaaãã¯ãf * 2 ^ 12 + c * 2 ^ 8 + d * 2 ^ 4 + 5 = 15 * 4096 + 12 * 256 + 13 * 16 + 5 = 64725ã«æ ŒçŽãããŸãã
ããã·ã¥ããŒãã«å
ã®ã¬ã³ãŒãã®ã¹ãã¬ãŒãžã®åäœã¯ã»ã«ã§ããã ãã®ã¢ãããŒãã«ããããå€ããã»ã«ããããŒã¿ãåé€ãããã®ã¹ããŒã¹ãåå©çšã§ããŸãã å»æ¢ã¯ããªã³ã°ãããã¡ã䜿çšããŠå®è£
ãããŸãã
æåã®ã¢ãã¬ã¹ã§ã¯ãã»ã«No.1ãšNo.5ããã£ãã·ã¥ã«ã2çªç®ã®No.3 ...ã«ããããŠãªã³ã°ãããã¡ã«ã¯ãã»ã«ãæç³»åã«æ ŒçŽãããŸãã æ倧5åã®ã»ã«ãä¿åã§ããå Žåã1çªç®ã®ã»ã«ã¯çŸåšã®å ŽæãããåŒãåºãããã6çªç®ã®ã»ã«ã®å Žæã«é
眮ãããŸãã ãŸããæåã®ã¢ãã¬ã¹ã®ãã£ãã·ã¥ã¡ã¢ãªã«ã¯ãã»ã«çªå·5ã®ã¿ãä¿åãããŸãã
class mem_cel { public: mem_cel* pnhc; mem_cel* pphc; mem_cel* pnrb; mem_cel* pprb; chresult result; int draw; stringMap condition; };
æ¡ä»¶ãã£ãŒã«ãã¯ããã§ãã«ãŒã®æãŸããé
眮ãèå¥ããããã«å¿
èŠã§ããããã¯ãåããã£ãã·ã¥ã¢ãã¬ã¹ã«ç°ãªãé
眮ãæ ŒçŽã§ããããã§ãã
ãããŒãã£ãŒã«ãã¯ãããããªã¯ãšã¹ããèå¥ããããã«å¿
èŠã§ãã ã¡ã¢ãªã«3ã€ã®ç§»åã®ã¿ãå²ãåœãŠãããäœçœ®ã®ãããŒãå«ãŸããŠããå Žåãããã«ç§»åãããå Žåã¯ãåã¡è² ãã®ãããããå¯èœã§ãã
çµæïŒ
1æéå®è¡ãããšã10,400.590ã®ããžã·ã§ã³ã衚瀺ã§ããŸããã ãã®èª€ç®ãé«éåããããã«äœããå®è£
ããå¿
èŠããããŸãã ããããèšç®ãããšãç§ã®ã³ã³ãã¥ãŒã¿ãŒã¯ãããã10 ^ 20 / 10.400.590 = 9.6 * 10 ^ 12æé= 4 * 10 ^ 11æ¥ä»¥å
ã«10 ^ 20ã®äœçœ®ãèšç®ããŸãã
ã©ã®ã³ãŒãããçãéŠãã§ããããèŠãŠã¿ãŸãããã ãã®ç®çã®ããã«ãOProfileãããã¡ã€ã©ãŒã䜿çšããŸããã
1ã
Queue::operator!=(Queue)
ãã¥ãŒèŠçŽ ã®éãã確èªããŸãã æ°ããã¢ã€ãã ããã¥ãŒã«è¿œå ããããšãã«åŒã³åºããã3ã€ã®äœçœ®ã確èªããŸãã ãã§ãã¯ã¯ãçŸåšã®äœçœ®ã«ã€ãªãã£ããã¹ãŠã®èŠçŽ ã§å®è¡ãããŸãã
æé©åïŒããŒãäžã®ããŒã¹ã®æ°ãŸãã¯ã¹ããŒã¿ã¹ãå€æŽããå Žåã¯ãããŒã¯ããŠãã ããã ç°ãªã圢ç¶ã®ã»ãããæã€äœçœ®ã䜿çšããã«ã¯ããã§ãã¯ããªãã§ãã ããã
2ã
code_string(PosCheckers*)
åžæŸæš¡æ§ã®ã¢ã€ãã èŠçŽ ãæåã«å€æããããã«äœ¿çšãããŸãã Board_to_StringïŒMap *ãchar *ãchcolorïŒã«å¿
èŠã§ãã
æé©åïŒæåã«ãBoard_to_Stringé¢æ°ã®åŒã³åºãåæ°ãæžãããŸãïŒMap *ãchar *ãchcolorïŒ
3ã
String_to_Lcheckers(stringMap, ListCheckers**, chcolor*)
4ã
Board_to_String(Map*, char*, chcolor)
é »ç¹ã«åŒã³åºãããŸãã ãã®ãããããããžã®åŒã³åºãã®æ°ãæžããå¿
èŠããããŸãã
ããã¹ãããã§ãã«ãŒããŒã¿ã®ã³ã¬ã¯ã·ã§ã³ã«å€æããã«ã¯ãString_to_Lcheckersãå¿
èŠã§ãã
Board_to_Stringã¯ãäœçœ®ãOPã«ä¿åã§ããããã¹ãã«å€æããããã«å¿
èŠã§ãã
æé©åïŒããŒãäžã®åãäœçœ®ãè¡šãããã«3ã€ã®ããŒã¿æ§é ãæäœããå¿
èŠãããããïŒ
Lcheckers-ãã£ãŒã«ãäžã®ãã§ãã«ãŒã®ãªã¹ãã 移åã®å¯èœæ§ã確èªããããã«ãã§ãã«ãŒããã°ããéžæããå¿
èŠããããŸããã ããããŸãã¯ãããŒãã-é
å[8] [8]ã ããã¯åã®å®å
šãªãã©ã³ã¹ãå«ãŸããŠããŸãã
stringMapãŸãã¯ãStringã-ããŒã¿ãä¿åããããã®æååã ãããã£ãŠãããããŒã¿è¡šçŸããå¥ã®ããŒã¿è¡šçŸãžã®å€æã®æ°ãæžããããããŒã¿æ§é ã®æ°ãæžããããã«ããå¿
èŠããããŸãã
ããžã«ã«ãããããŒã
æãããããç§ã¯habrahabrã®è§£æ±ºçãèŠã€ããŸããã
éæ³ã®ãããããŒããšãã·ã¢ã®ãã§ãã«ãŒã§ãã ãã®èšäºã®èè
ã¯ã4ã€ã®32ãããã¯ãŒãã䜿çšããŠããŒãã«é¢ããæ
å ±ããšã³ã³ãŒãããããšãææ¡ããŠããŸãã
èšèïŒ
1ïŒçœã®ãã¹ãŠã®æ°åã®äœçœ®
2ïŒé»ã®ãã¹ãŠã®å³ã®äœçœ®
3ïŒçœããã§ãã«ãŒã®äœçœ®
4ïŒé»è²ã®ãã§ãã«ãŒã®äœçœ®
ããã«ãå³ã®äœçœ®ã«ã¯æ¬¡ã®ããã«çªå·ãä»ããããŠããŸãã
ããŠãå°ãªããšã1ã€ã®ãã§ãã«ãŒãåãããã°ããŠã¹ã®å¯èœæ§ãèŠã€ããã«ã¯ããã¹ãŠã®ãã§ãã«ãŒã®äœçœ®ã察å¿ããæ¹åã«ç§»åããã ãã§ååã§ãã
bitboard_t try_left_up = ((((checkers & possible_left_up) << 1) & enemy) << 1) & empty;
ããã«ããããã°ããŠã¹ãšããŠã®æ©äŒã®æ€çŽ¢ãç°¡åã«ãªããŸãã æ®å¿µãªããšã«ãç§ã¯ãã®èšäºã®èè
ã圌ãã©ã®ããã«å¥³æ§ãšä»äºãããããšã決ããããç解ããŠããŸããã§ããã çŸæç¹ã§ã¯ç§ã«ã¯çŸãããã®ããããŸããããã¡ãããå°æ¥çã«ä¿®æ£ããå¿
èŠããããŸãã
ãããã£ãŠãäžèšã®3ã€ã®ããŒã¿æ§é ã1ã€ã«çœ®ãæããããšãã§ããŸãã
typedef uint32_t bitboard_t; bitboard_t bbMap[4];
ãŸãããã®å€æŽã«ãããmd5ã䜿çšããã«ããã·ã¥ããŒãã«å
ã®çªå·ãæ€çŽ¢ã§ããããã«ãªããŸããã ãã®äœ¿åœã¯æ¬¡ã®åŒãå§ããããŸããã
#define HASH_NUM 0xFFFFFF hash_num = ((bbMap[0] ^ ~bbMap[1]) ^ ReverseBits(~bbMap[2] ^ bbMap[3])) & HASH_NUM;
ReverseBitsãå°ãå転ããŠãããšããã äŸïŒçªå·0x80E0ãããã0x0701ã«ãªããŸããã
çµæïŒ
1æéå®è¡ãããšã15.140.000ã®ããžã·ã§ã³ã衚瀺ã§ããŸãããããã¯ééããªãåªããŠããŸãã ããããããã¯ãŸã å®å
šãªèª€ç®ã«ã¯ååã§ã¯ãããŸããã
ä¿®æ£ããããã°ä»¥åã¯ã1æéããã754,000,000ã®ããžã·ã§ã³ã瀺ããŠããŸããã ã³ãŒãã®æ¥ãã¹ã誀æ€...
ãããžã§ã¯ãã¢ã«ãŽãªãºã ãå®è£
ããããšæããŸãã ãããã£ãŠãæ©èœã®é«éåã«éäžã§ããŸãã
æ©èœå é
ãããããª/ããããã«ãªããã®ãèªãã ã®ã§ãã³ãŒãã®ãå éãã確èªããããšã«ããŸããã äžè¬ã«ãifã¹ããŒãã¡ã³ãã®å®è¡äžã«ããã»ããµãã©ã®åœä»€ãããŒãããå¿
èŠããããã瀺ããŸãã ãã®åŸããŸãã¯åŸã®ããããã ããšãã°ãåœä»€ã®éžæã倱æããå Žåãããã»ããµã¯ã¢ã€ãã«ç¶æ
ã«ãªãããã®åŸã«æ瀺ãããåœä»€ãåŸ
æ©ããŸãã MSã³ã³ãã€ã©ãŒã§ã¯ããã®ãããªåœä»€ã¯__assumeãšåŒã°ããŸãã
ãã®ããã«åifãå®è£
ãããããã¹ãããããšã«ããŸããïŒ
__assume(selected == nullptr); if (selected != nullptr) { return selected; }
çµæïŒ
é©ããããšã«ãã³ãŒãã¯æ¬åœã«å éããŸããã æåã®1æéã§ã16.750.000ã®ããžã·ã§ã³ãèšç®ãããŸããã
ã¢ã»ã³ãã©ãŒã®æ¿å
¥ãå®è£
ããããšãæ¢ããŠããŸããã§ããã ç§ã®ã³ãŒãã¯ããã«èªããªããªããããã¯ç§ã«ãšã£ãŠéèŠãªåŽé¢ã§ãã ãããžã§ã¯ãã®äžæ以æ¥ãç§ã¯æã
æ°ã¶æã«éããŸããã
èšç®ãããåãã®æ·±ããå¶éãã
æ®å¿µãªãããããã¯ããåŒã°ããå¯èœæ§ããããŸããæéãçµã€ã«ã€ããŠããã¹ãŠã®äœçœ®ãèšç®ããããšã¯ãŸã äžå¯èœã§ããããšã«æ¬åœã«æ°ä»ããŸããã ãããã£ãŠãçµæã®æ©èœãåãã移åãªããã¿ãŒãè¿œå ããŸããã
ãã§ãã«ãŒ= +1ãã€ã³ãã女æ§= +3ãã€ã³ãã ãã®ã¢ãããŒãã¯å®å
šã«çå®ã§ã¯ãªãããšãç解ããŠããŸãããã»ãšãã©ã®å Žåãæå¹ãªå€ãæäŸããŸãã ãããã£ãŠãç§ã¯ããã«ãã ããããšã«ããŸããã
çµæïŒ
å§ãããšããã«æ»ããŸããã èšç®ãããåãã®æ°ã«å¶éããããããç§ã®ããã°ã©ã ã¯çŸåšãçµã¿åããã®åé¡ã解決ããããã®ããã°ã©ã ã§ãã ããããããã¯æãããããšã§ã¯ãªãããªããã¿ãŒã¯åé€ã§ããŸãã
å
šäœçãªçµæïŒ
æåã®1æéã§ãçŽ1,700äžã®ããžã·ã§ã³ãèšç®ãããŸãã
次ã«äœãããïŒ æ確ã§ã¯ãããŸããã
CUDAã䜿çšããŠèšç®ã䞊ååã§ããŸã...ããããããã䜿çšãããšã1å°ã®ã³ã³ãã¥ãŒã¿ãŒã§åãã¬ã€ã€ãŒã®å°ãªããšã50ã®åããèšç®ã§ãããšã¯æããŸãããããªããæŽçããªããã°ãªããªãäœçœ®ã®æ°ãç¥ãããã«...ããªãã¯ã¢ã«ãŽãªãºã ãå€æŽããå¿
èŠããããŸã...ã©ã®ããã«ïŒã¢ã€ãã¢ã¯ãããŸãã...åºåããããã¥ãŒã©ã«ãããã¯ãŒã¯ã䜿çšã§ããŸããïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãã²ãŒã ã®éå§æã«ãã§ãã«ãŒã®æ倱ãè©äŸ¡ãããšã¯æããªãããããŸã§ãããé«éãªã³ã³ãã¥ãŒã¿ãŒã®å€èŠ³/ã³ã¹ãåæžã®æ¥ãã¹ãææãåŸ
ã¡ãŸãããããããã³ãŒãã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ããé«åºŠãªæè¡ãæ¢ã«ç»å Žããã§ãããããããŠããã¥ãŒã©ã«ãããã¯ãŒã¯ãå匷ããéãééã£ãŠããã®ãããããŸããã圌ãã¯èšç®ã¢ã«ãŽãªãºã ã®å
é ã«ç«ã€ã§ããã...åŸ
ã£ãŠãèŠãŠãã ãããäžéšã®ããŒã¿ïŒæ倧ã¬ã³ããªã³ã°æ·±åºŠ-衚瀺ãããã¢ã€ãã ã®æ°1-72ãã56ã¯ãïŒæã
ã¯...æåã®ç§»åã®çœã¯ãã®åŸããããã®ãããããã©ãã¯ãŠã©ããã®ããã®7ç¹ã®æ°ããäœçœ®ãçæããèšç®ããã«ã¯ãããã«ãã¯ã€ãã®ç¬¬äºã®ç§»åãè¡ãå¿
èŠããªãããšã確èªããŠãã ãã7 + 7 * 7 ...äœãïŒ3 - 2674ãã10175 - 3570 6-11460 7-344558-95 9219-265 02610-699 71811-1 793 576 12-4352 83513-10 571 175