ටික් ටැක් ටෝ ගේම් ලීට්කෝඩ් විසඳුමක ජයග්‍රාහකයා සොයා ගන්න


දුෂ්කරතා මට්ටම පහසු
නිතර අසනු ලැබේ ඇමේසන් Apple ජංගම දුරකථන ෆේස්බුක් Zoho
අරා

ටික් ටැක් ටෝ ගේම් හි ජයග්‍රාහකයා සොයා ගැනීමේ ගැටළුව ලීට්කෝඩ් විසඳුම අපෙන් ඉල්ලා සිටින්නේ ටික් ටැක් ටෝ ක්‍රීඩාවේ ජයග්‍රාහකයා සොයා ගැනීමටය. ගැටළුව අපට ලබා දෙයි අරාව හෝ ක්‍රීඩකයන් විසින් කරන ලද චලනයන්හි දෛශිකය. අපි චලනයන් හරහා ගොස් තරගය ජය ගන්නේ කවුරුන්ද යන්න විනිශ්චය කළ යුතුයි. ක්‍රීඩාවේ ප්‍රති come ල දිනා ගත හැකිය, දිනුම් ඇදීමට හෝ අපේක්ෂාවෙන් සිටිය හැකිය. සමහර අවස්ථාවලදී, ඔවුන්ගෙන් කිසිවෙකු ක්‍රීඩාව ජයග්‍රහණය කළ විට, අපි A හෝ B ආපසු ලබා දෙන්නෙමු. නමුත් ක්‍රීඩාව විනිශ්චය කිරීමට පෙර, ටික් ටැක් ටෝ හි මෙම විශේෂිත අනුවාදයේ නීති පිළිබඳව අප දැනුවත් විය යුතුය.

  • ක්රීඩකයන්ට කළ හැක්කේ දැනටමත් භාවිතා කර නොමැති චතුරස්රයන් මත පමණි.
  • පළමු ක්රීඩකයා A සෑම විටම “X” අක්ෂර තබන අතර දෙවන ක්‍රීඩකයා B සෑම විටම “ඕ” අක්ෂර තබයි.
  • “X” සහ “O” අක්ෂර සෑම විටම හිස් කොටු වලට දමනු ලැබේ. දැනටමත් භාවිතා කර ඇති චතුරස්රයන් කිසිවෙකු භාවිතා නොකළ යුතුය.
  • ඕනෑම පේළියක්, තීරුවක් හෝ විකර්ණයක් පුරවන එකම (හිස් නොවන) අක්ෂර 3 ක් ඇති විට ක්‍රීඩාව අවසන් වේ.
  • සියලුම චතුරස්රයන් හිස් නොවේ නම් ක්රීඩාවද අවසන් වේ. සමහර අවස්ථාවල ඔවුන් දෙදෙනාම ජය නොගෙන දිනුම් ඇදීමකින් අවසන් වේ.
  • ක්රීඩාව අවසන් නම් තවත් චලනයන් කළ නොහැකිය. යම් යම් පියවරයන් ඉතිරිව තිබේ නම්, තීන්දුව “විභාග වෙමින් පවතී”.
  • “A” ක්‍රීඩකයා පළමු පියවර ගන්නා අතර පසුව විකල්ප හැරීම් ක්‍රීඩකයන් දෙදෙනාම භාවිතා කරයි.

උදාහරණ කිහිපයක් දෙස බලමු.

moves = [[0,0],[2,0],[1,1],[2,1],[2,2]]
"A"

ටික් ටැක් ටෝ ගේම් ලීට්කෝඩ් විසඳුමක ජයග්‍රාහකයා සොයා ගන්න

පැහැදිලි කිරීම: රූපයේ ඉහත පෙන්වා ඇති පරිදි, “X” සහිත ක්‍රීඩකයා ක්‍රීඩාව ජයග්‍රහණය කරයි. සෑම විටම ක්‍රීඩාව ආරම්භ කරයි, එබැවින් ජයග්‍රාහකයා ද “ඒ” වේ.

ටික් ටැක් ටෝ ගේම් ලීට්කෝඩ් විසඳුමක ජයග්‍රාහකයා සොයා ගැනීමේ ප්‍රවේශය

