From de523ed02876cda0ae6259400e536c7dd13fa3ad Mon Sep 17 00:00:00 2001 From: J R M Date: Mon, 12 Jan 2026 18:44:58 +0100 Subject: [PATCH 1/2] isogram --- config.json | 8 +++ .../practice/isogram/.docs/instructions.md | 14 +++++ exercises/practice/isogram/.meta/config.json | 19 +++++++ exercises/practice/isogram/.meta/example.nu | 7 +++ exercises/practice/isogram/.meta/tests.toml | 52 +++++++++++++++++++ exercises/practice/isogram/isogram.nu | 3 ++ exercises/practice/isogram/tests.nu | 16 ++++++ 7 files changed, 119 insertions(+) create mode 100644 exercises/practice/isogram/.docs/instructions.md create mode 100644 exercises/practice/isogram/.meta/config.json create mode 100644 exercises/practice/isogram/.meta/example.nu create mode 100644 exercises/practice/isogram/.meta/tests.toml create mode 100644 exercises/practice/isogram/isogram.nu create mode 100644 exercises/practice/isogram/tests.nu diff --git a/config.json b/config.json index 478becc..c9e2fbe 100644 --- a/config.json +++ b/config.json @@ -101,6 +101,14 @@ "practices": [], "prerequisites": [], "difficulty": 4 + }, + { + "slug": "isogram", + "name": "Isogram", + "uuid": "cae3e1d4-d352-4a7a-8b5f-dc43712bad98", + "practices": [], + "prerequisites": [], + "difficulty": 2 } ] }, diff --git a/exercises/practice/isogram/.docs/instructions.md b/exercises/practice/isogram/.docs/instructions.md new file mode 100644 index 0000000..2e8df85 --- /dev/null +++ b/exercises/practice/isogram/.docs/instructions.md @@ -0,0 +1,14 @@ +# Instructions + +Determine if a word or phrase is an isogram. + +An isogram (also known as a "non-pattern word") is a word or phrase without a repeating letter, however spaces and hyphens are allowed to appear multiple times. + +Examples of isograms: + +- lumberjacks +- background +- downstream +- six-year-old + +The word _isograms_, however, is not an isogram, because the s repeats. diff --git a/exercises/practice/isogram/.meta/config.json b/exercises/practice/isogram/.meta/config.json new file mode 100644 index 0000000..af6b9ae --- /dev/null +++ b/exercises/practice/isogram/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "quintuple-mallard" + ], + "files": { + "solution": [ + "isogram.nu" + ], + "test": [ + "tests.nu" + ], + "example": [ + ".meta/example.nu" + ] + }, + "blurb": "Determine if a word or phrase is an isogram.", + "source": "Wikipedia", + "source_url": "https://en.wikipedia.org/wiki/Isogram" +} diff --git a/exercises/practice/isogram/.meta/example.nu b/exercises/practice/isogram/.meta/example.nu new file mode 100644 index 0000000..9693f41 --- /dev/null +++ b/exercises/practice/isogram/.meta/example.nu @@ -0,0 +1,7 @@ +def clean [phrase: string] { + $phrase | str downcase | split chars | where $it in 'abcdefghijklmnopqrstuvwxyz' +} +export def is_isogram [phrase: string] { + let phrase = clean $phrase + ($phrase | uniq ) == $phrase +} diff --git a/exercises/practice/isogram/.meta/tests.toml b/exercises/practice/isogram/.meta/tests.toml new file mode 100644 index 0000000..ba04c66 --- /dev/null +++ b/exercises/practice/isogram/.meta/tests.toml @@ -0,0 +1,52 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[a0e97d2d-669e-47c7-8134-518a1e2c4555] +description = "empty string" + +[9a001b50-f194-4143-bc29-2af5ec1ef652] +description = "isogram with only lower case characters" + +[8ddb0ca3-276e-4f8b-89da-d95d5bae78a4] +description = "word with one duplicated character" + +[6450b333-cbc2-4b24-a723-0b459b34fe18] +description = "word with one duplicated character from the end of the alphabet" + +[a15ff557-dd04-4764-99e7-02cc1a385863] +description = "longest reported english isogram" + +[f1a7f6c7-a42f-4915-91d7-35b2ea11c92e] +description = "word with duplicated character in mixed case" + +[14a4f3c1-3b47-4695-b645-53d328298942] +description = "word with duplicated character in mixed case, lowercase first" + +[423b850c-7090-4a8a-b057-97f1cadd7c42] +description = "hypothetical isogrammic word with hyphen" + +[93dbeaa0-3c5a-45c2-8b25-428b8eacd4f2] +description = "hypothetical word with duplicated character following hyphen" + +[36b30e5c-173f-49c6-a515-93a3e825553f] +description = "isogram with duplicated hyphen" + +[cdabafa0-c9f4-4c1f-b142-689c6ee17d93] +description = "made-up name that is an isogram" + +[5fc61048-d74e-48fd-bc34-abfc21552d4d] +description = "duplicated character in the middle" + +[310ac53d-8932-47bc-bbb4-b2b94f25a83e] +description = "same first and last characters" + +[0d0b8644-0a1e-4a31-a432-2b3ee270d847] +description = "word with duplicated character and with two hyphens" diff --git a/exercises/practice/isogram/isogram.nu b/exercises/practice/isogram/isogram.nu new file mode 100644 index 0000000..2912f58 --- /dev/null +++ b/exercises/practice/isogram/isogram.nu @@ -0,0 +1,3 @@ +export def is_isogram [phrase: string] { + error make {msg: "Please implement is_isogram"} +} diff --git a/exercises/practice/isogram/tests.nu b/exercises/practice/isogram/tests.nu new file mode 100644 index 0000000..518a40e --- /dev/null +++ b/exercises/practice/isogram/tests.nu @@ -0,0 +1,16 @@ +use isogram.nu is_isogram +use std/assert +assert equal (is_isogram "") true +assert equal (is_isogram "isogram") true +assert equal (is_isogram "eleven") false +assert equal (is_isogram "zzyzx") false +assert equal (is_isogram "subdermatoglyphic") true +assert equal (is_isogram "Alphabet") false +assert equal (is_isogram "alphAbet") false +assert equal (is_isogram "thumbscrew-japingly") true +assert equal (is_isogram "thumbscrew-jappingly") false +assert equal (is_isogram "six-year-old") true +assert equal (is_isogram "Emily Jung Schwartzkopf") true +assert equal (is_isogram "accentor") false +assert equal (is_isogram "angola") false +assert equal (is_isogram "up-to-date") false From bdbfa0920793bd3d7ece179e653e2489e1b215af Mon Sep 17 00:00:00 2001 From: J R M Date: Mon, 12 Jan 2026 18:50:16 +0100 Subject: [PATCH 2/2] small formatting tweaks --- exercises/practice/isogram/.meta/example.nu | 2 +- exercises/practice/isogram/tests.nu | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/practice/isogram/.meta/example.nu b/exercises/practice/isogram/.meta/example.nu index 9693f41..552d7cc 100644 --- a/exercises/practice/isogram/.meta/example.nu +++ b/exercises/practice/isogram/.meta/example.nu @@ -3,5 +3,5 @@ def clean [phrase: string] { } export def is_isogram [phrase: string] { let phrase = clean $phrase - ($phrase | uniq ) == $phrase + ($phrase | uniq) == $phrase } diff --git a/exercises/practice/isogram/tests.nu b/exercises/practice/isogram/tests.nu index 518a40e..6064547 100644 --- a/exercises/practice/isogram/tests.nu +++ b/exercises/practice/isogram/tests.nu @@ -1,5 +1,6 @@ use isogram.nu is_isogram use std/assert + assert equal (is_isogram "") true assert equal (is_isogram "isogram") true assert equal (is_isogram "eleven") false