Sha256: 9c4e796f114c24069845c7584bd7df4f6a94d87e1c84fb91eb4614dc95c1328d

Contents?: true

Size: 1.51 KB

Versions: 59

Compression:

Stored size: 1.51 KB

Contents

module Isogram exposing (isIsogram)

import String
import List
import Char


isAlpha : Char -> Bool
isAlpha char =
    Char.isUpper char || Char.isLower char


isIsogram : String -> Bool
isIsogram sentence =
    let
        sanitized =
            String.filter isAlpha sentence
                |> String.toLower
                |> String.toList
                |> List.sort
                |> group
    in
        List.all (\x -> List.length x == 1) sanitized



-- Adapted from https://github.com/elm-community/list-extra


group : List a -> List (List a)
group list =
    case list of
        [] ->
            []

        x :: xs ->
            let
                ( ys, zs ) =
                    span ((==) x) xs
            in
                (x :: ys) :: group zs


span : (a -> Bool) -> List a -> ( List a, List a )
span p xs =
    ( takeWhile p xs, dropWhile p xs )


takeWhile : (a -> Bool) -> List a -> List a
takeWhile predicate =
    let
        takeWhileHelper acc list =
            case list of
                [] ->
                    List.reverse acc

                x :: xs ->
                    if (predicate x) then
                        takeWhileHelper (x :: acc) xs
                    else
                        List.reverse acc
    in
        takeWhileHelper []


dropWhile : (a -> Bool) -> List a -> List a
dropWhile predicate list =
    case list of
        [] ->
            []

        x :: xs ->
            if (predicate x) then
                dropWhile predicate xs
            else
                list

Version data entries

59 entries across 59 versions & 1 rubygems

Version Path
trackler-2.2.1.104 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.103 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.102 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.101 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.100 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.99 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.98 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.97 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.96 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.95 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.94 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.93 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.92 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.91 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.90 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.89 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.88 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.87 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.86 tracks/elm/exercises/isogram/Isogram.example.elm
trackler-2.2.1.85 tracks/elm/exercises/isogram/Isogram.example.elm