ගැටළුව වන්නේ යම් යම් පියවරයන්ගෙන් පසුව ටික් ටැක් ටෝ ක්‍රීඩාවේ අවසාන තීන්දුව සොයා ගැනීමයි. එය සම්මත ක්‍රීඩාවකි, එබැවින් අපට ක්‍රියාවලිය අනුකරණය කළ යුතුය. ආදානයේ දක්වා ඇති ආකාරයටම පියවරයන් අප විසින් සිදු කළ යුතුය. එක් ක්‍රමයක් නම් 3 × 3 ක ජාලයක් නිර්මාණය කර එකම ක්‍රියාවලිය අනුකරණය කිරීමයි. නමුත් එය සිදු කරනවා වෙනුවට, අපි ක්‍රීඩකයන් දෙදෙනාම අරා භාවිතා කරමින් කරන ලද පියවරයන් නිරීක්ෂණය කරමු. අපි ක්‍රීඩකයන් දෙදෙනාම සඳහා විවිධ අරා 4 ක් භාවිතා කරමු, 2 එක් එක් පේළිය සහ තීරුව සම්බන්ධයෙන් ඔවුන් විසින් කරන ලද පියවර සඳහා. සෑම පියවරක් සඳහාම, අපි මෙම අරා වල ගබඩා කර ඇති අගයන් වැඩි කරමු. අගයන් 3 ට සමාන වූ පසු චලනයන් 3 ක් තිරස් අතට හෝ සිරස් අතට සිදුවන බව අපි දනිමු.

විකර්ණ සඳහා, අපි සරලවම අරා වලට සමාන විචල්‍ය 4 ක් භාවිතා කරමු. කිසියම් අගයක් 3 ට සමාන වූ විට අපි ඒ අනුව නම නැවත ලබා දෙන්නෙමු. නමුත් සියලු ක්‍රියාමාර්ග ගන්නා තෙක් අප තීන්දුවකට එළඹෙන්නේ නැත්නම්. විදුලිබල පද්ධතියේ ඇති සියලුම චතුරස්රයන් වාඩිලාගෙන සිටී නම්, දිනුම් ඇදීමේ තීන්දුවක් අපි නැවත ලබා දෙන්නෙමු.

ටික් ටැක් ටෝ ගේම් ලීට්කෝඩ් විසඳුමක ජයග්‍රාහකයා සොයා ගැනීමේ කේතය

සී ++ කේතය

#include <bits/stdc++.h>
using namespace std;

string tictactoe(vector<vector<int>>& moves) {
    int aRow[3] = {0}, bRow[3] = {0}, aCol[3] = {0}, bCol[3] = {0};
    int aDiagonal1 = 0, bDiagonal1 = 0, aDiagonal2 = 0, bDiagonal2 = 0;
    int n = moves.size();
    for (int i = 0; i < n; i++) {
        int r = moves[i][0], c = moves[i][1];
        if (i % 2 == 1) {
            if (++bRow[r] == 3 || ++bCol[c] == 3 || (r == c && ++bDiagonal1 == 3) || (r + c == 2 && ++bDiagonal2 == 3)) return "B";
        }else {
            if (++aRow[r] == 3 || ++aCol[c] == 3 || (r == c && ++aDiagonal1 == 3) || (r + c == 2 && ++aDiagonal2 == 3)) return "A";
        }
    }
    return n == 9 ? "Draw" : "Pending";
}

int main(){
    vector<vector<int>> moves = {{0,0}, {2,0}, {1,1}, {2,1}, {2,2}};
    cout<<tictactoe(moves);
}
A

ජාවා කේතය

import java.util.*;
import java.lang.*;
import java.io.*;

class Main
{
  public static String tictactoe(int[][] moves) {
        int[] aRow = new int[3];
        int[] aCol = new int[3];
        int[] bRow = new int[3];
        int[] bCol = new int[3];
        int aDiagonal1 = 0, bDiagonal1 = 0, aDiagonal2 = 0, bDiagonal2 = 0;
        int n = moves.length;
        for (int i = 0; i < n; i++) {
            int r = moves[i][0], c = moves[i][1];
            if (i % 2 == 1) {
                if (++bRow[r] == 3 || ++bCol[c] == 3 || (r == c && ++bDiagonal1 == 3) || (r + c == 2 && ++bDiagonal2 == 3)) return "B";
            }else {
                if (++aRow[r] == 3 || ++aCol[c] == 3 || (r == c && ++aDiagonal1 == 3) || (r + c == 2 && ++aDiagonal2 == 3)) return "A";
            }
        }
        return n == 9 ? "Draw" : "Pending";        
    }
    
  public static void main (String[] args) throws java.lang.Exception {
    int[][] moves = {{0,0}, {2,0}, {1,1}, {2,1}, {2,2}};
    	System.out.println(tictactoe(moves));
  }
}
A

සංකීර්ණ විශ්ලේෂණය

කාල සංකීර්ණත්වය

මත), මෙහි N යනු ශ්‍රිතයට ආදානය ලෙස යවන ලද චලනයන් ගණන වේ.

අභ්‍යවකාශ සංකීර්ණතාව

ඕ (ආර් + සී), ටික් ටැක් ටෝ ක්‍රීඩාවේදී අපි ජාලකයේ පේළියට හා තීරුවට සමාන ප්‍රමාණයේ අරා 4 ක් නිර්මාණය කරන බැවිනි.