Simple C++ program to check win in TicTacToeSimple recursive Summing programSimple randomization...

Is there a German word for “analytics”?

Equivalent to "source" in OpenBSD?

How do I implement simple JS code to deploy a compiled smart contract to ganache-cli?

Contradiction with Banach Fixed Point Theorem

Is there a frame of reference in which I was born before I was conceived?

Creature spells vs. ability to convert a permanent into a creature

Six real numbers so that product of any five is the sixth one

Which aircraft had such a luxurious-looking navigator's station?

If a druid in Wild Shape swallows a creature whole, then turns back to her normal form, what happens?

Reason Why Dimensional Travelling Would be Restricted

How to count words in a line

Called into a meeting and told we are being made redundant (laid off) and "not to share outside". Can I tell my partner?

When should a commit not be version tagged?

As a new poet, where can I find help from a professional to judge my work?

How do I construct an nxn matrix?

Linear regression when Y is bounded and discrete

What is the difference between throw e and throw new Exception(e)?

Replacement ford fiesta radiator has extra hose

Exponential growth/decay formula: what happened to the other constant of integration?

Skis versus snow shoes - when to choose which for travelling the backcountry?

When was drinking water recognized as crucial in marathon running?

Why do members of Congress in committee hearings ask witnesses the same question multiple times?

Can I become debt free or should I file for bankruptcy? How do I manage my debt and finances?

What is the wife of a henpecked husband called?



Simple C++ program to check win in TicTacToe


Simple recursive Summing programSimple randomization programSimple zodiac sign programA simple array library programOptimizing simple C++ grading programTicTacToe 5x5 win or draw algorithmSimple TicTacToe game in C++Using C++ to check if string s is subsequence of string tTicTacToe LogicMatch a simple balanced language using a queue













1












$begingroup$


Given a string of size 9 that represents a tic tac toe board, determine if X or O has won, or if the board is in an invalid state. Any other character aside from x, X, o, O represents an empty spot on the board.



Input: 012345678

Board:

0 1 2
3 4 5
6 7 8


TicTacToe.cpp



#include "tictactoe.h"
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>

using std::string;
using std::vector;

const int kBoardSize = 9;
const int kBoardLength = std::sqrt(kBoardSize);

TicTacToeState CheckTicTacToeBoard(std::string board) {
if (board.size() != kBoardSize) {
return TicTacToeState::InvalidInput;
}

std::transform(board.begin(), board.end(), board.begin(), ::tolower);
size_t numberOfO = std::count(board.begin(), board.end(), 'o');
size_t numberOfX = std::count(board.begin(), board.end(), 'x');

if (numberOfO > numberOfX || numberOfX > numberOfO + 1) {
return TicTacToeState::UnreachableState;
}

bool xWon = winDetection(board, 'x');
bool oWon = winDetection(board, 'o');

if (xWon && oWon) {
return TicTacToeState::UnreachableState;
} else if (xWon) {
return TicTacToeState::Xwins;
} else if (oWon) {
return TicTacToeState::Owins;
}
return TicTacToeState::NoWinner;
}

bool winDetection(string board, char marker) {
bool rowWin = false, colWin = false, rightDiagWin = true, leftDiagWin = true;

for (int i{0}, rightDiagIndex{0}, leftDiagIndex{kBoardLength - 1};
i < kBoardLength; ++i, rightDiagIndex += (kBoardLength + 1),
leftDiagIndex += (kBoardLength - 1)) {
bool row = true, col = true;

int rowIndex = kBoardLength * i, colIndex = i;
for (int j{0}; j < kBoardLength; ++j) {
col &= (board[colIndex] == marker);
row &= (board[rowIndex] == marker);

rowIndex++;
colIndex += kBoardLength;
}

colWin |= col;
rowWin |= row;

rightDiagWin &= board[rightDiagIndex] == marker;
leftDiagWin &= board[leftDiagIndex] == marker;
}

return (rowWin || colWin || rightDiagWin || leftDiagWin);
}



TicTacToe.h



#pragma once

#include <string>

enum TicTacToeState { UnreachableState, Xwins, Owins, NoWinner, InvalidInput };

TicTacToeState CheckTicTacToeBoard(std::string board);

bool winDetection(std::string board, char marker);









share









New contributor




