🎉 Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io 🎉

# MokuHazushi's solution

## to Pangram in the OCaml Track

Published at Dec 11 2019 · 0 comments
Instructions
Test suite
Solution

Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma, "every letter") is a sentence using every letter of the alphabet at least once. The best known English pangram is:

The quick brown fox jumps over the lazy dog.

The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case insensitive. Input will not contain non-ASCII symbols.

## Getting Started

1. For library documentation, follow Useful OCaml resources.

## Running Tests

A `Makefile` is provided with a default target to compile your solution and run the tests. At the command line, type:

``````make
``````

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

## Feedback, Issues, Pull Requests

The exercism/ocaml repository on GitHub is the home for all of the Ocaml exercises.

If you have feedback about an exercise, or want to help implementing a new one, head over there and create an issue or submit a PR. We welcome new contributors!

## Source

### test.ml

``````(* pangram - 1.4.1 *)
open OUnit2
open Pangram

let ae exp got _test_ctxt = assert_equal ~printer:string_of_bool exp got

let tests = [
"sentence empty" >::
ae false (is_pangram "");
"recognizes a perfect lower case pangram" >::
ae true (is_pangram "abcdefghijklmnopqrstuvwxyz");
"pangram with only lower case" >::
ae true (is_pangram "the quick brown fox jumps over the lazy dog");
"missing character 'x'" >::
ae false (is_pangram "a quick movement of the enemy will jeopardize five gunboats");
"another missing character, e.g. 'h'" >::
ae false (is_pangram "five boxing wizards jump quickly at it");
"pangram with underscores" >::
ae true (is_pangram "the_quick_brown_fox_jumps_over_the_lazy_dog");
"pangram with numbers" >::
ae true (is_pangram "the 1 quick brown fox jumps over the 2 lazy dogs");
"missing letters replaced by numbers" >::
ae false (is_pangram "7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog");
"pangram with mixed case and punctuation" >::
ae true (is_pangram "\"Five quacking Zephyrs jolt my wax bed.\"");
"upper and lower case versions of the same character should not be counted separately" >::
ae false (is_pangram "the quick brown fox jumps over with lazy FX");
]

let () =
run_test_tt_main ("pangram tests" >::: tests)``````
``````open Base

let is_pangram s =
let string_list =
List.filter (String.to_list (String.lowercase s)) ~f:Char.is_lowercase
in
let sorted_list =
List.sort string_list ~compare:Char.compare
in
let grouped_list =
List.group sorted_list ~break:(fun c1 c2 -> (Char.compare c1 c2) != 0)
in
(List.length grouped_list) == 26
;;``````