September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
12
Task/Ackermann-function/Agda/ackermann-function-1.agda
Normal file
12
Task/Ackermann-function/Agda/ackermann-function-1.agda
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
open import Data.Nat
|
||||
open import Data.Nat.Show
|
||||
open import IO
|
||||
|
||||
module Ackermann where
|
||||
|
||||
ack : ℕ -> ℕ -> ℕ
|
||||
ack zero n = n + 1
|
||||
ack (suc m) zero = ack m 1
|
||||
ack (suc m) (suc n) = ack m (ack (suc m) n)
|
||||
|
||||
main = run (putStrLn (show (ack 3 9)))
|
||||
2
Task/Ackermann-function/Agda/ackermann-function-2.agda
Normal file
2
Task/Ackermann-function/Agda/ackermann-function-2.agda
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
agda --compile Ackermann.agda
|
||||
./Ackermann
|
||||
12
Task/Ackermann-function/Bc/ackermann-function.bc
Normal file
12
Task/Ackermann-function/Bc/ackermann-function.bc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
define ack(m, n) {
|
||||
if ( m == 0 ) return (n+1);
|
||||
if ( n == 0 ) return (ack(m-1, 1));
|
||||
return (ack(m-1, ack(m, n-1)));
|
||||
}
|
||||
|
||||
for (n=0; n<7; n++) {
|
||||
for (m=0; m<4; m++) {
|
||||
print "A(", m, ",", n, ") = ", ack(m,n), "\n";
|
||||
}
|
||||
}
|
||||
quit
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
>M?f@h@gMf@h3yzp if m>0 and n>0 => replace m,n with m-1,m,n-1
|
||||
>@h@g'b?1f@h@gM?f@hzp if m>0 and n=0 => replace m,n with m-1,1
|
||||
_ii>Ag~1?~Lpz1~2h@g'd?g?Pfzp if m=0 => replace m,n with n+1
|
||||
>I;
|
||||
b < <
|
||||
10
Task/Ackermann-function/Beeswax/ackermann-function-2.beeswax
Normal file
10
Task/Ackermann-function/Beeswax/ackermann-function-2.beeswax
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
>Mf@Ph?@g@2h@Mf@Php if m>4 and n>0 => replace m,n with m-1,m,n-1
|
||||
>~4~L#1~2hg'd?1f@hgM?f2h p if m>4 and n=0 => replace m,n with m-1,1
|
||||
# q < /n+3 times \
|
||||
#X~4K#?2Fg?PPP>@B@M"pb if m=4 => replace m,n with 2^(2^(....)))-3
|
||||
# >~3K#?g?PPP~2BMMp>@MMMp if m=3 => replace m,n with 2^(n+3)-3
|
||||
_ii>Ag~1?~Lpz1~2h@gX'#?g?P p M if m=0 => replace m,n with n+1
|
||||
z I ~>~1K#?g?PP p if m=1 => replace m,n with n+2
|
||||
f ; >2K#?g?~2.PPPp if m=2 => replace m,n with 2n+3
|
||||
z b < < <
|
||||
d <
|
||||
|
|
@ -1,32 +1,127 @@
|
|||
using System;
|
||||
class Program
|
||||
using System.Numerics;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Ackermann_Function
|
||||
{
|
||||
public static long Ackermann(long m, long n)
|
||||
class Program
|
||||
{
|
||||
if(m > 0)
|
||||
static void Main(string[] args)
|
||||
{
|
||||
if (n > 0)
|
||||
return Ackermann(m - 1, Ackermann(m, n - 1));
|
||||
else if (n == 0)
|
||||
return Ackermann(m - 1, 1);
|
||||
}
|
||||
else if(m == 0)
|
||||
{
|
||||
if(n >= 0)
|
||||
return n + 1;
|
||||
}
|
||||
|
||||
throw new System.ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
static void Main()
|
||||
{
|
||||
for (long m = 0; m <= 3; ++m)
|
||||
{
|
||||
for (long n = 0; n <= 4; ++n)
|
||||
int _m = 0;
|
||||
int _n = 0;
|
||||
Console.Write("m = ");
|
||||
try
|
||||
{
|
||||
Console.WriteLine("Ackermann({0}, {1}) = {2}", m, n, Ackermann(m, n));
|
||||
_m = Convert.ToInt32(Console.ReadLine());
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Console.WriteLine("Please enter a number.");
|
||||
}
|
||||
Console.Write("n = ");
|
||||
try
|
||||
{
|
||||
_n = Convert.ToInt32(Console.ReadLine());
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Console.WriteLine("Please enter a number.");
|
||||
}
|
||||
//for (long m = 0; m <= 10; ++m)
|
||||
//{
|
||||
// for (long n = 0; n <= 10; ++n)
|
||||
// {
|
||||
// DateTime now = DateTime.Now;
|
||||
// Console.WriteLine("Ackermann({0}, {1}) = {2}", m, n, Ackermann(m, n));
|
||||
// Console.WriteLine("Time taken:{0}", DateTime.Now - now);
|
||||
// }
|
||||
//}
|
||||
|
||||
DateTime now = DateTime.Now;
|
||||
Console.WriteLine("Ackermann({0}, {1}) = {2}", _m, _n, Ackermann(_m, _n));
|
||||
Console.WriteLine("Time taken:{0}", DateTime.Now - now);
|
||||
File.WriteAllText("number.txt", Ackermann(_m, _n).ToString());
|
||||
Process.Start("number.txt");
|
||||
Console.ReadKey();
|
||||
}
|
||||
public class OverflowlessStack<T>
|
||||
{
|
||||
internal sealed class SinglyLinkedNode
|
||||
{
|
||||
private const int ArraySize = 2048;
|
||||
T[] _array;
|
||||
int _size;
|
||||
public SinglyLinkedNode Next;
|
||||
public SinglyLinkedNode()
|
||||
{
|
||||
_array = new T[ArraySize];
|
||||
}
|
||||
public bool IsEmpty { get { return _size == 0; } }
|
||||
public SinglyLinkedNode Push(T item)
|
||||
{
|
||||
if (_size == ArraySize - 1)
|
||||
{
|
||||
SinglyLinkedNode n = new SinglyLinkedNode();
|
||||
n.Next = this;
|
||||
n.Push(item);
|
||||
return n;
|
||||
}
|
||||
_array[_size++] = item;
|
||||
return this;
|
||||
}
|
||||
public T Pop()
|
||||
{
|
||||
return _array[--_size];
|
||||
}
|
||||
}
|
||||
private SinglyLinkedNode _head = new SinglyLinkedNode();
|
||||
|
||||
public T Pop()
|
||||
{
|
||||
T ret = _head.Pop();
|
||||
if (_head.IsEmpty && _head.Next != null)
|
||||
_head = _head.Next;
|
||||
return ret;
|
||||
}
|
||||
public void Push(T item)
|
||||
{
|
||||
_head = _head.Push(item);
|
||||
}
|
||||
public bool IsEmpty
|
||||
{
|
||||
get { return _head.Next == null && _head.IsEmpty; }
|
||||
}
|
||||
}
|
||||
public static BigInteger Ackermann(BigInteger m, BigInteger n)
|
||||
{
|
||||
var stack = new OverflowlessStack<BigInteger>();
|
||||
stack.Push(m);
|
||||
while (!stack.IsEmpty)
|
||||
{
|
||||
m = stack.Pop();
|
||||
skipStack:
|
||||
if (m == 0)
|
||||
n = n + 1;
|
||||
else if (m == 1)
|
||||
n = n + 2;
|
||||
else if (m == 2)
|
||||
n = n * 2 + 3;
|
||||
else if (n == 0)
|
||||
{
|
||||
--m;
|
||||
n = 1;
|
||||
goto skipStack;
|
||||
}
|
||||
else
|
||||
{
|
||||
stack.Push(m - 1);
|
||||
--n;
|
||||
goto skipStack;
|
||||
}
|
||||
}
|
||||
return n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,29 @@
|
|||
#define system.
|
||||
#define extensions.
|
||||
import extensions.
|
||||
|
||||
// --- Ackermann function ---
|
||||
|
||||
#symbol ackermann = (:m:n)
|
||||
ackermann = (:m:n)
|
||||
[
|
||||
if((n < 0)||(m < 0))
|
||||
[
|
||||
InvalidArgumentException new; raise
|
||||
].
|
||||
|
||||
m =>
|
||||
0 ? [ n + 1 ]
|
||||
> 0 ? [
|
||||
n => 0 ? [ ackermann eval:(m - 1):1 ]
|
||||
> 0 ? [ ackermann eval:(m - 1):(ackermann eval:m:(n-1)) ]
|
||||
0 [ ^n + 1 ];
|
||||
! [
|
||||
n =>
|
||||
0 [ ^ackermann eval(m - 1,1) ];
|
||||
! [ ^ackermann eval(m - 1,ackermann eval(m,n-1)) ]
|
||||
]
|
||||
].
|
||||
|
||||
#symbol program =
|
||||
program =
|
||||
[
|
||||
0 to:3 &doEach: (:i)
|
||||
0 to:3 do(:i)
|
||||
[
|
||||
0 to:5 &doEach: (:j)
|
||||
0 to:5 do(:j)
|
||||
[
|
||||
console writeLine:"A(":i:",":j:")=":(ackermann eval:i:j).
|
||||
].
|
||||
console printLine("A(",i,",",j,")=",ackermann eval(i,j))
|
||||
]
|
||||
].
|
||||
|
||||
console readChar.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
A (m, n) = m == 0 ? n + 1 : n == 0 ? A (m - 1, 1) : A (m - 1, A (m, n - 1))
|
||||
print A (0, 4)
|
||||
print A (1, 4)
|
||||
print A (2, 4)
|
||||
print A (3, 4)
|
||||
|
|
@ -1,3 +1,7 @@
|
|||
ack 0 n = n + 1
|
||||
ack m 0 = ack (m-1) 1
|
||||
ack m n = ack (m-1) (ack m (n-1))
|
||||
ack :: Int -> Int -> Int
|
||||
ack 0 n = succ n
|
||||
ack m 0 = ack (pred m) 1
|
||||
ack m n = ack (pred m) (ack m (pred n))
|
||||
|
||||
main :: IO ()
|
||||
main = mapM_ print $ uncurry ack <$> [(0, 0), (3, 4)]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
package ackermann
|
||||
|
||||
fun A(m: Long, n: Long): Long = when {
|
||||
m == 0L -> n + 1
|
||||
m > 0L -> when {
|
||||
|
|
|
|||
3
Task/Ackermann-function/MLite/ackermann-function-1.mlite
Normal file
3
Task/Ackermann-function/MLite/ackermann-function-1.mlite
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fun ackermann( 0, n ) = n + 1
|
||||
| ( m, 0 ) = ackermann( m - 1, 1 )
|
||||
| ( m, n ) = ackermann( m - 1, ackermann(m, n - 1) )
|
||||
5
Task/Ackermann-function/MLite/ackermann-function-2.mlite
Normal file
5
Task/Ackermann-function/MLite/ackermann-function-2.mlite
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
fun jota x = map (fn x = x-1) ` iota x
|
||||
|
||||
fun test_tuples (x, y) = append_map (fn a = map (fn b = (b, a)) ` jota x) ` jota y
|
||||
|
||||
map ackermann (test_tuples(4,9))
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
proc Ackermann(m, n: int64): int64 =
|
||||
if m == 0:
|
||||
result = n + 1
|
||||
elif n == 0:
|
||||
result = Ackermann(m - 1, 1)
|
||||
else:
|
||||
result = Ackermann(m - 1, Ackermann(m, n - 1))
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
from strutils import parseInt
|
||||
|
||||
proc ackermann(m,n: int): int =
|
||||
var res: int
|
||||
if m == 0:
|
||||
res += n + 1
|
||||
elif m > 0 and n == 0:
|
||||
res += ackermann(m-1, 1)
|
||||
elif m > 0 and n > 0:
|
||||
res += ackermann(m-1, ackermann(m, n-1))
|
||||
return res
|
||||
|
||||
proc getnumber(): int =
|
||||
try:
|
||||
parseInt(readLine(stdin))
|
||||
except EInvalidValue:
|
||||
echo("Please enter an integer: ")
|
||||
getnumber()
|
||||
|
||||
echo("First number please: ")
|
||||
var first: int = getnumber()
|
||||
while first < 0:
|
||||
echo("Please enter a non-negative integer value.")
|
||||
first = getnumber()
|
||||
|
||||
echo("Second number please: ")
|
||||
var second: int = getnumber()
|
||||
while second < 0:
|
||||
echo("Please enter a non-negative integer value.")
|
||||
second = getnumber()
|
||||
|
||||
echo("Result: " & $ackermann(first, second))
|
||||
25
Task/Ackermann-function/Nim/ackermann-function.nim
Normal file
25
Task/Ackermann-function/Nim/ackermann-function.nim
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
from strutils import parseInt
|
||||
|
||||
proc ackermann(m, n: int64): int64 =
|
||||
if m == 0:
|
||||
result = n + 1
|
||||
elif n == 0:
|
||||
result = ackermann(m - 1, 1)
|
||||
else:
|
||||
result = ackermann(m - 1, ackermann(m, n - 1))
|
||||
|
||||
proc getNumber(): int =
|
||||
try:
|
||||
result = stdin.readLine.parseInt
|
||||
except ValueError:
|
||||
echo "An integer, please!"
|
||||
result = getNumber()
|
||||
if result < 0:
|
||||
echo "Please Enter a non-negative Integer: "
|
||||
result = getNumber()
|
||||
|
||||
echo "First non-negative Integer please: "
|
||||
let first = getNumber()
|
||||
echo "Second non-negative Integer please: "
|
||||
let second = getNumber()
|
||||
echo "Reslut: ", $ackermann(first, second)
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
proc Ackermann(m, n: int64): int64 =
|
||||
if m == 0:
|
||||
result = n + 1
|
||||
elif n == 0:
|
||||
result = Ackermann(m - 1, 1)
|
||||
else:
|
||||
result = Ackermann(m - 1, Ackermann(m, n - 1))
|
||||
18
Task/Ackermann-function/Nit/ackermann-function.nit
Normal file
18
Task/Ackermann-function/Nit/ackermann-function.nit
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Task: Ackermann function
|
||||
#
|
||||
# A simple straightforward recursive implementation.
|
||||
module ackermann_function
|
||||
|
||||
fun ack(m, n: Int): Int
|
||||
do
|
||||
if m == 0 then return n + 1
|
||||
if n == 0 then return ack(m-1,1)
|
||||
return ack(m-1, ack(m, n-1))
|
||||
end
|
||||
|
||||
for m in [0..3] do
|
||||
for n in [0..6] do
|
||||
print ack(m,n)
|
||||
end
|
||||
print ""
|
||||
end
|
||||
13
Task/Ackermann-function/OoRexx/ackermann-function.rexx
Normal file
13
Task/Ackermann-function/OoRexx/ackermann-function.rexx
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
loop m = 0 to 3
|
||||
loop n = 0 to 6
|
||||
say "Ackermann("m", "n") =" ackermann(m, n)
|
||||
end
|
||||
end
|
||||
|
||||
::routine ackermann
|
||||
use strict arg m, n
|
||||
-- give us some precision room
|
||||
numeric digits 10000
|
||||
if m = 0 then return n + 1
|
||||
else if n = 0 then return ackermann(m - 1, 1)
|
||||
else return ackermann(m - 1, ackermann(m, n - 1))
|
||||
17
Task/Ackermann-function/Stata/ackermann-function.stata
Normal file
17
Task/Ackermann-function/Stata/ackermann-function.stata
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
mata
|
||||
function ackermann(m,n) {
|
||||
if (m==0) {
|
||||
return(n+1)
|
||||
} else if (n==0) {
|
||||
return(ackermann(m-1,1))
|
||||
} else {
|
||||
return(ackermann(m-1,ackermann(m,n-1)))
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i<=3; i++) printf("%f\n",ackermann(i,4))
|
||||
5
|
||||
6
|
||||
11
|
||||
125
|
||||
end
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
PROGRAM:ACKERMAN
|
||||
:If not(M
|
||||
:Then
|
||||
:N+1→N
|
||||
:Return
|
||||
:Else
|
||||
:If not(N
|
||||
:Then
|
||||
:1→N
|
||||
:M-1→M
|
||||
:prgmACKERMAN
|
||||
:Else
|
||||
:N-1→N
|
||||
:M→L1(1+dim(L1
|
||||
:prgmACKERMAN
|
||||
:Ans→N
|
||||
:L1(dim(L1))-1→M
|
||||
:dim(L1)-1→dim(L1
|
||||
:prgmACKERMAN
|
||||
:End
|
||||
:End
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
PROGRAM:AHANDLER
|
||||
:0→dim(L1
|
||||
:Prompt M
|
||||
:Prompt N
|
||||
:prgmACKERMAN
|
||||
:Disp Ans
|
||||
Loading…
Add table
Add a link
Reference in a new issue