n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$

















    1












    $begingroup$


    Given a string of size 9 that represents a tic tac toe board, determine if X or O has won, or if the board is in an invalid state. Any other character aside from x, X, o, O represents an empty spot on the board.



    Input: 012345678

    Board:

    0 1 2
    3 4 5
    6 7 8


    TicTacToe.cpp



    #include "tictactoe.h"
    #include <algorithm>
    #include <cmath>
    #include <string>
    #include <vector>

    using std::string;
    using std::vector;

    const int kBoardSize = 9;
    const int kBoardLength = std::sqrt(kBoardSize);

    TicTacToeState CheckTicTacToeBoard(std::string board) {
    if (board.size() != kBoardSize) {
    return TicTacToeState::InvalidInput;
    }

    std::transform(board.begin(), board.end(), board.begin(), ::tolower);
    size_t numberOfO = std::count(board.begin(), board.end(), 'o');
    size_t numberOfX = std::count(board.begin(), board.end(), 'x');

    if (numberOfO > numberOfX || numberOfX > numberOfO + 1) {
    return TicTacToeState::UnreachableState;
    }

    bool xWon = winDetection(board, 'x');
    bool oWon = winDetection(board, 'o');

    if (xWon && oWon) {
    return TicTacToeState::UnreachableState;
    } else if (xWon) {
    return TicTacToeState::Xwins;
    } else if (oWon) {
    return TicTacToeState::Owins;
    }
    return TicTacToeState::NoWinner;
    }

    bool winDetection(string board, char marker) {
    bool rowWin = false, colWin = false, rightDiagWin = true, leftDiagWin = true;

    for (int i{0}, rightDiagIndex{0}, leftDiagIndex{kBoardLength - 1};
    i < kBoardLength; ++i, rightDiagIndex += (kBoardLength + 1),
    leftDiagIndex += (kBoardLength - 1)) {
    bool row = true, col = true;

    int rowIndex = kBoardLength * i, colIndex = i;
    for (int j{0}; j < kBoardLength; ++j) {
    col &= (board[colIndex] == marker);
    row &= (board[rowIndex] == marker);

    rowIndex++;
    colIndex += kBoardLength;
    }

    colWin |= col;
    rowWin |= row;

    rightDiagWin &= board[rightDiagIndex] == marker;
    leftDiagWin &= board[leftDiagIndex] == marker;
    }

    return (rowWin || colWin || rightDiagWin || leftDiagWin);
    }



    TicTacToe.h



    #pragma once

    #include <string>

    enum TicTacToeState { UnreachableState, Xwins, Owins, NoWinner, InvalidInput };

    TicTacToeState CheckTicTacToeBoard(std::string board);

    bool winDetection(std::string board, char marker);









    share









    New contributor




    n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$















      1












      1








      1





      $begingroup$


      Given a string of size 9 that represents a tic tac toe board, determine if X or O has won, or if the board is in an invalid state. Any other character aside from x, X, o, O represents an empty spot on the board.



      Input: 012345678

      Board:

      0 1 2
      3 4 5
      6 7 8


      TicTacToe.cpp



      #include "tictactoe.h"
      #include <algorithm>
      #include <cmath>
      #include <string>
      #include <vector>

      using std::string;
      using std::vector;

      const int kBoardSize = 9;
      const int kBoardLength = std::sqrt(kBoardSize);

      TicTacToeState CheckTicTacToeBoard(std::string board) {
      if (board.size() != kBoardSize) {
      return TicTacToeState::InvalidInput;
      }

      std::transform(board.begin(), board.end(), board.begin(), ::tolower);
      size_t numberOfO = std::count(board.begin(), board.end(), 'o');
      size_t numberOfX = std::count(board.begin(), board.end(), 'x');

      if (numberOfO > numberOfX || numberOfX > numberOfO + 1) {
      return TicTacToeState::UnreachableState;
      }

      bool xWon = winDetection(board, 'x');
      bool oWon = winDetection(board, 'o');

      if (xWon && oWon) {
      return TicTacToeState::UnreachableState;
      } else if (xWon) {
      return TicTacToeState::Xwins;
      } else if (oWon) {
      return TicTacToeState::Owins;
      }
      return TicTacToeState::NoWinner;
      }

      bool winDetection(string board, char marker) {
      bool rowWin = false, colWin = false, rightDiagWin = true, leftDiagWin = true;

      for (int i{0}, rightDiagIndex{0}, leftDiagIndex{kBoardLength - 1};
      i < kBoardLength; ++i, rightDiagIndex += (kBoardLength + 1),
      leftDiagIndex += (kBoardLength - 1)) {
      bool row = true, col = true;

      int rowIndex = kBoardLength * i, colIndex = i;
      for (int j{0}; j < kBoardLength; ++j) {
      col &= (board[colIndex] == marker);
      row &= (board[rowIndex] == marker);

      rowIndex++;
      colIndex += kBoardLength;
      }

      colWin |= col;
      rowWin |= row;

      rightDiagWin &= board[rightDiagIndex] == marker;
      leftDiagWin &= board[leftDiagIndex] == marker;
      }

      return (rowWin || colWin || rightDiagWin || leftDiagWin);
      }



      TicTacToe.h



      #pragma once

      #include <string>

      enum TicTacToeState { UnreachableState, Xwins, Owins, NoWinner, InvalidInput };

      TicTacToeState CheckTicTacToeBoard(std::string board);

      bool winDetection(std::string board, char marker);









      share









      New contributor




      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      Given a string of size 9 that represents a tic tac toe board, determine if X or O has won, or if the board is in an invalid state. Any other character aside from x, X, o, O represents an empty spot on the board.



      Input: 012345678

      Board:

      0 1 2
      3 4 5
      6 7 8


      TicTacToe.cpp



      #include "tictactoe.h"
      #include <algorithm>
      #include <cmath>
      #include <string>
      #include <vector>

      using std::string;
      using std::vector;

      const int kBoardSize = 9;
      const int kBoardLength = std::sqrt(kBoardSize);

      TicTacToeState CheckTicTacToeBoard(std::string board) {
      if (board.size() != kBoardSize) {
      return TicTacToeState::InvalidInput;
      }

      std::transform(board.begin(), board.end(), board.begin(), ::tolower);
      size_t numberOfO = std::count(board.begin(), board.end(), 'o');
      size_t numberOfX = std::count(board.begin(), board.end(), 'x');

      if (numberOfO > numberOfX || numberOfX > numberOfO + 1) {
      return TicTacToeState::UnreachableState;
      }

      bool xWon = winDetection(board, 'x');
      bool oWon = winDetection(board, 'o');

      if (xWon && oWon) {
      return TicTacToeState::UnreachableState;
      } else if (xWon) {
      return TicTacToeState::Xwins;
      } else if (oWon) {
      return TicTacToeState::Owins;
      }
      return TicTacToeState::NoWinner;
      }

      bool winDetection(string board, char marker) {
      bool rowWin = false, colWin = false, rightDiagWin = true, leftDiagWin = true;

      for (int i{0}, rightDiagIndex{0}, leftDiagIndex{kBoardLength - 1};
      i < kBoardLength; ++i, rightDiagIndex += (kBoardLength + 1),
      leftDiagIndex += (kBoardLength - 1)) {
      bool row = true, col = true;

      int rowIndex = kBoardLength * i, colIndex = i;
      for (int j{0}; j < kBoardLength; ++j) {
      col &= (board[colIndex] == marker);
      row &= (board[rowIndex] == marker);

      rowIndex++;
      colIndex += kBoardLength;
      }

      colWin |= col;
      rowWin |= row;

      rightDiagWin &= board[rightDiagIndex] == marker;
      leftDiagWin &= board[leftDiagIndex] == marker;
      }

      return (rowWin || colWin || rightDiagWin || leftDiagWin);
      }



      TicTacToe.h



      #pragma once

      #include <string>

      enum TicTacToeState { UnreachableState, Xwins, Owins, NoWinner, InvalidInput };

      TicTacToeState CheckTicTacToeBoard(std::string board);

      bool winDetection(std::string board, char marker);







      c++ tic-tac-toe





      share









      New contributor




      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share









      New contributor




      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share



      share








      edited 2 mins ago









      200_success

      130k16153417




      130k16153417






      New contributor




      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 7 mins ago









      n3a9n3a9

      61




      61




      New contributor




      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      n3a9 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          n3a9 is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214737%2fsimple-c-program-to-check-win-in-tictactoe%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          n3a9 is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          n3a9 is a new contributor. Be nice, and check out our Code of Conduct.













          n3a9 is a new contributor. Be nice, and check out our Code of Conduct.












          n3a9 is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214737%2fsimple-c-program-to-check-win-in-tictactoe%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Webac Holding Inhaltsverzeichnis Geschichte | Organisationsstruktur | Tochterfirmen |...

          What's the meaning of a knight fighting a snail in medieval book illustrations?What is the meaning of a glove...

          Salamanca Inhaltsverzeichnis Lage und Klima | Bevölkerungsentwicklung | Geschichte | Kultur und...