Sha256: be5be5bcbff1724bac5dd7d0b17bfc531251c708effaca06fc6a954fc42527c5

Contents?: true

Size: 1.21 KB

Versions: 377

Compression:

Stored size: 1.21 KB

Contents

(ns pig-latin
  (:require [clojure.string :as str]))

(defn- starts-with-any [prefixes word]
  (some (partial str/starts-with? word) prefixes))

(defn- starts-with-vowel-like? [word]
  (starts-with-any #{"yt" "xr"} word))

(defn- starts-with-vowel? [word]
  (starts-with-any #{"a" "e" "i" "o" "u"} word))

(defn- starts-with-two-letter-prefix? [word]
  (starts-with-any #{"ch" "qu" "th"} word))

(defn- starts-with-three-letter-prefix? [word]
  (starts-with-any #{"thr" "sch"} word))

(defn- starts-with-qu-and-preceeding-constanant? [word]
  (and (not (starts-with-vowel? word))
       (str/starts-with? (subs word 1) "qu")))

(defn- rotate [word n]
  (str (subs word n) (subs word 0 n)))

(defn- append-ay [word]
  (str word "ay"))

(defn- translate-word [word]
  (cond
    (or (starts-with-vowel? word)
        (starts-with-vowel-like? word))
    (append-ay word)

    (or
     (starts-with-three-letter-prefix? word)
     (starts-with-qu-and-preceeding-constanant? word))
    (append-ay (rotate word 3))

    (starts-with-two-letter-prefix? word)
    (append-ay (rotate word 2))

    :else
    (append-ay (rotate word 1))))

(defn translate [words]
  (->> (str/split words #" ")
       (map translate-word)
       (str/join " ")))

Version data entries

377 entries across 377 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.179 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.178 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.177 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.176 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.175 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.174 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.173 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.172 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.171 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.170 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.169 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.167 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.166 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.165 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.164 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.163 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.162 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.161 tracks/clojure/exercises/pig-latin/src/example.clj
trackler-2.2.1.160 tracks/clojure/exercises/pig-latin/src/example.clj