RosettaCodeData/Task/Fractran/EasyLang/fractran.easy

39 lines
787 B
Plaintext

func[] fractran prog$ val limit .
for s$ in strsplit prog$ " " : n[][] &= number strsplit s$ "/"
for n to limit
r[] &= val
for i to len n[][]
if val mod n[i][2] = 0 : break 1
.
if i > len n[][] : break 1
val = val / n[i][2] * n[i][1]
.
return r[]
.
p$ = "17/91 78/85 19/51 23/38 29/33 77/29 95/23 77/19 1/17 11/13 13/11 15/14 15/2 55/1"
print fractran p$ 2 15
#
proc sort &d[] .
for i = 1 to len d[] - 1
for j = i + 1 to len d[]
if d[j] < d[i] : swap d[j] d[i]
.
.
.
r[] = fractran p$ 2 1000
sort r[]
i = 1
prim = 2
po = 4
repeat
repeat
if i > len r[] : break 2
until i > len r[] or r[i] >= po
i += 1
.
until i > len r[]
if r[i] = po : write prim & " "
prim += 1
po *= 2
.