Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
18
Task/Ackermann-function/C/ackermann-function-1.c
Normal file
18
Task/Ackermann-function/C/ackermann-function-1.c
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int ackermann(int m, int n)
|
||||
{
|
||||
if (!m) return n + 1;
|
||||
if (!n) return ackermann(m - 1, 1);
|
||||
return ackermann(m - 1, ackermann(m, n - 1));
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int m, n;
|
||||
for (m = 0; m <= 4; m++)
|
||||
for (n = 0; n < 6 - m; n++)
|
||||
printf("A(%d, %d) = %d\n", m, n, ackermann(m, n));
|
||||
|
||||
return 0;
|
||||
}
|
||||
41
Task/Ackermann-function/C/ackermann-function-2.c
Normal file
41
Task/Ackermann-function/C/ackermann-function-2.c
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int m_bits, n_bits;
|
||||
int *cache;
|
||||
|
||||
int ackermann(int m, int n)
|
||||
{
|
||||
int idx, res;
|
||||
if (!m) return n + 1;
|
||||
|
||||
if (n >= 1<<n_bits) {
|
||||
printf("%d, %d\n", m, n);
|
||||
idx = 0;
|
||||
} else {
|
||||
idx = (m << n_bits) + n;
|
||||
if (cache[idx]) return cache[idx];
|
||||
}
|
||||
|
||||
if (!n) res = ackermann(m - 1, 1);
|
||||
else res = ackermann(m - 1, ackermann(m, n - 1));
|
||||
|
||||
if (idx) cache[idx] = res;
|
||||
return res;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int m, n;
|
||||
|
||||
m_bits = 3;
|
||||
n_bits = 20; /* can save n values up to 2**20 - 1, that's 1 meg */
|
||||
cache = malloc(sizeof(int) * (1 << (m_bits + n_bits)));
|
||||
memset(cache, 0, sizeof(int) * (1 << (m_bits + n_bits)));
|
||||
|
||||
for (m = 0; m <= 4; m++)
|
||||
for (n = 0; n < 6 - m; n++)
|
||||
printf("A(%d, %d) = %d\n", m, n, ackermann(m, n));
|
||||
|
||||
return 0;
|
||||
}
|
||||
100
Task/Ackermann-function/C/ackermann-function-3.c
Normal file
100
Task/Ackermann-function/C/ackermann-function-3.c
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/* Thejaka Maldeniya */
|
||||
|
||||
#include <conio.h>
|
||||
|
||||
unsigned long long HR(unsigned int n, unsigned long long a, unsigned long long b) {
|
||||
// (Internal) Recursive Hyperfunction: Perform a Hyperoperation...
|
||||
|
||||
unsigned long long r = 1;
|
||||
|
||||
while(b--)
|
||||
r = n - 3 ? HR(n - 1, a, r) : /* Exponentiation */ r * a;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
unsigned long long H(unsigned int n, unsigned long long a, unsigned long long b) {
|
||||
// Hyperfunction (Recursive-Iterative-O(1) Hybrid): Perform a Hyperoperation...
|
||||
|
||||
switch(n) {
|
||||
case 0:
|
||||
// Increment
|
||||
return ++b;
|
||||
case 1:
|
||||
// Addition
|
||||
return a + b;
|
||||
case 2:
|
||||
// Multiplication
|
||||
return a * b;
|
||||
}
|
||||
|
||||
return HR(n, a, b);
|
||||
}
|
||||
|
||||
unsigned long long APH(unsigned int m, unsigned int n) {
|
||||
// Ackermann-Péter Function (Recursive-Iterative-O(1) Hybrid)
|
||||
return H(m, 2, n + 3) - 3;
|
||||
}
|
||||
|
||||
unsigned long long * p = 0;
|
||||
|
||||
unsigned long long APRR(unsigned int m, unsigned int n) {
|
||||
if (!m) return ++n;
|
||||
|
||||
unsigned long long r = p ? p[m] : APRR(m - 1, 1);
|
||||
|
||||
--m;
|
||||
while(n--)
|
||||
r = APRR(m, r);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
unsigned long long APRA(unsigned int m, unsigned int n) {
|
||||
return
|
||||
m ?
|
||||
n ?
|
||||
APRR(m, n)
|
||||
: p ? p[m] : APRA(--m, 1)
|
||||
: ++n
|
||||
;
|
||||
}
|
||||
|
||||
unsigned long long APR(unsigned int m, unsigned int n) {
|
||||
unsigned long long r = 0;
|
||||
|
||||
// Allocate
|
||||
p = (unsigned long long *) malloc(sizeof(unsigned long long) * (m + 1));
|
||||
|
||||
// Initialize
|
||||
for(; r <= m; ++r)
|
||||
p[r] = r ? APRA(r - 1, 1) : APRA(r, 0);
|
||||
|
||||
// Calculate
|
||||
r = APRA(m, n);
|
||||
|
||||
// Free
|
||||
free(p);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
unsigned long long AP(unsigned int m, unsigned int n) {
|
||||
return APH(m, n);
|
||||
return APR(m, n);
|
||||
}
|
||||
|
||||
int main(int n, char ** a) {
|
||||
unsigned int M, N;
|
||||
|
||||
if (n != 3) {
|
||||
printf("Usage: %s <m> <n>\n", *a);
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("AckermannPeter(%u, %u) = %llu\n", M = atoi(a[1]), N = atoi(a[2]), AP(M, N));
|
||||
|
||||
//printf("\nPress any key...");
|
||||
//getch();
|
||||
return 0;
|
||||
}
|
||||
147
Task/Ackermann-function/C/ackermann-function-4.c
Normal file
147
Task/Ackermann-function/C/ackermann-function-4.c
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
/* Thejaka Maldeniya */
|
||||
|
||||
#include <conio.h>
|
||||
|
||||
unsigned long long HI(unsigned int n, unsigned long long a, unsigned long long b) {
|
||||
// Hyperfunction (Iterative): Perform a Hyperoperation...
|
||||
|
||||
unsigned long long *I, r = 1;
|
||||
unsigned int N = n - 3;
|
||||
|
||||
if (!N)
|
||||
// Exponentiation
|
||||
while(b--)
|
||||
r *= a;
|
||||
else if(b) {
|
||||
n -= 2;
|
||||
|
||||
// Allocate
|
||||
I = (unsigned long long *) malloc(sizeof(unsigned long long) * n--);
|
||||
|
||||
// Initialize
|
||||
I[n] = b;
|
||||
|
||||
// Calculate
|
||||
for(;;) {
|
||||
if(I[n]) {
|
||||
--I[n];
|
||||
if (n)
|
||||
I[--n] = r, r = 1;
|
||||
else
|
||||
r *= a;
|
||||
} else
|
||||
for(;;)
|
||||
if (n == N)
|
||||
goto a;
|
||||
else if(I[++n])
|
||||
break;
|
||||
}
|
||||
a:
|
||||
|
||||
// Free
|
||||
free(I);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
unsigned long long H(unsigned int n, unsigned long long a, unsigned long long b) {
|
||||
// Hyperfunction (Iterative-O(1) Hybrid): Perform a Hyperoperation...
|
||||
|
||||
switch(n) {
|
||||
case 0:
|
||||
// Increment
|
||||
return ++b;
|
||||
case 1:
|
||||
// Addition
|
||||
return a + b;
|
||||
case 2:
|
||||
// Multiplication
|
||||
return a * b;
|
||||
}
|
||||
|
||||
return HI(n, a, b);
|
||||
}
|
||||
|
||||
unsigned long long APH(unsigned int m, unsigned int n) {
|
||||
// Ackermann-Péter Function (Recursive-Iterative-O(1) Hybrid)
|
||||
return H(m, 2, n + 3) - 3;
|
||||
}
|
||||
|
||||
unsigned long long * p = 0;
|
||||
|
||||
unsigned long long APIA(unsigned int m, unsigned int n) {
|
||||
if (!m) return ++n;
|
||||
|
||||
// Initialize
|
||||
unsigned long long *I, r = p ? p[m] : APIA(m - 1, 1);
|
||||
unsigned int M = m;
|
||||
|
||||
if (n) {
|
||||
// Allocate
|
||||
I = (unsigned long long *) malloc(sizeof(unsigned long long) * (m + 1));
|
||||
|
||||
// Initialize
|
||||
I[m] = n;
|
||||
|
||||
// Calculate
|
||||
for(;;) {
|
||||
if(I[m]) {
|
||||
if (m)
|
||||
--I[m], I[--m] = r, r = p ? p[m] : APIA(m - 1, 1);
|
||||
else
|
||||
r += I[m], I[m] = 0;
|
||||
} else
|
||||
for(;;)
|
||||
if (m == M)
|
||||
goto a;
|
||||
else if(I[++m])
|
||||
break;
|
||||
}
|
||||
a:
|
||||
|
||||
// Free
|
||||
free(I);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
unsigned long long API(unsigned int m, unsigned int n) {
|
||||
unsigned long long r = 0;
|
||||
|
||||
// Allocate
|
||||
p = (unsigned long long *) malloc(sizeof(unsigned long long) * (m + 1));
|
||||
|
||||
// Initialize
|
||||
for(; r <= m; ++r)
|
||||
p[r] = r ? APIA(r - 1, 1) : APIA(r, 0);
|
||||
|
||||
// Calculate
|
||||
r = APIA(m, n);
|
||||
|
||||
// Free
|
||||
free(p);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
unsigned long long AP(unsigned int m, unsigned int n) {
|
||||
return APH(m, n);
|
||||
return API(m, n);
|
||||
}
|
||||
|
||||
int main(int n, char ** a) {
|
||||
unsigned int M, N;
|
||||
|
||||
if (n != 3) {
|
||||
printf("Usage: %s <m> <n>\n", *a);
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("AckermannPeter(%u, %u) = %llu\n", M = atoi(a[1]), N = atoi(a[2]), AP(M, N));
|
||||
|
||||
//printf("\nPress any key...");
|
||||
//getch();
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue