/ SynacorChallenge / teleporter.cpp
teleporter.cpp
 1  #include <bits/stdc++.h>
 2  
 3  using namespace std;
 4  
 5  const int MOD = 1<<15;
 6  map<tuple<int, int>, int> dp;
 7  int param;
 8  
 9  int ack(int a, int b) {
10      a %= MOD;
11      b %= MOD;
12      if (!a) return (b+1)%MOD;
13      tuple<int, int> key = make_tuple(a, b);
14      if (dp.count(key)) return dp[key];
15      
16      if (!b) return dp[key] = ack(a - 1, param);
17      else return dp[key] = ack(a - 1, ack(a, b - 1));
18  }
19  
20  int ackermann(int k) {
21      param = k;
22      dp.clear();
23      return ack(4, 1);
24  }
25  
26  int main() {
27      for (int i = 1; i < MOD; i++) {
28          if (i%500==0) cout << i << "\n";
29          if (ackermann(i) == 6) {
30              // RESULT: 25734
31              cout << "RESULT: " << i << endl;
32              break;
33          }
34      }
35      return 0;
36  }