/****************************************************************************** * This program randomizes an array of integers as in * shuffling a deck of cards. * * Copyright © 2021 Richard Lesh. All rights reserved. *****************************************************************************/ #define NDEBUG #include "Utils.hpp" #include #include #include #include #include #include std::locale utf8loc(std::locale(), new std::codecvt_utf8); using namespace std; void shuffle(vector &list) noexcept { int const size = list.size(); for (auto i = 0; i < size - 1; ++i) { int const remaining = size - i; int const pos = i + int(remaining * (rand()/(RAND_MAX + 1.0))); int const temp = list[i]; list[i] = list[pos]; list[pos] = temp; } } static wstring const suits = L"\u2665\u2666\u2667\u2664"; static wstring const values = L"A23456789TJQK"; wstring convertInt2Card(int i) noexcept { precondition(i >= 0 && i < 52, "i >= 0 && i < 52"); int const suit = i / 13; int const value = i % 13; wstring const suitStr = suits.substr(suit, suit + 1 - suit); wstring valueStr = values.substr(value, value + 1 - value); if (valueStr == L"T") { valueStr = L"10"; } return valueStr + suitStr; } int main(int argc, char **argv) { setlocale(LC_ALL, "en_US.UTF-8"); wcout.imbue(utf8loc); wcin.imbue(utf8loc); vector deck = {}; for (auto i = 0; i <= 51; ++i) { Utils::push(deck, i); } shuffle(deck); for (auto i = 0; i <= 51; ++i) { wcout << convertInt2Card(deck[i]) << endl; } return 0; }