Advertisement
Guest User

Untitled

a guest
Nov 11th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.01 KB | None | 0 0
  1. open System.Text.RegularExpressions
  2.  
  3. let getOp = function
  4.     | '+' -> (+)
  5.     | '-' -> (-)
  6.     | '/' -> (/)
  7.     | 'X'
  8.     | 'x'
  9.     | '*' -> (*)
  10.     | _ as op -> failwith (sprintf "Invalid operation: %c" op)
  11.  
  12. let fragmentPattern = @"(\d+)\s+(\d+)\s+([+-/*xX])"
  13.  
  14. let (|Regex|_|) pattern equasion =
  15.     let matches = Regex.Match(equasion, pattern)
  16.     if matches.Success then Some(List.tail [ for g in matches.Groups -> g.Value ])
  17.     else None
  18.  
  19. [<EntryPoint>]
  20. let main argv =
  21.     let equasion = argv |> Array.toSeq |> String.concat " "
  22.  
  23.     let rec solve equasion =
  24.         match equasion with
  25.         | Regex fragmentPattern [num1; num2; op] ->
  26.             let result = (getOp (char op)) (int num1) (int num2)
  27.             let newEquasion = Regex.Replace(equasion, fragmentPattern, sprintf "%i" result)
  28.             solve newEquasion
  29.         | Regex @"^(\d+)$" [number] ->
  30.             printfn "%s" number
  31.         | _ -> printfn "Error"
  32.  
  33.  
  34.     solve equasion
  35.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement