Sha256: fb66522626e5016f226d3741264ed4a3f28100b6c8f25f5d3e23f98426c485d9

Contents?: true

Size: 509 Bytes

Versions: 44

Compression:

Stored size: 509 Bytes

Contents

open Base

let every_second_digit_doubled =
  let double_digit n = let d = n * 2 in if d >= 10 then d - 9 else d in
  List.rev_mapi ~f:(fun i -> if i % 2 = 1 then double_digit else Fn.id)

let valid s =
  let s = String.filter s ~f:(fun ch -> Char.(ch <> ' ')) in
  if String.length s > 1
  then
    let checksum = String.to_list s
    |> List.rev_map ~f:(fun ch -> Char.to_int ch - Char.to_int '0')
    |> every_second_digit_doubled
    |> List.sum (module Int) ~f:Fn.id in
    checksum % 10 = 0
  else false

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
trackler-2.2.1.135 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.134 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.133 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.132 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.131 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.130 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.129 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.128 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.127 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.126 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.125 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.124 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.123 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.122 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.121 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.120 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.119 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.118 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.117 tracks/ocaml/exercises/luhn/example.ml
trackler-2.2.1.116 tracks/ocaml/exercises/luhn/example.ml