fork download
  1. #include <stdio.h>
  2. #include <vector>
  3. #include <string>
  4.  
  5. int main() {
  6. std::vector<int> s = {2, 2};
  7. for (; s.size() != 1;) {
  8. for (auto i = 0ul; i < s.size() - 1; i++) {
  9. printf("ack(%d, ", s[i]);
  10. }
  11. printf("%d%s\n", s.back(), std::string(s.size() - 1, ')').c_str());
  12. auto m = s[s.size() - 2], n = s[s.size() - 1];
  13. if (m == 0) {
  14. s.pop_back();
  15. s.back() = n + 1;
  16. } else if (n == 0) {
  17. s[s.size() - 2] = m - 1;
  18. s[s.size() - 1] = 1;
  19. } else {
  20. s[s.size() - 2] = m - 1;
  21. s[s.size() - 1] = m;
  22. s.push_back(n - 1);
  23. }
  24. }
  25. printf("%d\n", s.back());
  26. return 0;
  27. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
ack(2, 2)
ack(1, ack(2, 1))
ack(1, ack(1, ack(2, 0)))
ack(1, ack(1, ack(1, 1)))
ack(1, ack(1, ack(0, ack(1, 0))))
ack(1, ack(1, ack(0, ack(0, 1))))
ack(1, ack(1, ack(0, 2)))
ack(1, ack(1, 3))
ack(1, ack(0, ack(1, 2)))
ack(1, ack(0, ack(0, ack(1, 1))))
ack(1, ack(0, ack(0, ack(0, ack(1, 0)))))
ack(1, ack(0, ack(0, ack(0, ack(0, 1)))))
ack(1, ack(0, ack(0, ack(0, 2))))
ack(1, ack(0, ack(0, 3)))
ack(1, ack(0, 4))
ack(1, 5)
ack(0, ack(1, 4))
ack(0, ack(0, ack(1, 3)))
ack(0, ack(0, ack(0, ack(1, 2))))
ack(0, ack(0, ack(0, ack(0, ack(1, 1)))))
ack(0, ack(0, ack(0, ack(0, ack(0, ack(1, 0))))))
ack(0, ack(0, ack(0, ack(0, ack(0, ack(0, 1))))))
ack(0, ack(0, ack(0, ack(0, ack(0, 2)))))
ack(0, ack(0, ack(0, ack(0, 3))))
ack(0, ack(0, ack(0, 4)))
ack(0, ack(0, 5))
ack(0, 6)
7