You are strongly encouraged to write your own sample programs, however here are a few to get you started.
The basis of the Iota Standard Library contains certain useful operations that cannot be expressed in Iota itself. Here we provide the interfaces files for those functions. An actual implementation of the stanrard library will be made available later.
/* scheduling: find the smallest time that all the jobs can be completed using 2 identical machines */
uses io.printi
schedule(a: array[int], sum:int) : int = (
opt: int = sum/2;
if (opt * 2 < sum) opt = opt + 1;
while (opt < (sum + 1)) (
if (subset_sum(a, opt, 0)) return opt;
opt = opt + 1
);
-1
)
subset_sum(a: array[int], sum: int, index:int) : bool = (
nextInd: int = index + 1;
if (sum == 0)
return true;
if (sum < 0)
return false;
if (index == length(a))
return false;
subset_sum(a, sum-a[index], nextInd) | subset_sum(a, sum, nextInd)
)
sums(a:array[int]) : int = (
count:int = 0;
sum:int = 0;
while (count < length(a)) (
sum = sum + a[count];
count = count + 1
);
sum
)
main(args:array[string]): int = (
a: array[int] = new int[17](0);
count: int = 0;
value: int = 10;
//initialize the jobs
while (count < 17) (
a[count] = value;
value = value + 10;
count = count + 1
);
sum: int = sums(a);
//least total amt of time needed to complete all jobs
d: int = schedule(a, sum);
printi(d);
0
)
Back to top
// given a set of coins(with an infinite supply of each type of coins)
// and an amount, check if there is an exact change
uses io.print, io.printi, io.readln, conv.stoi
change(amount: int, coins: array[int],
a: array[int], flag: bool, pos: int): bool = (
times: int;
count: int = 0;
nextpos: int = pos + 1;
if (amount == 0)
return true;
if (amount < 0) (
return false
);
if (amount > 0 & pos == length(a)) (
return false;
);
times = amount / coins[pos];
while (count < times + 1) (
flag = change(amount-count*coins[pos],coins,a,flag, nextpos);
if (flag) (
a[pos] = count;
return flag
);
count = count + 1
);
false
)
main(args:array[string]): int = (
Ncoins: int = 5;
coins: array[int] = new int[Ncoins](0);
//one entry for each different kind of coin that could be used
coins[0] = 5; coins[1] = 7; coins[2] = 10;
coins[3] = 20; coins[4] = 30;
flag: bool = true;
pos: int = 0;
//output array
a: array[int] = new int[Ncoins](0);
print("How much do you want change for? ");
amount:int = stoi(readln(),0);
flag = change(amount, coins, a, flag, pos);
if (flag) (
print("Here is the change!\N");
i:int = 0;
while (i < length a) (
printi(a[i]); print(" * ");
printi(coins[i]); print("\N");
i = i + 1
)
); else
print("no change!");
0;
)
Back to top
/* a program to solve the N-queens problem */
uses io.print
printboard(col: array[int], N: int) = (
i: int = 0;
j: int = 0;
while (i < N) (
j = 0;
while (j < N) (
print((if (col[i] == j) " 0" else " ."));
j = j + 1;
);
print("\N");
i = i + 1;
);
print("\N");
)
try(c:int, row:array[int], col:array[int],
diag1:array[int], diag2:array[int]) =
(
N: int = length col;
r: int = 0;
if (c == N) (
printboard(col, N);
) else (
while (r < N) (
if (row[r] == 0 &
diag1[r+c]== 0 &
diag2[r+(N-1)-c]== 0) (
row[r] = 1;
diag1[r+c] = 1;
diag2[r+(N-1)-c] = 1;
col[c] = r;
try(c+1, row, col, diag1, diag2);
row[r] = 0;
diag1[r+c] = 0;
diag2[r+(N-1)-c] = 0;
);
r = r + 1;
)
)
)
main(args: array[string]) = (
N: int = 4;
row: array[int] = new int[N](0);
col: array[int] = new int[N](0);
diag1: array[int] = new int[N+N-1](0);
diag2: array[int] = new int[N+N-1](0);
try(0, row, col, diag1, diag2);
)
Back to top
This program consists of three files, the interface and implementation for a merge sort, and a test program that uses that module.
/* A Merge-sort implementation */ merge(A: array[int]) : array[int]
/*
* merge takes an unsorted array A and sorts it by recursively
* dividing the array into 3 arrays.
*/
merge(A: array[int]) : array[int] = (
len: int = length A;
if (len < 2) return A;
l: int = len/3;
if (l * 3 < len) l = l + 1;
r: int = len - 2 * l;
// construct the 3 arrays
a: array[int] = new int[l](0);
b: array[int] = new int[l](0);
c: array[int] = new int[r](0);
count: int = 0;
while (count < l) (
a[count] = A[count];
count = count + 1
);
count = 0;
while (count < l) (
b[count] = A[count+l];
count = count + 1;
);
count = 0;
while (count < r) (
c[count] = A[count+2*l];
count = count + 1
);
mergeThree(a,b,c);
)
mergeThree(a:array[int], b: array[int], c:array[int]) : array[int] = (
d: array[int] = new int[length a + length b + length c](0);
ap: int = 0;
bp: int = 0;
cp: int = 0;
dp: int = 0;
while ((ap < length(a) & bp < length(b))
& cp < length(c)) (
s: int = smallest(a[ap], b[bp], c[cp]);
if (a[ap] == s) (
d[dp]=a[ap];
dp = dp + 1;
ap = ap + 1
); else (
if (b[bp] == s) (
d[dp] = b[bp];
dp = dp + 1;
bp = bp + 1
) else (
d[dp] = c[cp];
dp = dp + 1;
cp = cp + 1;
)
)
);
while ((ap < length(a)) & (bp < length(b))) (
if (a[ap] < b[bp]) (
d[dp] = a[ap];
dp = dp + 1;
ap = ap + 1
) else (
d[dp] = b[bp];
dp = dp + 1;
bp = bp + 1
);
);
while ((bp < length(b)) & (cp < length(c))) (
if (b[bp] < c[cp]) (
d[dp] = b[bp];
dp = dp + 1;
bp = bp + 1
) else (
d[dp] = c[cp];
dp = dp + 1;
cp = cp + 1;
)
);
while ((ap < length(a)) & (cp < length(c))) (
if (a[ap] < c[cp]) (
d[dp] = a[ap];
dp = dp + 1;
ap = ap + 1
); else (
d[dp] = c[cp];
dp = dp + 1;
cp = cp + 1;
)
);
// 2 of the following 3 loops will fall through
while (ap < length a) (
d[dp] = a[ap];
dp = dp + 1;
ap = ap + 1
);
while (bp < length b) (
d[dp] = b[bp];
dp = dp + 1;
bp = bp + 1;
);
while (cp < length c) (
d[dp] = c[cp];
dp = dp + 1;
cp = cp + 1;
);
return d;
)
smallest (a:int, b:int, c:int) : int = (
if (b < a)
if (c < b) c
else b
else
if (c < a) c
else a
)
uses io.print, io.printi, merge.merge
main(args:array[int]): int = (
c: array[int] = new int[24](0);
count: int = 10;
index: int = 0;
while (index < 8) (
c[index] = count;
count = count + 10;
index = index + 1;
);
count = 25;
index = 8;
while (index < 16) (
c[index] = count;
count = count + 5;
index = index + 1
);
c[16] = 11; c[17] = 38; c[18] = 41; c[19] = 44;
c[20] = 59; c[21] = 68; c[22] = 75; c[23] = 81;
d: array[int] = merge(c);
count = 0;
while (count < length(d)) (
print("d[");
printi(count);
print("] = ");
printi(d[count]);
print("\N");
count = count + 1;
);
0
)
Back to top