Advertisement
sarumeister

AoC-2022 Day 2b -- branchless approach

Dec 2nd, 2022 (edited)
895
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1.  
  2. // NOTE: benchmarks show 30% pessimisation on ARMs
  3.  
  4. const char* input = R"(A Y
  5. B X
  6. C Z
  7. )";
  8.  
  9.  
  10. int main()
  11. {
  12.     int score = 0;
  13.  
  14.     bool parsingOk = true;
  15.     int i = 0;
  16.     while (parsingOk && input[i])
  17.     {
  18.         char his = '\0';
  19.         char winType = '\0';
  20.  
  21.         his = input[i];
  22.         i += (0 != input[i]);
  23.         i += (0 != input[i]);
  24.         winType = input[i];
  25.         i += (0 != input[i]);
  26.         i += ('\n' == input[i]);
  27.  
  28.         parsingOk &= ('A' == his) || ('B' == his) || ('C' == his);
  29.         parsingOk &= ('X' == winType) || ('Y' == winType) || ('Z' == winType);
  30.  
  31.         // map rules
  32.         char mine = (('X' == winType) && ('A' == his)) * 'C'    // rock beats scissors
  33.             + (('X' == winType) && ('B' == his)) * 'A'  // paper beats rock
  34.             + (('X' == winType) && ('C' == his)) * 'B'  // scissors beats paper
  35.             + (('Y' == winType) && ('A' == his)) * 'A'  // par
  36.             + (('Y' == winType) && ('B' == his)) * 'B'  // par
  37.             + (('Y' == winType) && ('C' == his)) * 'C'  // par
  38.             + (('Z' == winType) && ('A' == his)) * 'B'  // rock beaten by paper
  39.             + (('Z' == winType) && ('B' == his)) * 'C'  // paper beaten by scissors
  40.             + (('Z' == winType) && ('C' == his)) * 'A'  // scissors beaten by rock
  41.             ;
  42.  
  43.         // calculate score
  44.         score += mine - 'A' + 1;
  45.         score += ('Y' == winType) * 3 + ('Z' == winType) * 6;
  46.     }
  47.  
  48.     return score;
  49.  
  50. //    printf("%d\n", score);
  51. //    return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement