#include <iostream>
#include <array>
#include <string>
using namespace std;
const size_t MaxRows = 3;
const size_t MaxColumns = 3;
const size_t MaxCells = MaxRows * MaxColumns;
using gridRow = std::array<char, MaxColumns>;
using grid = std::array<gridRow, MaxRows>;
grid CreateGrid(const std::string &keyword)
{
grid g;
std::array<bool, 256> lookup{};
size_t numFilled = 0;
for(size_t i = 0; (i < keyword.size()) && (numFilled < MaxCells); ++i)
{
if (!lookup[static_cast<unsigned char>(keyword[i])])
{
lookup[static_cast<unsigned char>(keyword[i])] = true;
g[numFilled / 3][numFilled % 3] = keyword[i];
++numFilled;
}
}
for(char ch = 'A'; (ch <= 'Y') && (numFilled < MaxCells); ++ch)
{
if (!lookup[static_cast<unsigned char>(ch)])
{
g[numFilled / 3][numFilled % 3] = ch;
++numFilled;
}
}
return g;
}
int main()
{
grid myArray = CreateGrid("HELO");
for(int row = 0; row < MaxRows; ++row) {
for(int col = 0; col < MaxColumns; ++col) {
cout << myArray[row][col] << " ";
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBzaXplX3QgTWF4Um93cyA9IDM7CmNvbnN0IHNpemVfdCBNYXhDb2x1bW5zID0gMzsKY29uc3Qgc2l6ZV90IE1heENlbGxzID0gTWF4Um93cyAqIE1heENvbHVtbnM7Cgp1c2luZyBncmlkUm93ID0gc3RkOjphcnJheTxjaGFyLCBNYXhDb2x1bW5zPjsKdXNpbmcgZ3JpZCA9IHN0ZDo6YXJyYXk8Z3JpZFJvdywgTWF4Um93cz47CgpncmlkIENyZWF0ZUdyaWQoY29uc3Qgc3RkOjpzdHJpbmcgJmtleXdvcmQpCnsKICAgIGdyaWQgZzsKICAgIHN0ZDo6YXJyYXk8Ym9vbCwgMjU2PiBsb29rdXB7fTsKICAgIHNpemVfdCBudW1GaWxsZWQgPSAwOwoKICAgIGZvcihzaXplX3QgaSA9IDA7IChpIDwga2V5d29yZC5zaXplKCkpICYmIChudW1GaWxsZWQgPCBNYXhDZWxscyk7ICsraSkKICAgIHsKICAgICAgICBpZiAoIWxvb2t1cFtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihrZXl3b3JkW2ldKV0pCiAgICAgICAgewogICAgICAgICAgICBsb29rdXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oa2V5d29yZFtpXSldID0gdHJ1ZTsKICAgICAgICAgICAgZ1tudW1GaWxsZWQgLyAzXVtudW1GaWxsZWQgJSAzXSA9IGtleXdvcmRbaV07CiAgICAgICAgICAgICsrbnVtRmlsbGVkOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoY2hhciBjaCA9ICdBJzsgKGNoIDw9ICdZJykgJiYgKG51bUZpbGxlZCA8IE1heENlbGxzKTsgKytjaCkKICAgIHsKICAgICAgICBpZiAoIWxvb2t1cFtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaCldKQogICAgICAgIHsKICAgICAgICAgICAgZ1tudW1GaWxsZWQgLyAzXVtudW1GaWxsZWQgJSAzXSA9IGNoOwogICAgICAgICAgICArK251bUZpbGxlZDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGc7Cn0KCmludCBtYWluKCkKewogICAgZ3JpZCBteUFycmF5ID0gQ3JlYXRlR3JpZCgiSEVMTyIpOwoJZm9yKGludCByb3cgPSAwOyByb3cgPCBNYXhSb3dzOyArK3JvdykgewoJCWZvcihpbnQgY29sID0gMDsgY29sIDwgTWF4Q29sdW1uczsgKytjb2wpIHsKCQkJY291dCA8PCBteUFycmF5W3Jvd11bY29sXSA8PCAiICI7CgkJfQoJCWNvdXQgPDwgZW5kbDsKCX0KICAgIHJldHVybiAwOwp9