main.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "main.h"
  2. void part1(){
  3. QFile input("input.txt");
  4. QTextStream strm(&input);
  5. if(!input.open(QIODevice::ReadOnly | QIODevice::Text)){
  6. qDebug() << "file borked";
  7. }
  8. int vals[] = {0,0,0,0,0,0,0,0,0,0,0,0};
  9. int i = 0;
  10. int lines = 0;
  11. unsigned short gamma = 0;
  12. unsigned short epsilon = 0;
  13. qDebug() << gamma;
  14. QString line = "";
  15. while(!strm.atEnd()){
  16. lines++;
  17. line = strm.readLine();
  18. for (i=0;i<12;i++){
  19. vals[i] += (line.toStdString()[i]-'0');
  20. }
  21. }
  22. for(i=0;i<12;i++){
  23. if(vals[i] > (lines/2)){
  24. gamma +=1;
  25. }
  26. if(i < 11){
  27. gamma <<=1;
  28. }
  29. }
  30. epsilon = ~gamma;
  31. epsilon = epsilon & 0b0000111111111111; //bitmask with 0b0000 1111 1111 1111
  32. qDebug() << epsilon;
  33. qDebug() << gamma;
  34. qDebug() << (gamma*epsilon);
  35. }
  36. void part2(){
  37. QFile input("input.txt");
  38. QTextStream strm(&input);
  39. if(!input.open(QIODevice::ReadOnly | QIODevice::Text)){
  40. qDebug() << "file borked";
  41. }
  42. int vals[] = {0,0,0,0,0,0,0,0,0,0,0,0};
  43. int lncnt = 0;
  44. QStringList* oxygenlist = new QStringList;
  45. QStringList* co2list = new QStringList;
  46. QString line = "";
  47. while(!strm.atEnd()){
  48. line = strm.readLine();
  49. oxygenlist->append(line);
  50. co2list->append(line);
  51. lncnt++;
  52. for (int i=0;i<12;i++){
  53. vals[i] += (line.toStdString()[i]-'0');
  54. }
  55. }
  56. for(unsigned long long i = 0;i<sizeof(vals);i++){
  57. for(int j=0;j<oxygenlist->size();j++){
  58. if (oxygenlist->size() == 1){
  59. continue;
  60. }
  61. if(vals[i] >= (lncnt / 2)){
  62. if(oxygenlist->at(j).toStdString()[i] == '0'){
  63. oxygenlist->removeAt(j);
  64. }
  65. }else{
  66. if(oxygenlist->at(j).toStdString()[i] == '1'){
  67. oxygenlist->removeAt(j);
  68. }
  69. }
  70. }
  71. for(int j=0;j<co2list->size();j++){
  72. if (co2list->size() == 1){
  73. continue;
  74. }
  75. if(vals[i] < (lncnt / 2)){
  76. if(co2list->at(j).toStdString()[i] == '0'){
  77. co2list->removeAt(j);
  78. }
  79. }else{
  80. if(co2list->at(j).toStdString()[i] == '1'){
  81. co2list->removeAt(j);
  82. }
  83. }
  84. }
  85. }
  86. int num1 = co2list->at(0).toInt(nullptr,2);
  87. int num2 = oxygenlist->at(0).toInt(nullptr,2);
  88. qDebug() << co2list->at(0);
  89. qDebug() << num1;
  90. qDebug() << oxygenlist->at(0);
  91. qDebug() << num2;
  92. qDebug() << num1 * num2;
  93. }
  94. int main(int argc, char **argv){
  95. part2();
  96. return 0;
  97. }