45 std::vector<unsigned int>
解答の作成(
const unsigned int 元数 = 9,
const unsigned int 桁数 = 4 )
49 std::wcerr << L
"元の数が桁数より少ないため解答を作成できません"
50 << L
"(元数=" << 元数 << L
", 桁数=" << 桁数 << L
")。" << std::endl;
53 std::vector<unsigned int> 未使用;
54 for (
unsigned int i = 0; i < 元数; ++i ) { 未使用.push_back( i ); }
55 std::vector<unsigned int> r;
56 for (
unsigned int i = 0; i < 桁数; ++i )
58 const int idx = std::rand() % 未使用.size();
59 const auto it = 未使用.begin() + idx;
74 std::wstring
解答文字化(
const std::vector<unsigned int>& s,
const wchar_t base = L
'1' )
77 for (
auto it = s.rbegin(); it != s.rend(); ++it )
79 r += wchar_t( base + *it );
93 std::wostringstream ss;
94 ss << s.
mHit << L
"ヒット " << s.
mBlow << L
"ブロー";
110 std::ios_base::sync_with_stdio(
false);
111 std::locale default_loc(
"");
112 std::locale::global(default_loc);
113 std::locale ctype_default(std::locale::classic(), default_loc, std::locale::ctype);
114 std::wcout.imbue(ctype_default);
115 std::wcerr.imbue(ctype_default);
116 std::wcin.imbue(ctype_default);
130 std::srand( static_cast<unsigned int>( std::time(0) ) );
132 const unsigned int 元数 = 9;
133 const unsigned int 取得長さ = 4;
135 auto 解答 =
解答の作成( 元数, 取得長さ );
136 auto 解答文字 =
解答文字化( 解答 );
137 std::wcout << L
"解答 = ";
138 std::wcout << 解答文字 << std::endl;
142 for (
int i = 0; i < 1000000; ++i )
145 if ( 予想.size() == 0 )
147 std::wcout << L
"予想が尽きてしまいました。" << std::endl;
151 auto r =
判定( 解答, 予想 );
157 std::wcout << i << L
"回目: " <<
解答文字化( 予想 ) << L
"->"
158 <<
判定文字化( r ) << L
"\r";
165 std::wcout << std::endl
166 << L
"正解を出せました。Enterキーで終了します。" << std::endl;
判定結果 判定(const T &解答, const T &試行)
ヒットアンドブローの判定を行います
ヒットアンドブローの正解を予測するためのクラスを宣言しています
const int mBlow
位置は異なるが要素ではある数、 mHit は含まない
static エラー定数 m最終エラー
最新の判定に対する前提条件の成否を示します
std::vector< unsigned int > 解答の作成(const unsigned int 元数=9, const unsigned int 桁数=4)
指定引数に基づき乱数で解答を一つ生成します
std::vector< unsigned int > 次()
次の試行値を配列の形で返します
ヒットアンドブローの正解を予測するための情報蓄積および分析を行います
void 結果登録(const std::vector< unsigned int > &試行, const 判定結果 &結果)
判定結果を登録します
順列または組み合わせの反復取得クラスを宣言しているヘッダファイルです
void 標準入出力日本語化()
std::wcout をまともに使えるように初期化します
ヒットアンドブローの判定結果を受け渡すための構造体や関数の宣言
予想不能状態です、コードが論理的におかしいことを示します
std::wstring 解答文字化(const std::vector< unsigned int > &s, const wchar_t base=L'1')
整数の配列から可視化した文字列を返します
const int mHit
位置まで含めて一致した数
桁数指定に異常があります、一方が他方に比べて大きすぎる、など
std::wstring 判定文字化(const 判定結果 &s)
判定結果を n ヒット m ブローの形で表します