fork(1) download
  1. let rulesText = """
  2. 00*1 ADD
  3. 01*1 SUB
  4. 10*1 MUL
  5. """
  6.  
  7. type conv = System.Convert
  8.  
  9. let mask (s : string) = conv.ToInt32 (s.Replace('1', '0').Replace('*', '1'), 2) |> (~~~)
  10.  
  11. let bits (s : string) = conv.ToInt32 (s.Replace('*', '0'), 2)
  12.  
  13. let ops (rules : string) =
  14. let result = Array.create 16 "-"
  15. for e in rulesText.Trim().Split('\n') do
  16. let xy = e.Split()
  17. let m, b, x = mask xy.[0], bits xy.[0], xy.[1]
  18. for i in 0..result.Length-1 do
  19. if i &&& m = b then result.[i] <- x
  20. result
  21.  
  22. do
  23. ops rulesText
  24. |> Array.iteri (fun i e -> printfn "%s %s" (conv.ToString(i, 2).PadLeft(4, '0')) e)
  25.  
  26.  
Success #stdin #stdout 0.08s 24392KB
stdin
Standard input is empty
stdout
0000 -
0001 ADD
0010 -
0011 ADD
0100 -
0101 SUB
0110 -
0111 SUB
1000 -
1001 MUL
1010 -
1011 MUL
1100 -
1101 -
1110 -
1111 -