To receive notifications about scheduled maintenance, please subscribe to the mailing-list gitlab-operations@sympa.ethz.ch. You can subscribe to the mailing-list at https://sympa.ethz.ch

Commit 335c51a5 authored by amiessen's avatar amiessen
Browse files

added day 8, part 1

parent a730994c
CXX = g++
CXXFLAGS += -std=c++14
CXXFLAGS += -Wall -Wextra -Wpedantic
main08.exe: main08.cpp
$(CXX) $(CXXFLAGS) $< -o $@
run: main08.exe
./main08.exe
clean:
rm -v *.exe
.PHONY: run clean
222202222222122222222222022220121222222212222202222222222200222222122221222222202022222222222022202222222222022222212200220222212020222222222222220212222202222222022222222222122220221222222212222202222222222222222222122221222222222222222222222222202222222222222222202220221220212021222222222222222222222202222222222222222222022221020222222212222202222222222212222222122221222222212122222222222022212222222222122222222221220221222220222222222222221212222202222222222222222222022220221222222202222202222222222200222222122222222222222022222222222022222222222222122222202212222220212221222222222222220202222202222222022222222222222222221222222202222202222222222220222222122222222222222022222222222022212222222222022222202221222222202020222222222222220222222222222222122222222222020222021222222222222222222222222212222222222222222222212222222222222122222222222222022222212210221221222122222222222222221202222222222222122222222222221222221222222222222212222222222000222222222220222222222022222222222022202220222222122222202211222220222221222222202222212212222212222222220222222222120220021222222212222202222222222101222222122220222222222222222222222022212221222222122222222220222222202020222222202222212202222202222222221222222222222221021222222222222212222222222012222222222222222222222122222222222102212222222222122222222220221221212222222222202222221202222212222222222222222222020220220222222202222222222222222211222222022220122222212222222222222112202222222222122222202202222221212122222222202222220202222212222222022222222222121220021222222212222212222220222201222222222222122222202022222222222222222220222222122222222202220222212222222222202222211212222212222222221222222222022221021222222022222212222221222101222222222221122222222122222222222112222221222222022222212201221221222122222222212222221202222222222222121222222222021222120222222002222222222220222020222222222222122222202222222222222012202220222222222222222210220222202221222222212222221202222202022222121222222222021212121222222102222200222221222202222222122220222222212222222222222112222222222222022222202211221220212220222222222222201222222202122222121222222222122210120222222002222221222221222211222222122220022222212222222222222222222220222222122222212212222220202220222222212222211222022222022222120222222222022201122222222102222210222222222021222222222221022222212022222222222202202222222222122222222222220220212221222222212222201222222212022222021222222222222222022222222022222222222221212000222222122222022222202122222222222112202220222222122222222222222222202220222222222222221212122222222222020222222222122210222222222102222202222222202101222202222221222222222122222222222022202222222222122222202202220221212120222222222222212212022212022222220222222222020020222222222102222222222222202012222222022222122222202222222222222212222221222222222222212211221220212022222222212222221222222222022222221222222222221111022222222002222201222221202102222212222221022222222022222222222112202220222222022222202211220220212122222222202222210222022222122222020222222222021012120222222112222202222220202120222212222220022222222022222222202112222221222222222222202221220221212221222222212222221212022202121221121222222222020122222222222102222221222220212000222202122222022202201022222222222212212222222222122222202211221221222212222222212222222212122202220221121222222222022000221222222112222200222220202121222212122220222222211122222222222002212222222222122222202201220221212100222222222222202202022202221221121222222222222100020222222022222211222221222211222212222221222202221022222222202022212221222222222202222220222222212112222222222222201222222202120222121222222222221000221222222012222221222221212111222212222220022212211022222222222002222220222222221202212221220222212001222222222222210212222222121221120222222222122121120222222122222211222220212001222222222222222202202222222222212002212222222222121212212222220221212200222221202022201202122202021222021222222222022021221222222112222212222221202200222212222221122222222122222202222122222222222222120212222220222220222020222222202022221202222222122222121222222222120020121222222122222212222220202220222212022222122222201022222222222102222220222222021222222202220220212001222221222122200212122202220222020222222222220120220222222202222222222220212001222222222220122212212022222202212102202220222222122202222220220222202002222220202222210202122212221222020222222222021000021222222022222212202221002211222202222222022222200222222212222102222221222222122222202200221221212120222222202022200202122222021220000222222222222201220222222102222221222222222200222202122221122222211222222202222122222221222222120202222222221220202011222220222222220222022202021220210222222222120210221222222102222202202022022000222212222220122222211122222222222122202220222222121212202201220222212000222222212122221202022202121220120222222222221111022222022002222201212122002110222212222222222222202122222212222112222222222222221202212221220220212002222221202122202202122222122222200222222022121112220222222212222210222220222101222212122220022222200022222222202212212220222222222202212201221221222122222220212122212212022212122221221222222122220120121222222102222211212120212101222222022220022212200222022222222012212220222222221222212210220220222100222220212022202212022222220222122222222022122022021222022112222202202122202101222212122221022222201222222212222122202220222222122202212211221221212212222222222122201202112202221222112222222122022101021222122022222202212220112000222222022220022202210222222222202002212220222222022202202200222222202002222221202022220222122202220022211222222222122200121222122112222200202221202200222222222220022202220122022202202122212222222222221212212200222221212201222222212122212222212222021021001222221122022010121222222112222212202120122222222212222222122212212122222212202112202220222222022222212220222222222221222221222022211202212212122022112222221022221111020222122010222202222122212122222212022222122212221222222202222202222222222222221222202201222222202220222221202022212202002212220021212222220022021201020222222121222202222020212221202222222221022222220022122212212102202221222222020212212210220222202222222220202122221222202222122221100222222022022202021222022210222202222022222200222012122222122222222022122212222112202220222222122212212201220221222001222220222222212212122202120221201222220022021000022222022220222210202020122202202022122221122212222022022212212222212220222222220212202222221222212011222222222122202222102202020020111222222122222012221222222202222220202121012100202122122221022222220122222202222202222221222222122202222200222222222212222222202122221202012012221022101222221122122010120222022022222212202222012012212122002220122202221022222202202002201220222222020212202201220220212010222220212122220202102002221021202222222022020101122222222112222221202121202121212122212222222212202022022202202102220221222222021202222211221221202201222221202022222202202212020101100222221122221221122222022212222221212021122201222122122220122222212222222212212202202222222222121212202210221221222220222222202122221212202122022120121222221122220112020222222221222200202121212210212222212222022202220022122212212222200222222222020202210211221222202212212220212022212202122222122222022222221222121022221222222122222212222122202111202112002222222212221222022222202002202221222222121202222201221220212201212221212022200212102212222111210222220222121200220202122111222202212022002222222002112222122212220022122202212122220221222222221202200222222222222011202220212122201222102012022121210222222122121021122222022201222212222022212100202112122221122202210122022222202112211220222222121212220200220220202202212221202022222202222012202112121222222022220202220202022112222200202221002222222112122222122202222022222222222012210222222222122202202221221220222001202220222022202212112112211012021222222122221020221222222222222201212221012212222012212220022222200022122220222012220220222221220212212210222220202111202222212122210202122012200002011222220022122100221222122001222202211120202220222012022222222222221222122222212202200220222220121212211211222222222212202221222122212222022102122221002222220222021112020222121102222211221020212100222102222222122202211022022200212022221221222221022222201202222222212012202220212222222212012002201110102222220222020111220212220022222210121020022101222012112222222212201022122222212102212222222222121202220210222220202200212221212022221222122012012111002222122122220120122202222202222220121121222201222202102222022222220122122201222222201221222221220202202210222221202120212221212122222212102102002120001222202222121111021222102210222201021221012021202202222221222212201122222210212112221221222222220222212211220221212211212220202122210202022022210111000222110222112122022202022100222201212220102210222012212222122212201122022220202212212221222220020222200211222221222112212222222022200222002212200000200222012222110100222202121120222210022220212102222122102210122222200022222221222112202222222201121202222210221222222120222221202122202202112121212120102222200222122011121202020201222211121021212101222002202220222202210022222201212212200222222210020202222210221220212011222210222122201202012212120122200222212122221101222002022012222220200120202002212122102221022202220122222220212222202211222202222222201210220222212101222211202122221202012210021101012222202122010202021122201122222212122120112100202022222210022222200122222200222102201211222202121212221211220222212211222211202122211212022211220011010222112022200100121202220011222221110120022012202122202200012202201022222202202112221221222210122212210211221220222200220202202022201212112011000211212222021022120021120112110112222202011222112110202222212200202202220222022221212102202202222212221212212221220220202220221202222122210202002022010220110222010022221200221122210022222201001121022200212222012212112212211022122222202002211200222202021212222200221200222121210200212122001222102022101201120222222022100110021112200121222200202221202021212002022200012212202122222200222122212201222202120222212222221221222000211220222022221212122111220221001222122022010122120202101112222222022121002200202122222201002212220122222201212222221212222212120212222201222201212111210202222022120212122111000120020222221022000201120122001200222102002222002012222202102202112202201222122202222122210211222212021222210201222221202221220201222222002202002111102202120222011122111221222122200202222122200221122210202212002220002202211122122222212112010202222221120222201220222200221122211202212222101222222112121102002222012122122212020012022210222111022022012222202002212220010222211122122210122202001202222220220202221221222200202102210220212122102200222120011201110222101022100011120122201001222000002220022110202002112201111202221122022220012002110220222202021212211211220220220222200200222122211221012022110220102122020222112210121012101021222220211020012110210122122212002212222222222212022022002211222221221212222212221222220100210202212122002201201222221122011222201222121002021222020100222020220022012012200122102202122212102022222211102002200221222210021212212200222210221121221222222022021201202202001012020022111021211122122102002012222212221120102102222012212222021222012222122220022202220202222200221202202220220202202020220222212222020220202200120202200222202220220000121102200111222100222020212210212002212200101222120122222201002112120200222201222222212220120220200111222220222122122222010202101110100022212120100020021112010111222120212221012202211112122010210222100022222211202022200220222222021222212222001200212021210202212122122220002010111121011022012221200212122222201221222221201222012212212102112222221222110122222210202102210201222211022222222220112220210121202211012122212212222221120100221222011222100012222222022002222200021122202200202212012021112212120222022222012002102212222212020202222220002220222211220201102022220211010102120121122122100221121100122112100100222011201221002120210112000211222202200222222202112022000200222201122222212200101201211121220201202022001201202000020220210222222021212202121122001221222222121020012001222002002200001212121122022221012202002201222200220202201201112211202020221202222122111220122021101010210122000121201022121212211202222101012020002121212212012021010202010222122210002112202200222200222202202200000202201112211222012122201221201220000211111222211122102220120012011012222200210022012221212112120101012212001022222222002222020221022202222212222202102212200001212220102122001211220110222112010222022121021102121012020010222010011221222011220102212022201202202022222221202022211200222202202202201212020212220222210211212222001202202202222011111122120221012021122022020110222101000221112000220002000122101102021222022200012012020220022212002212222202101221221221220211012022221212122122001211221022212221120111120222111210222112012022022111202212121110001122210222022222012202022222022202212202211222122200210202212201112122102221222011101200210222100122201100122212200101222100111020222101201212122110002202120222222221212002122202122222212212220221110221220001220200012022100211100012000211000222012022121011121222010011222222001120012102220002101202000112100022222210002002210220122200020212222212021222211121221202112122212010201112000210200222102122212222122202122020222201021222112212101002000202211102001022022202212002020222222212000202212210102200212220222210122022022011220202022220210222010220121001122002120002222001000022202121110011222212020102121222122200102202122202222210100202222211210201211211011200012122120022000100220011221222200120102221121012110002222021122121212111121110202020222122110022022201122222002211022222002212202201020211202120021210202122201101110010202210111222102020220102122212122110202011022020202100201000201210222102222222212212112212101220122210022222220211102211222221212210002022112222201002021122111122111220012010022222222112222222011121002201220212000000120012011222002221222202210201222221002201202200011221210002011221012222221100012212002220200122222221212020221222102022202122221120112001221201220022220122002222202221221212202220222212000201202212020211211111001221012022022212121200101112102222101120122120021122100112222110022122112020212222121021211102111222212211110122200210122212110220210200211222222021220211102122122220022012101001220122202221000101121002201112202011102220012122120021020222201012101022122210020212000200222211200210200201122222222002122222122122001201120102210120001222010120110011121002001212222011121020222112212002122001210022112022202212001212200200012202121212212211010222201012022202112222020021121121011212021122011120222122020022201012102110020221212101102021011121000102001022122210210112111222102200021221221202001202200102120221212222201020202100100111122222202221121112221022122212012212202121012000222002210221000202102022012222222112021201002222012222200201200211221120000202212222022022121202202210101200101101011002100211111201000122012001121212020002100212110211121010120020200101000002010111001020022122012102120100020012221101021100
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
void readImageData(const std::string & data_path,
std::vector<std::string> & data, const int dim)
{
// store image layers in vector. sizeof(char) = 1, sizeof(int) = 4,
// therefore storing image data as one string per image layer is 4 times
// cheaper than storing each pixel as integer
// ----------------
std::ifstream infile(data_path);
std::string line, image;
size_t pos = 0;
while (getline(infile, line, '\n')) {
std::istringstream lineStream(line);
while (pos < line.size()) { // end of line
image = line.substr(pos, dim);
data.push_back(image);
pos += dim;
}
}
}
int getPixelNumber(const std::string & imageLayer, const int dim,
const int intLookedFor)
{
std::vector<int> imagePixels(dim);
int count = 0;
for (int j = 0; j < dim; j++) {
// get j'th character of i'th image string, convert char to int
imagePixels[j] = imageLayer[j] - '0';
if (imagePixels[j] == intLookedFor) { count++; }
}
return count;
}
int getImLayer(const std::vector<std::string> & images, const int dim,
const int intLookedFor, const std::string & minMax)
{
std::vector<int> imagePixels(dim);
int layerIndex = 0;
int minMaxCount;
if (minMax == "min")
minMaxCount = dim+1;
else if (minMax == "max")
minMaxCount = 0;
else {
std::cout << "ERROR: specify 'min' or 'max'\n";
return 1;
}
for (size_t i = 0; i < images.size(); i++) {
int count = getPixelNumber(images[i], dim, intLookedFor);
if (minMax == "min" && count < minMaxCount) {
minMaxCount = count;
layerIndex = i;
}
else if (minMax == "max" && count > minMaxCount) {
minMaxCount = count;
layerIndex = i;
}
} // FOR: image layers
return layerIndex;
}
void checkImage(const std::vector<std::string> & images, const int dim) {
int layerFewest0 = getImLayer(images, dim, 0, "min");
int count1 = getPixelNumber(images[layerFewest0], dim, 1);
int count2 = getPixelNumber(images[layerFewest0], dim, 2);
std::cout << "Image layer " << layerFewest0 << " contains fewest 0s (zeros)\n";
std::cout << "(number of 1-pixels) x (number of 2-pixels) on that layer: ";
std::cout << count1 * count2 << "\n";
}
int main() {
std::string data_path = "in08.txt";
int nx = 25;
int ny = 6;
int dim = nx*ny;
std::vector<std::string> images;
readImageData(data_path, images, dim);
checkImage(images, dim);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment