HW3-Hardware.pdf

‫ﯾﺎﻟﻄﯿﻒ‬
‫ﻫﻮش ﻣﺼﻨﻮﻋ‬
‫ﻧﯿﻢﺳﺎل دوم ‪٩٢٩١‬‬
‫ﻣﺪرس‪ :‬دﮐﺘﺮ ﺳﻠﯿﻤﺎﻧ‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﺗﻤﺮﯾﻦ ﺷﻤﺎرهی ﺳﻮم ‪ -‬ﻣﺨﺼﻮص داﻧﺸﺠﻮﯾﺎن ﺳﺨﺖاﻓﺰار‬
‫ﻣﻬﻠﺖ ارﺳﺎل‪ :‬اول اردﯾﺒﻬﺸﺖ‬
‫ﺗﻮﺿﯿﺢ ﺗﻤﺮﯾﻦ‬
‫• ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻘﺎﺿﺎی ﺗﻌﺪادی از داﻧﺸﺠﻮﯾﺎن ﺳﺨﺖاﻓﺰار‪ ،‬ﺑﺨﺶ ﻋﻤﻠ ﺗﻤﺮﯾﻦ ﺳﺮی ﺳﻮم ﺑﺮای آﻧﻬﺎ ﺗﻐﯿﯿﺮ ﮐﺮده اﺳﺖ و‬
‫آﻧﻬﺎ ﻣ ﺗﻮاﻧﻨﺪ ﻣﻄﺎﺑﻖ ﺑﺎ ﺗﻮﺿﯿﺤﺎت اﯾﻦ ﺗﻤﺮﯾﻦ‪ ،‬ﻋﺎﻣﻞ ﺧﻮد را ﺑﺎ زﺑﺎن ‪ C++‬ﺑﻨﻮﯾﺴﻨﺪ‪.‬‬
‫• ﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ ﭘﺮوژهی ﺟﺎوا را ﺗﺤﻮﯾﻞ دﻫﯿﺪ‪ .‬ﭘﺮوژهی ﺟﺎوا ‪ ١۵‬ﻧﻤﺮه ﺑﯿﺸﺘﺮ از ﭘﺮوژهی ‪ C++‬دارد‪.‬‬
‫• ﺗﻤﺮﯾﻦ ﺷﻤﺎ دارای دو ﺑﺨﺶ اﺳﺖ‪ :‬ﺑﺨﺶ ﺗﺌﻮری و ﺑﺨﺶ ﻋﻤﻠ ‪ .‬در ﺑﺨﺶ ﺗﺌﻮری ﺑﺎﯾﺪ ﺑﻪ ﺗﻌﺪادی ﺳﻮال در راﺑﻄﻪ ﺑﺎ‬
‫ﻓﺼﻞ ﭘﻨﺠﻢ درسﺗﺎن ﭘﺎﺳﺦ دﻫﯿﺪ‪ .‬در ﺑﺨﺶ ﻋﻤﻠ ﺑﺎﯾﺪ ﺑﺮای ﺑﺎزی اﺗﻠﻮ ﯾ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﻃﺮاﺣ ﮐﻨﯿﺪ‪.‬‬
‫• اﯾﻦ ﺗﻤﺮﯾﻦ در ﻣﺠﻤﻮع ‪ ١٠٠‬ﻧﻤﺮه دارد ﮐﻪ ‪ ٣٠‬ﻧﻤﺮه ﻣﺮﺑﻮط ﺑﻪ ﺑﺨﺶ ﺗﺌﻮری اﺳﺖ و ‪ ٧٠‬ﻧﻤﺮه ﻣﺮﺑﻮط ﺑﻪ ﺑﺨﺶ ﻋﻤﻠ‬
‫اﺳﺖ‪.‬‬
‫• در ﺻﻮرت ﻣﺸﺎﻫﺪهی ﺗﻘﻠﺐ ﺑﺮای ﻫﺮ دو ﻃﺮف ﻧﻤﺮهی ﺻﻔﺮ ﻣﻨﻈﻮر ﻣ ﺷﻮد‪.‬‬
‫• ﺑﻪ ازای ﻫﺮ روز دﯾﺮﮐﺮد در ﺗﺤﻮﯾﻞ ﺗﻤﺮﯾﻦ‪ ١٠٪ ،‬از ﻧﻤﺮهی آن ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫• ﺟﻮاب ﺗﻤﺮﯾﻦﻫﺎی ﺧﻮد را ﺑﻪ آدرس ‪ [email protected]‬ﺑﺎ ﻣﻮﺿﻮع ]‪ HW3-[student-ID‬ارﺳﺎل‬
‫ﮐﻨﯿﺪ‪ .‬ﺑﺮای ﻫﺮ ﺑﺨﺶ ﻓﺎﯾﻞﻫﺎی ﻻزم ﺑﺮای ارﺳﺎل ﺗﻮﺿﯿﺢ داده ﺷﺪه اﺳﺖ‪.‬‬
‫• در ﺻﻮرﺗ ﮐﻪ در راﺑﻄﻪ ﺑﺎ ﺗﻤﺮﯾﻦ ﺳﻮاﻟ دارﯾﺪ آن را در ﮔﺮوه درس ﺑﻪ آدرس زﯾﺮ ﻣﻄﺮح ﮐﻨﯿﺪ‪:‬‬
‫‪https://groups.google.com/forum/#!forum/sharif_ai_91-92_2‬‬
‫‪ .١‬ﺑﺨﺶ ﻋﻤﻠ ‪٧٠. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬ﻧﻤﺮه‬
‫در اﯾﻦ ﺑﺨﺶ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺮای ﺑﺎزی دو ﻧﻔﺮهی اﺗﻠﻮ )ﺑﺎ اﻧﺪﮐ ﺗﻐﯿﯿﺮ( ﺑﺎ اﺳﺘﻔﺎده از اﻟ ﻮرﯾﺘﻢ ‪ M inimax‬و روش ﺑﻬﯿﻨﻪﺳﺎزی‬
‫‪ Alpha − Beta‬ﯾ ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺑﻪ زﺑﺎن ‪ C++‬ﻃﺮاﺣ ﮐﻨﯿﺪ‪http://en.wikipedia.org/wiki/Reversi :‬‬
‫ﻗﻮاﻧﯿﻦ‬
‫در ﻟﯿﻨ ﺑﺎﻻ‪ ،‬ﻗﻮاﻧﯿﻦ ﺑﺎزی ﺑﻪ ﻫﻤﺮاه ﻧ ﺎﺗ ﻣﻔﯿﺪ در راﺑﻄﻪ ﺑﺎ اﺳﺘﺮاﺗﮋیﻫﺎی ﺑﺎزی وﺟﻮد دارد‪ .‬در اﯾﻨﺠﺎ ﺑﻪ ﻃﻮر ﺧﻼﺻﻪ ﻗﻮاﻧﯿﻦ‬
‫ﺑﺎزی را ﻣﺮور ﻣ ﮐﻨﯿﻢ‪:‬‬
‫• ﺑﺎزی روی ﯾ‬
‫ﺟﺪول ‪ ٨ × ٨‬اﻧﺠﺎم ﻣ ﺷﻮد ﮐﻪ در اﺑﺘﺪا ‪ ۴‬ﺧﺎﻧﻪی ﻣﺮﮐﺰی آن ﻣﻄﺎﺑﻖ ﺷ ﻞ ‪ ١‬زﯾﺮ ﭘﺮ ﺷﺪه اﺳﺖ‪.‬‬
‫• ﺑﺎزﯾ ﻦ ﺳﯿﺎه ﺑﺎزی را آﻏﺎز ﻣ ﮐﻨﺪ‪ .‬او ﺑﺎﯾﺪ ﻣﻬﺮهاش را ﺟﺎﯾ ﺑ ﺬارد ﮐﻪ ﺣﺪاﻗﻞ در ﯾ از راﺳﺘﺎﻫﺎی ﻋﻤﻮدی‪ ،‬اﻓﻘ ﯾﺎ‬
‫ﻗﻄﺮی ﻣﻬﺮهی ﺳﯿﺎه دﯾ ﺮی ﺑﺎﺷﺪ و ﻓﺎﺻﻠﻪی ﺑﯿﻦ اﯾﻦ دو ﻣﻬﺮهی ﺳﯿﺎه را ﺗﻤﺎﻣﺎ ﻣﻬﺮهﻫﺎی ﺳﻔﯿﺪ )ﮐﻪ ﺗﻌﺪاد آﻧﻬﺎ ﺣﺪاﻗﻞ‬
‫ﯾ اﺳﺖ( ﭘﺮ ﮐﺮده ﺑﺎﺷﺪ‪ .‬ﺑﻌﺪ از اﯾﻦ ﺣﺮﮐﺖ ﺗﻤﺎﻣ اﯾﻦ ﻣﻬﺮهﻫﺎی ﺳﻔﯿﺪ )در ﻫﻤﻪی راﺳﺘﺎﻫﺎی ﻋﻤﻮدی‪ ،‬اﻓﻘ و ﻗﻄﺮی(‬
‫رﻧ ﺷﺎن ﺳﯿﺎه ﻣ ﺷﻮد‪.‬‬
‫• ﺑﻌﺪ از ﺑﺎزﯾ ﻦ ﺳﯿﺎه‪ ،‬ﻧﻮﺑﺖ ﺑﺎزﯾ ﻦ ﺳﻔﯿﺪ ﻣ ﺷﻮد و ﺑﻪ ﺷ ﻞ ﻣﺸﺎﺑﻪ ﺣﺮﮐﺖ ﺧﻮد را اﻧﺠﺎم ﻣ دﻫﺪ و ﻫﻤﯿﻨﻄﻮر ﺑﺎزی ﺑﻪ‬
‫ﺷ ﻞ ﻧﻮﺑﺘ اداﻣﻪ ﭘﯿﺪا ﻣ ﮐﻨﺪ‪.‬‬
‫‪١‬‬
‫• اﮔﺮ ﯾ‬
‫از ﺑﺎزﯾ ﻨﺎن ﻧﺘﻮاﻧﺪ ﺣﺮﮐﺘ اﻧﺠﺎم دﻫﺪ ﺑﺎزی را ﺑﺎزﯾ ﻦ دﯾ ﺮ اداﻣﻪ ﻣ دﻫﺪ‪.‬‬
‫• ﺑﺎزی وﻗﺘ ﺗﻤﺎم ﻣ ﺷﻮد ﮐﻪ ﻫﯿﭻ ﯾ از ﺑﺎزﯾ ﻨﺎن ﻧﺘﻮاﻧﺪ ﺣﺮﮐﺘ اﻧﺠﺎم دﻫﺪ‪ .‬در اﯾﻦ ﺻﻮرت ﺑﺮﻧﺪهی ﺑﺎزی ﮐﺴ اﺳﺖ‬
‫ﮐﻪ ﺗﻌﺪاد ﻣﻬﺮهﻫﺎی ﺑﯿﺸﺘﺮی داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫• ﺑﺮای اﯾﻦ ﺗﻤﺮﯾﻦ‪ ،‬ﯾ‬
‫ﻗﺎﻧﻮن اﺿﺎﻓﻪ دارﯾﻢ و آن اﯾﻦ اﺳﺖ ﮐﻪ ﺣﻖ ﮔﺬاﺷﺘﻦ ﻣﻬﺮه در ‪ ۴‬ﺧﺎﻧﻪی ﮔﻮﺷﻪی ﺟﺪول را ﻧﺪارﯾﻢ‪.‬‬
‫ﺷ ﻞ ‪ :١‬ﺻﻔﺤﻪی ﺑﺎزی در ﻟﺤﻈﻪی ﺷﺮوع‬
‫ورودی و ﺧﺮوﺟ‬
‫ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ در ﻗﺎﻟﺐ ﯾ ﻓﺎﯾﻞ ﺑﻪ اﺳﻢ ‪ Student-ID.cpp‬ﻧﻮﺷﺘﻪ ﺷﻮد‪.‬‬
‫ﮐﺪ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺎ اﺳﺘﻔﺎده از ﮐﺎﻣﭙﺎﯾﻠﺮ ‪ g++‬ﮐﺎﻣﭙﺎﯾﻞ ﺷﻮد‪ ،‬درﻏﯿﺮ اﯾﻦ ﺻﻮرت ﻧﻤﺮهی اﯾﻦ ﺑﺨﺶ ﺻﻔﺮ ﻟﺤﺎظ ﻣ ﺷﻮد‪ .‬ﺑﺮای‬
‫اﻃﻤﯿﻨﺎن ﻣ ﺗﻮاﻧﺪ از ﮐﺎﻣﭙﺎﯾﻠﺮﻫﺎی آﻧﻼﯾﻦ اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ ﯾ رﺷﺘﻪ را ﺑﻪ ﻋﻨﻮان ﭘﺎراﻣﺘﺮ اول ﺑ ﯿﺮد‪ .‬در ﺻﻮرﺗ ﮐﻪ اﯾﻦ رﺷﺘﻪ ﻣﻘﺪارش ‪ black‬ﺑﺎﺷﺪ ﺷﻤﺎ ﺑﺎزﯾ ﻦ ﺳﯿﺎه‬
‫ﻫﺴﺘﯿﺪ‪ .‬در ﺻﻮرﺗ ﮐﻪ ﻣﻘﺪارش ‪ white‬ﺑﺎﺷﺪ ﺷﻤﺎ ﺑﺎزﯾ ﻦ ﺳﻔﯿﺪ ﻫﺴﺘﯿﺪ )ﺑﺎزﯾ ﻦ ﺳﯿﺎه اوﻟﯿﻦ ﺣﺮﮐﺖ را اﻧﺠﺎم ﻣ دﻫﺪ(‪ .‬ﻧﺤﻮهی‬
‫ﺧﻮاﻧﺪن ﭘﺎراﻣﺘﺮ در اﯾﻦ ﻟﯿﻨ ﺗﻮﺿﯿﺢ داده ﺷﺪه اﺳﺖ‪http://www.cplusplus.com/articles/DEN36Up4/ :‬‬
‫ﺑﻌﺪاز اﯾﻨ ﻪ رﻧ ﺧﻮد را ﺗﺸﺨﯿﺺ دادﯾﺪ ﺑﺎﯾﺪ ﺑﺮاﺳﺎس اﯾﻨ ﻪ ﻧﻮﺑﺖ ﺧﻮدﺗﺎن اﺳﺖ ﯾﺎ ﻧﻮﺑﺖ ﺣﺮﯾﻒ‪ ،‬ﯾ از دوﮐﺎر زﯾﺮ را اﻧﺠﺎم‬
‫دﻫﯿﺪ‪:‬‬
‫• اﮔﺮ ﻧﻮﺑﺖ ﺷﻤﺎ اﺳﺖ‪ ،‬ﺑﺎﯾﺪ ﺣﺮﮐﺖ ﺧﻮد را ﺑﻪ ﺷ ﻞ ﯾ ﺟﻔﺖ ﻋﺪد در ﺧﺮوﺟ اﺳﺘﺎﻧﺪارد )‪ (stdout‬ﭼﺎپ ﮐﻨﯿﺪ‪ .‬ﻋﺪد‬
‫اول ﺷﻤﺎرهی ﺳﻄﺮی اﺳﺖ ﮐﻪ در آن ﻣﻬﺮه ﻗﺮار ﻣ دﻫﯿﺪ‪ .‬ﻋﺪد دوم ﺷﻤﺎرهی ﺳﺘﻮن آن ﻣﻬﺮه اﺳﺖ‪ .‬دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ‬
‫ﺑﻌﺪاز ﭼﺎپ ﺣﺮﮐﺖ ﺧﻮد ﺣﺘﻤﺎ ﺧﺮوﺟ اﺳﺘﺎﻧﺪارد را ‪ flush‬ﮐﻨﯿﺪ‪ .‬ﺑﺮای اﻃﻼع ﺑﯿﺸﺘﺮ در ﻣﻮرد ﻓﻼش ﮐﺮدن ﺑﻪ اﯾﻦ ﻟﯿﻨ‬
‫ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪http://www.cplusplus.com/reference/ostream/ostream/flush/ :‬‬
‫• اﮔﺮ ﻧﻮﺑﺖ ﺣﺮﯾﻒ ﺷﻤﺎ اﺳﺖ‪ ،‬ﺑﺎﯾﺪ ﺣﺮﮐﺖ ﺣﺮﯾﻒ ﺧﻮد را از ورودی اﺳﺘﺎﻧﺪارد )‪ (stdin‬ﺑﺨﻮاﻧﯿﺪ )ﻣﺸﺎﺑﻪ ﻓﺮﻣﺖ ﺑﺎﻻ(‪.‬‬
‫در ﻫﺮ ﻣﺮﺣﻠﻪ اﮔﺮ ﺑﺎزﯾ ﻦ ﺷﻤﺎ ﻗﺎدر ﺑﻪ ﺣﺮﮐﺖ ﻧﺒﻮد‪ ،‬ﻧﺒﺎﯾﺪ ﻣﻘﺪاری در ﺧﺮوﺟ ﭼﺎپ ﮐﻨﺪ‪ .‬ﯾﻌﻨ ﺑﺎﯾﺪ دوﺑﺎر ﭘﺸﺖ ﺳﺮ ﻫﻢ از‬
‫ورودی ﺑﺨﻮاﻧﺪ‪ .‬ﻫﻤﭽﻨﯿﻦ اﮔﺮ ﺑﺎﯾ ﻦ ﺣﺮﯾﻒ ﻗﺎدر ﺑﻪ ﺣﺮﮐﺖ ﻧﺒﺎﺷﺪ‪ ،‬ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﻪ ﻃﻮر ﺧﻮدﮐﺎر ﺣﺮﮐﺖ ﺑﻌﺪی را ﻫﻢ‬
‫ﭼﺎپ ﮐﻨﺪ و ﻣﻨﺘﻈﺮ ﺣﺮﮐﺖ ﺣﺮﯾﻒ ﻧﻤﺎﻧﺪ‪ .‬ﯾﻌﻨ ﺑﺎﯾﺪ دو ﺣﺮﮐﺖ در ﺧﺮوﺟ ﭼﺎپ ﮐﻨﺪ‪ .‬درﻏﯿﺮ اﯾﻦ ﺻﻮرت ﻧﻤﺮهی ﺻﻔﺮ ﺑﻪ‬
‫ﻋﺎﻣﻞ ﺷﻤﺎ ﺗﻌﻠﻖ ﻣ ﮔﯿﺮد‪.‬‬
‫ﻫﻤﭽﻨﯿﻦ ﺑﻌﺪاز ﻫﺮ ﺣﺮﮐﺖ‪ ،‬ﺑﺎﯾﺪ وﺿﻌﯿﺖ ﻓﻌﻠ ﺑﺎزی را در ﺧﺮوﺟ اﺳﺘﺎﻧﺪارد ﺧﻄﺎ )‪ (stderr‬ﺑﻪ ﺷ ﻞ ﺟﺪوﻟ از ﮐﺎراﮐﺘﺮﻫﺎ‬
‫ﻧﻤﺎﯾﺶ دﻫﯿﺪ‪ .‬ﻧﺤﻮهی ﻧﻤﺎﯾﺶ ﺑﻪ اﯾﻦ ﺷ ﻞ اﺳﺖ ﮐﻪ ﻫﺮ ﺳﻄﺮ را در ﯾ ﺧﻂ ﻣ ﮐﺸﯿﺪ و ﻣﻄﺎﺑﻖ ﻟﯿﺴﺖ زﯾﺮ ﺑﻪ ازای ﻫﺮ ﺧﺎﻧﻪ‪،‬‬
‫ﮐﺎراﮐﺘﺮ ﻣﻨﺎﺳﺒﺶ را ﭼﺎپ ﻣ ﮐﻨﯿﺪ‪:‬‬
‫‪٢‬‬
‫• ﺑﺮای ‪ ۴‬ﺧﺎﻧﻪی ﮔﻮﺷﻪی ﺟﺪول ﻓﺎﺻﻠﻪی ﺧﺎﻟ )‪ (space‬ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫• ﺑﺮای ﺧﺎﻧﻪﻫﺎﯾ ﮐﻪ ﺗﻮﺳﻂ ﺑﺎزﯾ ﻦ ﺳﯿﺎه اﺷﻐﺎل ﺷﺪهاﻧﺪ ﮐﺎراﮐﺘﺮ ‪ X‬را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫• ﺑﺮای ﺧﺎﻧﻪﻫﺎﯾ ﮐﻪ ﺗﻮﺳﻂ ﺑﺎزﯾ ﻦ ﺳﻔﯿﺪ اﺷﻐﺎل ﺷﺪهاﻧﺪ ﮐﺎراﮐﺘﺮ ‪ O‬را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫• ﺑﺮای ﺑﻘﯿﻪی ﺧﺎﻧﻪﻫﺎ ﮐﺎراﮐﺘﺮ _ )‪ (underline‬را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ ﺑﯿﻦ ﮐﺎراﮐﺘﺮﻫﺎی ﯾ‬
‫ﺳﻄﺮ ﻓﺎﺻﻠﻪی اﺿﺎﻓﻪ ﭼﺎپ ﻧ ﻨﯿﺪ‪.‬‬
‫ﻧﻤﺮهدﻫ ‪ ،‬ﺗﻮﺿﯿﺤﺎت ﺗ ﻤﯿﻠ و ﻧﺤﻮهی ارﺳﺎل ﺗﻤﺮﯾﻦ‬
‫• ‪ ٢٠‬ﻧﻤﺮهی اﯾﻦ ﺑﺨﺶ ﻣﺮﺑﻮط ﺑﻪ ﺗﺎﺑﻊ ارزﯾﺎﺑ ﺷﻤﺎ اﺳﺖ‪ .‬ﻟﻄﻔﺎ ﺗﻮﺿﯿﺢ ﻣﺨﺘﺼﺮی در ﺣﺪ دو‪-‬ﺳﻪ ﭘﺎراﮔﺮاف در ﻣﻮرد‬
‫ﺗﺎﺑﻊ ارزﯾﺎﺑ ﺧﻮد ﺑﺪﻫﯿﺪ و در ﯾ ﻓﺎﯾﻞ ‪ pdf‬ﺟﺪاﮔﺎﻧﻪ ارﺳﺎل ﮐﻨﯿﺪ‪ .‬ﻫﻤﭽﻨﯿﻦ در ﺻﻮرﺗ ﮐﻪ ﺗ ﻨﯿ ﺧﺎﺻ ﺑﺮای ﺑﻬﺒﻮد‬
‫ﺳﺮﻋﺖ ﺟﺴﺘﺠﻮ )ﻣﺜﻞ ‪ Move-Ordering‬ﯾﺎ ‪ ( Lookup Table‬اﻧﺠﺎم دادهاﯾﺪ در اﯾﻦ ﻓﺎﯾﻞ ذﮐﺮ ﮐﻨﯿﺪ‪.‬‬
‫• ‪ ۵٠‬ﻧﻤﺮهی اﯾﻦ ﺑﺨﺶ ﻣﺮﺑﻮط ﺑﻪ ﻋﻤﻠ ﺮد ﻋﺎﻣﻞ ﻫﻮﺷﻤﻨﺪ ﺷﻤﺎ در ﻣﻘﺎﺑﻞ ﻋﺎﻣﻞ ﺳﺎﯾﺮ دوﺳﺘﺎنﺗﺎن اﺳﺖ‪ .‬درواﻗﻊ ﻫﻤﻪی‬
‫ﻋﺎﻣﻞﻫﺎﯾ ﮐﻪ داﻧﺸﺠﻮﯾﺎن ارﺳﺎل ﻣ ﮐﻨﻨﺪ ﺑﺎ ﻫﻢ ﺑﺎزی ﻣ ﮐﻨﻨﺪ و ﺑﺮاﺳﺎس ﺗﻌﺪاد دﻓﻌﺎت ﺑﺮد ﻫﺮ ﻋﺎﻣﻞ‪ ،‬اﻣﺘﯿﺎزی ﺑﻪ آن‬
‫ﺗﻌﻠﻖ ﻣ ﮔﯿﺮد‪.‬‬
‫• ﮐﺪ ﺷﻤﺎ ﺑﺎﯾﺪ ﻫﺮ ﺣﺮﮐﺖ ﺧﻮد را در زﻣﺎن ﺣﺪاﮐﺜﺮ ﯾ ﺛﺎﻧﯿﻪ )روی ﺳﯿﺴﺘﻤ ﺑﺎ ﭘﺮدازﺷ ﺮ ‪ core i7‬و ‪۴‬ﮔﯿ ﺎﺑﺎﯾﺖ رم(‬
‫اﻧﺠﺎم دﻫﺪ‪ .‬در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﺑﺎزﻧﺪهی ﺑﺎزی ﻣﺤﺴﻮب ﻣ ﺷﻮد‪ .‬ﺑﻪ ﻫﻤﯿﻦ ﻋﻠﺖ ﺑﺮای اﻃﻤﯿﻨﺎن ﺗﻮﺻﯿﻪ ﻣ ﺷﻮد ﺣﺪ‬
‫ﮐﻤﺘﺮی را درﻧﻈﺮ ﺑ ﯿﺮﯾﺪ‪.‬‬
‫• ﻋﺎﻣﻞ ﺷﻤﺎ ﻧﺒﺎﯾﺪ ﺑﻪ ﻫﯿﭻ ﻧﺤﻮی ﺑﻪ ﺷ ﻞ ‪ Multi Thread‬ﮐﺎر ﮐﻨﺪ‪ .‬ﻫﻤﭽﻨﯿﻦ ﻧﺒﺎﯾﺪ ﻗﺴﻤﺖﻫﺎی دﯾ ﺮ ﮐﺪ را ﺗﻐﯿﯿﺮ دﻫﺪ‬
‫)ﻣﺜﻼ ﺑﺎ اﺳﺘﻔﺎده از ‪ .( Reflection‬ﺑﻪ ﻃﻮر ﮐﻠ ﻫﯿﭻ ﮐﺎر ﻣﺸ ﻮک و ﺧﺎرج از ﻋﺮﻓ اﻧﺠﺎم ﻧﺪﻫﯿﺪ! ‪(:‬‬
‫• در ﺻﻮرﺗ ﮐﻪ در ﮐﺪﺗﺎن از ﻣﻮﻟﺪ اﻋﺪاد ﺗﺼﺎدﻓ اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﺪ‪ ،‬ﺣﺘﻤﺎ ﺑﺮای آن ﯾ‬
‫ﻋﺎﻣﻞﺗﺎن در اﺟﺮاﻫﺎی ﻣﺨﺘﻠﻒ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﻋﻤﻠ ﺮد ﯾ ﺴﺎن داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪ seed‬ﺛﺎﺑﺖ ﺗﻌﺮﯾﻒ ﮐﻨﯿﺪ ﺗﺎ‬
‫• در ﺻﻮرت ﻣﺸﺎﻫﺪهی ﺑﺎگ و ﯾﺎ ﺑﺮوز ﻣﺸ ﻠ در ﮐﺪ ﭘﺮوژه‪ ،‬ﻟﻄﻔﺎ ﺑﻪ دﺳﺘﯿﺎر ﻣﺮﺑﻮﻃﻪی ﺗﻤﺮﯾﻦ )ﻋﻠ ﺑﺎﺑﺎﯾ ( ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‬
‫و ﯾﺎ ﺑﺎ ﻣﻮﺿﻮع ‪ HW3-prblem‬اﯾﻤﯿﻞ ﺑﺰﻧﯿﺪ‪.‬‬
‫• ﺑﺮای ﺑﺨﺶ ﻋﻤﻠ ﺑﺎﯾﺪ دو ﻓﺎﯾﻞ ارﺳﺎل ﮐﻨﯿﺪ‪ .‬ﯾ ﻓﺎﯾﻞ ‪ Student-ID.cpp‬و دﯾ ﺮی ﯾ ﻓﺎﯾﻞ ‪ pdf‬ﮐﻪ در آن ﺗﺎﺑﻊ‬
‫ارزﯾﺎﺑ ﺧﻮد ﺑﻪ ﻫﻤﺮاه ﺑﻘﯿﻪی روشﻫﺎﯾ ﮐﻪ ﺑﺮای ﺑﻬﯿﻨﻪﺳﺎزی اﺳﺘﻔﺎده ﮐﺮدهاﯾﺪ را ﺣﺪاﮐﺜﺮ در ﯾ ﺻﻔﺤﻪ ﺗﻮﺿﯿﺢ دادهاﯾﺪ‪.‬‬
‫‪ .٢‬ﺑﺨﺶ ﺗﺌﻮری ‪ ٣٠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬ﻧﻤﺮه‬
‫ﺑﺮای اﯾﻦ ﺑﺨﺶ ﺗﻌﺪادی ﺳﻮال ﺗﺸﺮﯾﺤ وﺟﻮد دارد‪ .‬ﻟﻄﻔﺎ ﭘﺎﺳﺦ ﺑﻪ ﻫﻤﻪی ﺳﻮالﻫﺎ را در ﯾ‬
‫ﻓﺎﯾﻞﻫﺎی ﺑﺨﺶ ﻋﻤﻠ ارﺳﺎل ﮐﻨﯿﺪ‪ .‬ﻟﻄﻔﺎ ﺑﺮای ﻫﺮ ﺳﻮال ﺣﺪاﮐﺜﺮ ﯾ ﭘﺎراﮔﺮاف ﺗﻮﺿﯿﺢ دﻫﯿﺪ‪.‬‬
‫ﻓﺎﯾﻞ ‪ pdf‬ﺑﻨﻮﯾﺴﯿﺪ و ﺑﻪ ﻫﻤﺮاه‬
‫ﺳﻮال ‪:١‬‬
‫در ﻣﻮرد درﺳﺖ ﯾﺎ ﻧﺎدرﺳﺖ ﺑﻮدن ﻋﺒﺎرات زﯾﺮ ﺗﻮﺿﯿﺢ دﻫﯿﺪ‪:‬‬
‫• در درﺧﺖ ﺟﺴﺘﺠﻮی ‪ minimax‬ﺑﺎ اﺳﺘﻔﺎده از ﻫﺮس ‪ ،Alpha-Beta‬ﭼﻮن ﺑﻌﻀ از ﮔﺮهﻫﺎ را ﺑﺮرﺳ ﻧﻤ ﮐﻨﯿﻢ‪ ،‬ﻣﻘﺪاری‬
‫ﮐﻪ ﺑﺮای رﯾﺸﻪ ﺑﻪ دﺳﺖ ﻣ آورﯾﻢ ﻣ ﺗﻮاﻧﺪ ﮐﻤﺘﺮ ﯾﺎ ﺑﯿﺸﺘﺮ از ﺣﺎﻟﺘ ﺑﺎﺷﺪ ﮐﻪ از اﯾﻦ ﻫﺮس اﺳﺘﻔﺎده ﻧﻤ ﮐﻨﯿﻢ‪.‬‬
‫• در درﺧﺖ ﺟﺴﺘﺠﻮی ‪ minimax‬ﺑﺎ اﺳﺘﻔﺎده از ﻫﺮس ‪ ،Alpha-Beta‬ﭼﻮن ﺳﺮﻋﺖ ﺟﺴﺘﺠﻮ ﺑﯿﺸﺘﺮ ﻣ ﺷﻮد‪ ،‬ﻣﻘﺪاری ﮐﻪ‬
‫ﺑﺮای رﯾﺸﻪ ﺑﺪﺳﺖ ﻣ آورﯾﻢ ﻧﺰدﯾ ﺗﺮ ﺑﻪ ﻣﻘﺪار واﻗﻌ رﯾﺸﻪ اﺳﺖ‪.‬‬
‫‪٣‬‬
‫ﺳﻮال ‪:٢‬‬
‫ﻓﺮض ﮐﻨﯿﺪ در ﺑﺎزی اﺗﻠﻮ ﺣﺮﯾﻒ ﺷﻤﺎ‪ RandomAI ،‬ﺑﺎﺷﺪ‪ .‬ﯾﻌﻨ از ﺑﯿﻦ ﻫﻤﻪی اﻧﺘﺨﺎبﻫﺎی ﻣﻤ ﻦ ﯾ را ﺑﺎ اﺣﺘﻤﺎل ﻣﺴﺎوی‬
‫اﻧﺘﺨﺎب ﮐﻨﺪ‪ .‬در اﯾﻦ ﺣﺎﻟﺖ‪ ،‬ﺑﺮای ﻣﺤﺎﺳﺒﻪی ارزش وﺿﻌﯿﺖ ﺑﺎزی ﺑﺎﯾﺪ از اﻟ ﻮرﯾﺘﻢ ‪ expectimax‬ﺑﻪ ﺟﺎی ‪ minimax‬اﺳﺘﻔﺎده‬
‫ﮐﻨﯿﻢ‪ .‬آﯾﺎ ارزش وﺿﻌﯿﺖ ﺑﺎزی در اﯾﻦ ﺣﺎﻟﺖ )ﺣﺎﻟﺘ ﮐﻪ ﺣﺮﯾﻒ ﺗﺼﺎدﻓ ﺑﺎزی ﻣ ﮐﻨﺪ(‪ ،‬ﻣ ﺗﻮاﻧﺪ اﮐﯿﺪا ﮐﻤﺘﺮ از ﺣﺎﻟﺘ ﺑﺎﺷﺪ‬
‫ﮐﻪ ﺣﺮﯾﻒ ﮐﺎﻣﻼ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﺪ )و ﺷﻤﺎ درﺧﺖ ‪ minimax‬را ﺣﺴﺎب ﻣ ﮐﻨﯿﺪ(؟‬
‫ﺳﻮال ‪:٣‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﯾ ﺑﺎزی ﺳﻪ ﻧﻔﺮه دارﯾﻢ‪ .‬ﻫﻤﭽﻨﯿﻦ ﯾ ﺗﺎﺑﻊ ارزﯾﺎﺑ دارﯾﻢ ﮐﻪ ﺑﻪ ازای ﻫﺮ وﺿﻌﯿﺖ ﺳﻪ ﻋﺪد ﺑﺮﻣ ﮔﺮداﻧﺪ ﮐﻪ ﻧﺸﺎﻧ ﺮ‬
‫ﻣﯿﺰان ارزش آن وﺿﻌﯿﺖ ﺑﺮای ﻫﺮﯾ از ﺑﺎزﮐﻨﺎن اﺳﺖ‪ .‬ﺑﺎ ﻓﺮض اﯾﻨ ﻪ ﻫﺮ ﺳﻪ ﺑﺎزﯾ ﻦ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﻨﺪ‪ ،‬اﻟ ﻮرﯾﺘﻤ ﻣﺸﺎﺑﻪ‬
‫اﻟ ﻮرﯾﺘﻢ ‪ minimax‬اراﺋﻪ ﮐﻨﯿﺪ ﮐﻪ در ﯾ وﺿﻌﯿﺖ ﻣﺸﺨﺺ‪ ،‬ﺑﻬﺘﺮﯾﻦ ﺣﺮﮐﺖ را ﺑﺮای ﺑﺎزﯾ ﻦ اول ﻣﺸﺨﺺ ﮐﻨﺪ‪.‬‬
‫ﺳﻮال ‪:۴‬‬
‫در ﺳﻮال ﻗﺒﻞ‪ ،‬اﮔﺮ ﺑﺪاﻧﯿﻢ ﺑﺎزﯾ ﻦ اول ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﺪ‪ ،‬وﻟ ﺑﺎزﯾ ﻨﺎن دوم و ﺳﻮم ﻏﯿﺮ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﺘﺪ‪ ،‬آﯾﺎ اﻟ ﻮرﯾﺘﻢ داده‬
‫ﺷﺪه ﻣ ﺗﻮاﻧﺪ ﺗﻀﻤﯿﻦ ﮐﻨﺪ ﮐﻪ ﻧﺘﯿﺠﻪی ﺑﺎزی ﺑﺪﺗﺮ از ﺣﺎﻟﺘ ﮐﻪ ﺑﺪاﻧﯿﻢ ﻫﻤﻪ ﺑﻬﯿﻨﻪ ﺑﺎزی ﻣ ﮐﻨﻨﺪ ﻧﻤ ﺷﻮد؟ ﯾﻌﻨ ﺑﺎزﯾ ﻦ اول‬
‫ﺣﺪاﻗﻞ ﺑﻪ ﻣﯿﺰاﻧ ﮐﻪ در ﺣﺎﻟﺖ ﻗﺒﻞ ﺳﻮد ﻣ ﮐﺮد‪ ،‬در اﯾﻦ ﺣﺎﻟﺖ ﺳﻮد ﻣ ﮐﻨﺪ؟‬
‫ﺳﻮال ‪:۵‬‬
‫ﺷ ﻞ زﯾﺮ ﯾ درﺧﺖ ‪ minimax‬را ﻧﺸﺎن ﻣ دﻫﺪ ﮐﻪ ﻣﻘﺪار ﯾ از ﺑﺮگﻫﺎی آن ﻧﺎﻣﻌﻠﻮم )‪ (x‬اﺳﺖ‪ .‬ﺑﺎ ﻓﺮض اﯾﻨ ﻪ ﺑﺎزﯾ ﻦ‬
‫اول‪ ،‬ﺑﺎزﯾ ﻦ ﺑﯿﺸﯿﻨﻪ ﺑﺎﺷﺪ و ﺑﺎزﯾ ﻦ دوم‪ ،‬ﺑﺎزﯾ ﻦ ﮐﻤﯿﻨﻪ‪ ،‬ﺑﻪ ازای ﭼﻪ ﻣﻘﺎدﯾﺮی از ‪ ،x‬ﺑﺎزﯾ ﻦ اول ‪ Action1‬را اﻧﺠﺎم ﻣ دﻫﺪ؟‬
‫ﺷ ﻞ ‪ :٢‬درﺧﺖ ‪ minimax‬ﯾ‬
‫ﻣﻮﻓﻖ و ﭘﺎﯾﺪار ﺑﺎﺷﯿﺪ‪.‬‬
‫‪۴‬‬
‫ﺑﺎزی‬