<prompt> Chukulia sheria zifuatazo ni za mchezo wa tic-tac-toe kwenye ubao wa n x n kati ya wachezaji wawili:1. Uhamishaji umehakikishiwa kuwa halali na umewekwa kwenye kizuizi kisicho na kitu.2. Mara baada ya hali ya kushinda kufikiwa, hakuna hatua zaidi zinazoruhusiwa.3. Mchezaji anayefaulu kuweka n ya alama zake katika safu mlalo, wima au mlalo atashinda mchezo.Tekeleza darasa la TicTacToe: TicTacToeint n Huanzisha kitu cha ukubwa wa ubao n. int moveint row, int col, int player Inaonyesha kuwa mchezaji aliye na kitambulisho mchezaji anacheza kwenye seli safu, col ya ubao. Hatua hiyo imehakikishwa kuwa ni hatua halali, na wachezaji hao wawili hubadilishana katika kufanya hatua. Rudi 0 ikiwa hakuna mshindi baada ya hoja, 1 ikiwa mchezaji 1 ndiye mshindi baada ya kuhama, au 2 ikiwa mchezaji 2 ndiye mshindi baada ya kuhama.Mfano wa 1:Ingizo TicTacToe , sogeza, sogeza, sogeza, sogeza, sogeza, sogeza, sogeza3, 0, 0, 1, 0, 2, 2, 2, 2, 1, 1, 1, 2, 2, 0, 1, 1, 0, 2, 2, 1, 1Patonull, 0, 0, 0, 0, 0, 0, 1UfafanuziTicTacToe ticTacToe TicTacToe mpya3;Chukulia kuwa mchezaji 1 ni X na mchezaji 2 ni O ubaoni.ticTacToe.move0, 0, 1; kurudi 0 hakuna aliyeshindaX Mchezaji 1 anasonga kwa 0, 0. ticTacToe.move0, 2, 2; kurudi 0 hakuna aliyeshindaX O Mchezaji 2 anasonga kwa 0, 2. ticTacToe.move2, 2, 1; kurudi 0 hakuna aliyeshindaX O Mchezaji 1 anachukua hatua kwa 2, 2. XticTacToe.move1, 1, 2; kurudi 0 hakuna aliyeshindaX O O Mchezaji 2 anasonga kwa 1, 1. XticTacToe.move2, 0, 1; kurudi 0 hakuna aliyeshindaX O O Mchezaji 1 anachukua hatua kwa 2, 0.X XticTacToe.move1, 0, 2; kurudi 0 hakuna aliyeshindaX OOO Mchezaji 2 anasonga kwa 1, 0.X XticTacToe.move2, 1, 1; kurudi 1 mchezaji 1 ameshindaX OOO Mchezaji 1 anasonga kwa 2, 1.XXXVikwazo: 2 n 100 mchezaji ni 1 au 2. 0 safu, safu n safu, safu ni kipekee kwa kila simu tofauti ya kusogeza. Mara nyingi n2 simu zitapigwa kusogeza.Ufuatiliaji: Je, unaweza kufanya vyema zaidi kuliko On2 kwa kila operesheni ya sogeza?  <response>: chatudarasa la TicTacToe: def __init__binafsi, n: int: self.rows, self.cols 0 n, 0 n self.diagonal self.anti_diagonal self.n n def moveself, row: int, col: int, player: int - int: ku_kuongeza 1 ikiwa mchezaji 1 mwingine -1 safu binafsisafu ili_kuongeza self.colscol to_add ikiwa safu col: self.diagonal to_kuongeza ikiwa safu safu self.n - 1: self.anti_diagonal to_add ikiwa absself.rowssafu self.n au absself.colscol self.n au absself.diagonal self.n au absself.anti_diagonal self.n: mchezaji wa kurudi kurudi 0maelezoTunaweza kutumia safu nne za ziada safu, safu, mlalo, na kinza_diagonal ili kufuatilia jumla ya alama kwa kila mchezaji 1 kwa mchezaji 1 na -1 kwa mchezaji 2 katika kila safu, safu wima, diagonal na anti. -a mshazari. Wakati thamani kamili ya ingizo lolote katika safu hizi inakuwa sawa na n, tunajua kwamba mchezaji ameshinda.Ili kutekeleza chaguo za kukokotoa sogeza, kwanza tunabainisha thamani iliKuongeza kama 1 ikiwa kichezaji ni 1 au -1 ikiwa kichezaji ni 2. Kisha, tunasasisha safu mlalo inayolingana, col, diagonal kama safu mlalo col , na anti_diagonal kama safu col n - 1 kwa kuongeza toAdd kwa thamani zao husika. Hatimaye, tunaangalia kama thamani kamili za maingizo yaliyosasishwa ni sawa na n, na tunarudisha nambari ya mchezaji ikiwa hali ya ushindi imetimizwa; la sivyo, rudisha 0. Suluhisho hili lina utata wa wakati wa O1 kwa kila operesheni ya sogeza. 