blob: 1393991974d9b1bba55a04b8c43b1d31dddb6e43 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
module Fractran.Interpreter (
fractran
) where
import Fractran.Parser
fractran :: FractranProgram -> [Int]
fractran program =
let prog = map (\(x,y) -> (fromIntegral x, fromIntegral y)) (fractions program)
f = (\p v -> if (p == [])
then []
else let (curX, curY) = head p
newV = v * curX / curY
in if (isInt newV)
then newV : (f prog newV)
else f (tail p) v)
result = map round (f prog (fromIntegral (initialValue program)))
in (initialValue program) : result
isInt :: (RealFrac a) => a -> Bool
isInt x =
x == fromInteger (round x)
|