let rulesText = """ 00*1 ADD 01*1 SUB 10*1 MUL """ type conv = System.Convert let mask (s : string) = conv.ToInt32 (s.Replace('1', '0').Replace('*', '1'), 2) |> (~~~) let bits (s : string) = conv.ToInt32 (s.Replace('*', '0'), 2) let ops (rules : string) = let result = Array.create 16 "-" for e in rulesText.Trim().Split('\n') do let xy = e.Split() let m, b, x = mask xy.[0], bits xy.[0], xy.[1] for i in 0..result.Length-1 do if i &&& m = b then result.[i] <- x result do ops rulesText |> Array.iteri (fun i e -> printfn "%s %s" (conv.ToString(i, 2).PadLeft(4, '0')) e)