Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 05_kn / BAndC.cpp
blob: 30f8a3d8af486947fba169de6318b00fcf1ae827 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
using namespace std;


const int DIGITS_COUNT = 4;

int getNumLen(int n)
{
	int count = 0;
	while (n != 0)
	{
		count++;
		n /= 10;
	}
	return count;
}

bool containsDigit(int n, int digit)
{
	while (n != 0)
	{
		int lastDigit = n % 10;

		if (digit == lastDigit)
			return true;

		n /= 10;
	}
	return false;
}
bool containsDiffrentDigits(int n)
{
	while (n >= 10)
	{
		int lastDigit = n % 10;
		n /= 10;

		if (containsDigit(n, lastDigit))
			return false;
	}
	return true;
}

bool isValid(int n)
{
	return getNumLen(n) == DIGITS_COUNT && containsDiffrentDigits(n);
}

void userInput(int& toGuess)
{
	do
	{
		cin >> toGuess;
	} while (!isValid(toGuess));
}

int getBulls(int toGuess, int myGuess)
{
	int bulls = 0;
	while (toGuess != 0)
	{
		int toGuessLastDigit = toGuess % 10;
		int myGuessLastDigit = myGuess % 10;

		if (toGuessLastDigit == myGuessLastDigit)
			bulls++;
		
		toGuess /= 10;
		myGuess /= 10;
	}
	return bulls;
}

int getCows(int toGuess, int myGuess, int bulls)
{
	int cows = 0;
	while (myGuess != 0)
	{
		int lastDigit = myGuess % 10;

		if (containsDigit(toGuess, lastDigit))
			cows++;

		myGuess /= 10;
	}
	return cows - bulls;
}

void getBullsAndCows(int toGuess, int myGuess, int& bulls, int& cows)
{
	bulls = getBulls(toGuess, myGuess);
	cows = getCows(toGuess, myGuess, bulls);
}

int main()
{
	int toGuess;
	userInput(toGuess);

	cout << "Try to guess:" << endl;

	int bulls = 0;
	int cows = 0;

	while (bulls != DIGITS_COUNT)
	{
		int myGuess;
		userInput(myGuess);
		getBullsAndCows(toGuess, myGuess, bulls, cows);

		cout << "Bulls: " << bulls << " " << ", Cows: " << cows << endl;
	}

	cout << "Success!" << endl;
}