| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include "main.h"
- void part1(){
- QFile input("input.txt");
- QTextStream strm(&input);
- if(!input.open(QIODevice::ReadOnly | QIODevice::Text)){
- qDebug() << "file borked";
- }
- int vals[] = {0,0,0,0,0,0,0,0,0,0,0,0};
- int i = 0;
- int lines = 0;
- unsigned short gamma = 0;
- unsigned short epsilon = 0;
- qDebug() << gamma;
- QString line = "";
- while(!strm.atEnd()){
- lines++;
- line = strm.readLine();
- for (i=0;i<12;i++){
- vals[i] += (line.toStdString()[i]-'0');
- }
- }
- for(i=0;i<12;i++){
- if(vals[i] > (lines/2)){
- gamma +=1;
- }
- if(i < 11){
- gamma <<=1;
- }
- }
- epsilon = ~gamma;
- epsilon = epsilon & 0b0000111111111111; //bitmask with 0b0000 1111 1111 1111
- qDebug() << epsilon;
- qDebug() << gamma;
- qDebug() << (gamma*epsilon);
- }
- void part2(){
- QFile input("input.txt");
- QTextStream strm(&input);
- if(!input.open(QIODevice::ReadOnly | QIODevice::Text)){
- qDebug() << "file borked";
- }
- int vals[] = {0,0,0,0,0,0,0,0,0,0,0,0};
- int lncnt = 0;
- QStringList* oxygenlist = new QStringList;
- QStringList* co2list = new QStringList;
- QString line = "";
- while(!strm.atEnd()){
- line = strm.readLine();
- oxygenlist->append(line);
- co2list->append(line);
- lncnt++;
- for (int i=0;i<12;i++){
- vals[i] += (line.toStdString()[i]-'0');
- }
- }
-
- for(unsigned long long i = 0;i<sizeof(vals);i++){
- for(int j=0;j<oxygenlist->size();j++){
- if (oxygenlist->size() == 1){
- continue;
- }
- if(vals[i] >= (lncnt / 2)){
- if(oxygenlist->at(j).toStdString()[i] == '0'){
- oxygenlist->removeAt(j);
- }
- }else{
- if(oxygenlist->at(j).toStdString()[i] == '1'){
- oxygenlist->removeAt(j);
- }
- }
- }
- for(int j=0;j<co2list->size();j++){
- if (co2list->size() == 1){
- continue;
- }
- if(vals[i] < (lncnt / 2)){
- if(co2list->at(j).toStdString()[i] == '0'){
- co2list->removeAt(j);
- }
- }else{
- if(co2list->at(j).toStdString()[i] == '1'){
- co2list->removeAt(j);
- }
- }
- }
- }
- int num1 = co2list->at(0).toInt(nullptr,2);
- int num2 = oxygenlist->at(0).toInt(nullptr,2);
- qDebug() << co2list->at(0);
- qDebug() << num1;
- qDebug() << oxygenlist->at(0);
- qDebug() << num2;
- qDebug() << num1 * num2;
- }
- int main(int argc, char **argv){
- part2();
- return 0;
- }
|