Sha256: 8adcdf04d758feb091a64ba6b1f636555eba458756887832b431ac5f7b4fec73

Contents?: true

Size: 625 Bytes

Versions: 396

Compression:

Stored size: 625 Bytes

Contents

let to_roman n = 
  assert (n <= 3000);

  let build ones halves tens = function
    | 0 -> ""
    | 1 -> ones
    | 2 -> ones ^ ones
    | 3 -> ones ^ ones ^ ones
    | 4 -> ones ^ halves
    | 5 -> halves
    | 6 -> halves ^ ones
    | 7 -> halves ^ ones ^ ones
    | 8 -> halves ^ ones ^ ones ^ ones
    | 9 -> ones ^ tens
    | _ -> assert false
  in
  let thousands n = build "M" "" "" (n / 1000 mod 10) in
  let hundreds n  = build "C" "D" "M" (n / 100 mod 10) in
  let tens n      = build "X" "L" "C" (n / 10 mod 10) in
  let ones n      = build "I" "V" "X" (n mod 10) in

  thousands n ^ hundreds n ^ tens n ^ ones n

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.179 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.178 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.177 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.176 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.175 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.174 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.173 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.172 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.171 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.170 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.169 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.167 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.166 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.165 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.164 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.163 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.162 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.161 tracks/ocaml/exercises/roman-numerals/example.ml
trackler-2.2.1.160 tracks/ocaml/exercises/roman-numerals/example.ml