#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <curl/curl.h>
#include <algorithm>
static size_t WriteCallBack(void* contents, size_t size, size_t mem, void* user){
((std::string*)user)->append((char*) contents, size * mem);
return size * mem;
}
std::string GetDocContent(const std::string& url){
CURL* curl;
CURLcode result;
std::string buffer;
std::string content;
curl = curl_easy_init();
if (!curl) {
std::cerr << "Failed to init curl." << std::endl;
return content;
}
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallBack);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
result = curl_easy_perform(curl);
if (result != CURLE_OK){
std::cerr << "Curl easy perform failed: " << curl_easy_strerror(result) << std::endl;
}
curl_easy_cleanup(curl);
return buffer;
}
std
::vector<std
::string> Split(const std
::string& line
, char delimiter
){ std::stringstream ss(line);
std::string obj;
std::vector<std::string> elems;
while (std::getline(ss, obj, delimiter)){
elems.push_back(obj);
}
return elems;
}
void PrintMessage(const std::string& url){
std::string content = GetDocContent(url);
std::cerr << "Failed to retrive website data." << std::endl;
return;
}
std::istringstream iss(content);
std::string line;
bool beginTable = false;
std::vector<std::tuple<int, char, int>> coords;
int maxX = 0;
int maxY = 0;
while (std::getline(iss, line)){
if (!beginTable){
if (line.find("The table below contains the input data needed to solve the coding assessment exercise.") != std::string::npos){
beginTable = true;
}
}
continue;
std
::vector<std
::string> info
= Split(line
, '\t'); if (info.size() == 3){
int x = std::stoi(info[0]);
char ch = info[1][0];
int y = std::stoi(info[2]);
coords.emplace_back(x, ch, y);
maxX
= std
::max(maxX
, x
); maxY
= std
::max(maxY
, y
); }
}
}
std::vector<std::vector<char>> grid(maxY + 1, std::vector<char>(maxX + 1, ' '));
for (const auto& [x, ch, y] : coords){
grid[y][x] = ch;
}
for (const auto& row : grid){
for(char ch : row){
std::cout << ch;
}
std::cout << '\n';
}
}
int main(){
std::string docURL = "https://docs.google.com/document/d/e/2PACX-1vTER-wL5E8YC9pxDx43gk8eIds59GtUUk4nJo_ZWagbnrH0NFvMXIw6VWFLpf5tWTZIT9P9oLIoFJ6A/pub";
PrintMessage(docURL);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGN1cmwvY3VybC5oPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RhdGljIHNpemVfdCBXcml0ZUNhbGxCYWNrKHZvaWQqIGNvbnRlbnRzLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG1lbSwgdm9pZCogdXNlcil7CiAgICAoKHN0ZDo6c3RyaW5nKil1c2VyKS0+YXBwZW5kKChjaGFyKikgY29udGVudHMsIHNpemUgKiBtZW0pOwogICAgcmV0dXJuIHNpemUgKiBtZW07Cn0KCnN0ZDo6c3RyaW5nIEdldERvY0NvbnRlbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCl7CiAgICBDVVJMKiBjdXJsOwogICAgQ1VSTGNvZGUgcmVzdWx0OwogICAgc3RkOjpzdHJpbmcgYnVmZmVyOwoKICAgIHN0ZDo6c3RyaW5nIGNvbnRlbnQ7CiAgICAKICAgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOwogICAgCiAgICBpZiAoIWN1cmwpIHsKICAgICAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBpbml0IGN1cmwuIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7CiAgICB9CgogICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgdXJsLmNfc3RyKCkpOwogICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxTCk7CiAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgV3JpdGVDYWxsQmFjayk7CiAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCAmYnVmZmVyKTsKCiAgICByZXN1bHQgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKCiAgICBpZiAocmVzdWx0ICE9IENVUkxFX09LKXsKICAgICAgICBzdGQ6OmNlcnIgPDwgIkN1cmwgZWFzeSBwZXJmb3JtIGZhaWxlZDogIiA8PCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CgogICAgcmV0dXJuIGJ1ZmZlcjsKfQoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFNwbGl0KGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5lLCBjaGFyIGRlbGltaXRlcil7CiAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzcyhsaW5lKTsKICAgIHN0ZDo6c3RyaW5nIG9iajsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbGVtczsKCiAgICB3aGlsZSAoc3RkOjpnZXRsaW5lKHNzLCBvYmosIGRlbGltaXRlcikpewogICAgICAgIGVsZW1zLnB1c2hfYmFjayhvYmopOwogICAgfQoKICAgIHJldHVybiBlbGVtczsKfQoKdm9pZCBQcmludE1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCl7CiAgICBzdGQ6OnN0cmluZyBjb250ZW50ID0gR2V0RG9jQ29udGVudCh1cmwpOwoKICAgIGlmKGNvbnRlbnQuZW1wdHkoKSl7CiAgICAgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gcmV0cml2ZSB3ZWJzaXRlIGRhdGEuIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBpc3MoY29udGVudCk7CiAgICBzdGQ6OnN0cmluZyBsaW5lOwogICAgYm9vbCBiZWdpblRhYmxlID0gZmFsc2U7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnR1cGxlPGludCwgY2hhciwgaW50Pj4gY29vcmRzOwoKICAgIGludCBtYXhYID0gMDsKICAgIGludCBtYXhZID0gMDsKCiAgICB3aGlsZSAoc3RkOjpnZXRsaW5lKGlzcywgbGluZSkpewogICAgICAgIGlmICghYmVnaW5UYWJsZSl7CiAgICAgICAgICAgIGlmIChsaW5lLmZpbmQoIlRoZSB0YWJsZSBiZWxvdyBjb250YWlucyB0aGUgaW5wdXQgZGF0YSBuZWVkZWQgdG8gc29sdmUgdGhlIGNvZGluZyBhc3Nlc3NtZW50IGV4ZXJjaXNlLiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKXsKICAgICAgICAgICAgICAgIGJlZ2luVGFibGUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBpZiAoIWxpbmUuZW1wdHkoKSl7CiAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmZvID0gU3BsaXQobGluZSwgJ1x0Jyk7CiAgICAgICAgICAgIGlmIChpbmZvLnNpemUoKSA9PSAzKXsKICAgICAgICAgICAgICAgIGludCB4ID0gc3RkOjpzdG9pKGluZm9bMF0pOwogICAgICAgICAgICAgICAgY2hhciBjaCA9IGluZm9bMV1bMF07CiAgICAgICAgICAgICAgICBpbnQgeSA9IHN0ZDo6c3RvaShpbmZvWzJdKTsKCiAgICAgICAgICAgICAgICBjb29yZHMuZW1wbGFjZV9iYWNrKHgsIGNoLCB5KTsKICAgICAgICAgICAgICAgIG1heFggPSBzdGQ6Om1heChtYXhYLCB4KTsKICAgICAgICAgICAgICAgIG1heFkgPSBzdGQ6Om1heChtYXhZLCB5KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAKCiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxjaGFyPj4gZ3JpZChtYXhZICsgMSwgc3RkOjp2ZWN0b3I8Y2hhcj4obWF4WCArIDEsICcgJykpOwoKICAgIGZvciAoY29uc3QgYXV0byYgW3gsIGNoLCB5XSA6IGNvb3Jkcyl7CiAgICAgICAgZ3JpZFt5XVt4XSA9IGNoOwogICAgfQoKICAgIGZvciAoY29uc3QgYXV0byYgcm93IDogZ3JpZCl7CiAgICAgICAgZm9yKGNoYXIgY2ggOiByb3cpewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgY2g7CiAgICAgICAgfQogICAgICAgIHN0ZDo6Y291dCA8PCAnXG4nOwogICAgfQoKfQoKaW50IG1haW4oKXsKICAgIHN0ZDo6c3RyaW5nIGRvY1VSTCA9ICJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kL2UvMlBBQ1gtMXZURVItd0w1RThZQzlweER4NDNnazhlSWRzNTlHdFVVazRuSm9fWldhZ2JuckgwTkZ2TVhJdzZWV0ZMcGY1dFdUWklUOVA5b0xJb0ZKNkEvcHViIjsKICAgIFByaW50TWVzc2FnZShkb2NVUkwpOwogICAgcmV0dXJuIDA7Cn0K
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <curl/curl.h>
#include <algorithm>
static size_t WriteCallBack(void* contents, size_t size, size_t mem, void* user){
((std::string*)user)->append((char*) contents, size * mem);
return size * mem;
}
std::string GetDocContent(const std::string& url){
CURL* curl;
CURLcode result;
std::string buffer;
std::string content;
curl = curl_easy_init();
if (!curl) {
std::cerr << "Failed to init curl." << std::endl;
return content;
}
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallBack);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
result = curl_easy_perform(curl);
if (result != CURLE_OK){
std::cerr << "Curl easy perform failed: " << curl_easy_strerror(result) << std::endl;
}
curl_easy_cleanup(curl);
return buffer;
}
std::vector<std::string> Split(const std::string& line, char delimiter){
std::stringstream ss(line);
std::string obj;
std::vector<std::string> elems;
while (std::getline(ss, obj, delimiter)){
elems.push_back(obj);
}
return elems;
}
void PrintMessage(const std::string& url){
std::string content = GetDocContent(url);
if(content.empty()){
std::cerr << "Failed to retrive website data." << std::endl;
return;
}
std::istringstream iss(content);
std::string line;
bool beginTable = false;
std::vector<std::tuple<int, char, int>> coords;
int maxX = 0;
int maxY = 0;
while (std::getline(iss, line)){
if (!beginTable){
if (line.find("The table below contains the input data needed to solve the coding assessment exercise.") != std::string::npos){
beginTable = true;
}
}
continue;
if (!line.empty()){
std::vector<std::string> info = Split(line, '\t');
if (info.size() == 3){
int x = std::stoi(info[0]);
char ch = info[1][0];
int y = std::stoi(info[2]);
coords.emplace_back(x, ch, y);
maxX = std::max(maxX, x);
maxY = std::max(maxY, y);
}
}
}
std::vector<std::vector<char>> grid(maxY + 1, std::vector<char>(maxX + 1, ' '));
for (const auto& [x, ch, y] : coords){
grid[y][x] = ch;
}
for (const auto& row : grid){
for(char ch : row){
std::cout << ch;
}
std::cout << '\n';
}
}
int main(){
std::string docURL = "https://docs.google.com/document/d/e/2PACX-1vTER-wL5E8YC9pxDx43gk8eIds59GtUUk4nJo_ZWagbnrH0NFvMXIw6VWFLpf5tWTZIT9P9oLIoFJ6A/pub";
PrintMessage(docURL);
return 0;
}