Skip to content

Commit

Permalink
Add isogram
Browse files Browse the repository at this point in the history
  • Loading branch information
BNAndras committed Jun 9, 2024
1 parent 22a0301 commit d3805ce
Show file tree
Hide file tree
Showing 8 changed files with 478 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,14 @@
"prerequisites": [],
"difficulty": 1
},
{
"slug": "isogram",
"name": "Isogram",
"uuid": "3f026c25-bfe1-4dbf-b605-064b29ba63a5",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "leap",
"name": "Leap",
Expand Down
14 changes: 14 additions & 0 deletions exercises/practice/isogram/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -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.
17 changes: 17 additions & 0 deletions exercises/practice/isogram/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"authors": [
"BNAndras"
],
"files": {
"solution": [
"isogram.red"
],
"test": [
"isogram-test.red"
],
"example": [
".meta/example.red"
]
},
"blurb": "Determine if a word or phrase is an isogram."
}
23 changes: 23 additions & 0 deletions exercises/practice/isogram/.meta/example.red
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Red [
description: {"Isogram" exercise solution for exercism platform}
author: "BNAndras"
]

alphabet: "abcdefghijklmnopqrstuvwxyz"

is-isogram: function [
phrase
] [
letters: []
phrase: lowercase phrase

letters: []
foreach char phrase [
if (to-logic find alphabet char) [
append letters char
]
]

equal? length? letters length? unique letters
]

52 changes: 52 additions & 0 deletions exercises/practice/isogram/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -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"
136 changes: 136 additions & 0 deletions exercises/practice/isogram/isogram-test.red
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
Red [
description: {Tests for "Isogram" Exercism exercise}
author: "loziniak"
]

#include %testlib.red

test-init/limit %isogram.red 1
; test-init/limit %.meta/example.red 1 ; test example solution

canonical-cases: [#[
description: "empty string"
input: #[
phrase: ""
]
expected: true
function: "is-isogram"
uuid: "a0e97d2d-669e-47c7-8134-518a1e2c4555"
] #[
description: "isogram with only lower case characters"
input: #[
phrase: "isogram"
]
expected: true
function: "is-isogram"
uuid: "9a001b50-f194-4143-bc29-2af5ec1ef652"
] #[
description: "word with one duplicated character"
input: #[
phrase: "eleven"
]
expected: false
function: "is-isogram"
uuid: "8ddb0ca3-276e-4f8b-89da-d95d5bae78a4"
] #[
description: {word with one duplicated character from the end of the alphabet}
input: #[
phrase: "zzyzx"
]
expected: false
function: "is-isogram"
uuid: "6450b333-cbc2-4b24-a723-0b459b34fe18"
] #[
description: "longest reported english isogram"
input: #[
phrase: "subdermatoglyphic"
]
expected: true
function: "is-isogram"
uuid: "a15ff557-dd04-4764-99e7-02cc1a385863"
] #[
description: "word with duplicated character in mixed case"
input: #[
phrase: "Alphabet"
]
expected: false
function: "is-isogram"
uuid: "f1a7f6c7-a42f-4915-91d7-35b2ea11c92e"
] #[
description: {word with duplicated character in mixed case, lowercase first}
input: #[
phrase: "alphAbet"
]
expected: false
function: "is-isogram"
uuid: "14a4f3c1-3b47-4695-b645-53d328298942"
] #[
description: "hypothetical isogrammic word with hyphen"
input: #[
phrase: "thumbscrew-japingly"
]
expected: true
function: "is-isogram"
uuid: "423b850c-7090-4a8a-b057-97f1cadd7c42"
] #[
description: {hypothetical word with duplicated character following hyphen}
input: #[
phrase: "thumbscrew-jappingly"
]
expected: false
function: "is-isogram"
uuid: "93dbeaa0-3c5a-45c2-8b25-428b8eacd4f2"
] #[
description: "isogram with duplicated hyphen"
input: #[
phrase: "six-year-old"
]
expected: true
function: "is-isogram"
uuid: "36b30e5c-173f-49c6-a515-93a3e825553f"
] #[
description: "made-up name that is an isogram"
input: #[
phrase: "Emily Jung Schwartzkopf"
]
expected: true
function: "is-isogram"
uuid: "cdabafa0-c9f4-4c1f-b142-689c6ee17d93"
] #[
description: "duplicated character in the middle"
input: #[
phrase: "accentor"
]
expected: false
function: "is-isogram"
uuid: "5fc61048-d74e-48fd-bc34-abfc21552d4d"
] #[
description: "same first and last characters"
input: #[
phrase: "angola"
]
expected: false
function: "is-isogram"
uuid: "310ac53d-8932-47bc-bbb4-b2b94f25a83e"
] #[
description: {word with duplicated character and with two hyphens}
input: #[
phrase: "up-to-date"
]
expected: false
function: "is-isogram"
uuid: "0d0b8644-0a1e-4a31-a432-2b3ee270d847"
]]


foreach c-case canonical-cases [
case-code: reduce [
'expect c-case/expected compose [
(to word! c-case/function) (values-of c-case/input)
]
]

test c-case/description case-code
]

test-results/print
11 changes: 11 additions & 0 deletions exercises/practice/isogram/isogram.red
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Red [
description: {"Isogram" exercise solution for exercism platform}
author: "" ; you can write your name here, in quotes
]

is-isogram: function [
phrase
] [
cause-error 'user 'message "You need to implement is-isogram function."
]

Loading

0 comments on commit d3805ce

Please sign in to comment.