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
$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);
c++ tic-tac-toe
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$
add a comment |
$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);
c++ tic-tac-toe
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$
add a comment |
$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);
c++ tic-tac-toe
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
c++ tic-tac-toe
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.
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.
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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