fork download
  1.  
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. class Ack
  7. {
  8. public:
  9. int *n;
  10. Ack *f;
  11. Ack *s;
  12.  
  13. Ack()
  14. {
  15. n = NULL;
  16. f = NULL;
  17. s = NULL;
  18. }
  19.  
  20. Ack(int a)
  21. {
  22. n = new int;
  23. *n = a;
  24. f = NULL;
  25. s = NULL;
  26. }
  27.  
  28. Ack(int a,int b)
  29. {
  30. n = NULL;
  31. f = new Ack();
  32. f->n = new int;
  33. *(f->n) = a;
  34. s = new Ack();
  35. s->n = new int;
  36. *(s->n) = b;
  37. }
  38.  
  39. void dump()
  40. {
  41. if(n)
  42. {
  43. cout<<(*n);
  44. }
  45. else
  46. {
  47. cout<<"ack(";
  48. f->dump();
  49. cout<<",";
  50. s->dump();
  51. cout<<")";
  52. }
  53. }
  54.  
  55. void next()
  56. {
  57. if(n)
  58. {
  59. return;
  60. }
  61. if(s->n)
  62. {
  63. if(*(f->n)==0)
  64. {
  65. n=new int;
  66. *n=*(s->n)+1;
  67. f=NULL;
  68. s=NULL;
  69. }
  70. else if(*(s->n)==0)
  71. {
  72. (*(f->n))--;
  73. (*(s->n))=1;
  74. }
  75. else
  76. {
  77. s=new Ack(*(f->n),*(s->n)-1);
  78. (*(f->n))--;
  79. }
  80. }
  81. else
  82. {
  83. s->next();
  84. }
  85. }
  86. };
  87.  
  88. int main()
  89. {
  90. Ack a=Ack(2,2);
  91. while(!a.n)
  92. {
  93. a.dump();
  94. cout<<endl;
  95. a.next();
  96. }
  97. a.dump();
  98. cout<<endl;
  99. }
Success #stdin #stdout 0s 3428KB
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