Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,14 @@
"prerequisites": [],
"difficulty": 2
},
{
"slug": "pangram",
"name": "Pangram",
"uuid": "f11e9d34-d454-42a8-bd2f-d1a8b6000975",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "raindrops",
"name": "Raindrops",
Expand Down
8 changes: 8 additions & 0 deletions exercises/practice/pangram/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Instructions

Your task is to figure out if a sentence is a pangram.

A pangram is a sentence using every letter of the alphabet at least once.
It is case insensitive, so it doesn't matter if a letter is lower-case (e.g. `k`) or upper-case (e.g. `K`).

For this exercise, a sentence is a pangram if it contains each of the 26 letters in the English alphabet.
16 changes: 16 additions & 0 deletions exercises/practice/pangram/.docs/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Introduction

You work for a company that sells fonts through their website.
They'd like to show a different sentence each time someone views a font on their website.
To give a comprehensive sense of the font, the random sentences should use **all** the letters in the English alphabet.

They're running a competition to get suggestions for sentences that they can use.
You're in charge of checking the submissions to see if they are valid.

~~~~exercism/note
Pangram comes from Greek, παν γράμμα, pan gramma, which means "every letter".

The best known English pangram is:

> The quick brown fox jumps over the lazy dog.
~~~~
19 changes: 19 additions & 0 deletions exercises/practice/pangram/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"jimmytty"
],
"files": {
"solution": [
"pangram.sql"
],
"test": [
"pangram_test.sql"
],
"example": [
".meta/example.sql"
]
},
"blurb": "Determine if a sentence is a pangram.",
"source": "Wikipedia",
"source_url": "https://en.wikipedia.org/wiki/Pangram"
}
29 changes: 29 additions & 0 deletions exercises/practice/pangram/.meta/example.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
UPDATE pangram
SET result = (
INSTR(LOWER(sentence), 'a') > 0
AND INSTR(LOWER(sentence), 'b') > 0
AND INSTR(LOWER(sentence), 'c') > 0
AND INSTR(LOWER(sentence), 'd') > 0
AND INSTR(LOWER(sentence), 'e') > 0
AND INSTR(LOWER(sentence), 'f') > 0
AND INSTR(LOWER(sentence), 'g') > 0
AND INSTR(LOWER(sentence), 'h') > 0
AND INSTR(LOWER(sentence), 'i') > 0
AND INSTR(LOWER(sentence), 'j') > 0
AND INSTR(LOWER(sentence), 'k') > 0
AND INSTR(LOWER(sentence), 'l') > 0
AND INSTR(LOWER(sentence), 'm') > 0
AND INSTR(LOWER(sentence), 'n') > 0
AND INSTR(LOWER(sentence), 'o') > 0
AND INSTR(LOWER(sentence), 'p') > 0
AND INSTR(LOWER(sentence), 'q') > 0
AND INSTR(LOWER(sentence), 'r') > 0
AND INSTR(LOWER(sentence), 's') > 0
AND INSTR(LOWER(sentence), 't') > 0
AND INSTR(LOWER(sentence), 'u') > 0
AND INSTR(LOWER(sentence), 'v') > 0
AND INSTR(LOWER(sentence), 'w') > 0
AND INSTR(LOWER(sentence), 'x') > 0
AND INSTR(LOWER(sentence), 'y') > 0
AND INSTR(LOWER(sentence), 'z') > 0
);
45 changes: 45 additions & 0 deletions exercises/practice/pangram/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# 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.

[64f61791-508e-4f5c-83ab-05de042b0149]
description = "empty sentence"

[74858f80-4a4d-478b-8a5e-c6477e4e4e84]
description = "perfect lower case"

[61288860-35ca-4abe-ba08-f5df76ecbdcd]
description = "only lower case"

[6564267d-8ac5-4d29-baf2-e7d2e304a743]
description = "missing the letter 'x'"

[c79af1be-d715-4cdb-a5f2-b2fa3e7e0de0]
description = "missing the letter 'h'"

[d835ec38-bc8f-48e4-9e36-eb232427b1df]
description = "with underscores"

[8cc1e080-a178-4494-b4b3-06982c9be2a8]
description = "with numbers"

[bed96b1c-ff95-45b8-9731-fdbdcb6ede9a]
description = "missing letters replaced by numbers"

[938bd5d8-ade5-40e2-a2d9-55a338a01030]
description = "mixed case and punctuation"

[2577bf54-83c8-402d-a64b-a2c0f7bb213a]
description = "case insensitive"
include = false

[7138e389-83e4-4c6e-8413-1e40a0076951]
description = "a-m and A-M are 26 different characters but not a pangram"
reimplements = "2577bf54-83c8-402d-a64b-a2c0f7bb213a"
10 changes: 10 additions & 0 deletions exercises/practice/pangram/create_fixture.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
DROP TABLE IF EXISTS pangram;
CREATE TABLE pangram (
sentence TEXT NOT NULL,
result BOOLEAN
);

.mode csv
.import ./data.csv pangram

UPDATE pangram SET result = NULL;
28 changes: 28 additions & 0 deletions exercises/practice/pangram/create_test_table.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
DROP TABLE IF EXISTS tests;
CREATE TABLE IF NOT EXISTS tests (
-- uuid and description are taken from the test.toml file
uuid TEXT PRIMARY KEY,
description TEXT NOT NULL,
-- The following section is needed by the online test-runner
status TEXT DEFAULT 'fail',
message TEXT,
output TEXT,
test_code TEXT,
task_id INTEGER DEFAULT NULL,
-- Here are columns for the actual tests
sentence TEXT NOT NULL,
expected BOOLEAN NOT NULL
);

INSERT INTO tests (uuid, description, sentence, expected)
VALUES
('64f61791-508e-4f5c-83ab-05de042b0149','empty sentence','',false),
('74858f80-4a4d-478b-8a5e-c6477e4e4e84','perfect lower case','abcdefghijklmnopqrstuvwxyz',true),
('61288860-35ca-4abe-ba08-f5df76ecbdcd','only lower case','the quick brown fox jumps over the lazy dog',true),
('6564267d-8ac5-4d29-baf2-e7d2e304a743','missing the letter ''x''','a quick movement of the enemy will jeopardize five gunboats',false),
('c79af1be-d715-4cdb-a5f2-b2fa3e7e0de0','missing the letter ''h''','five boxing wizards jump quickly at it',false),
('d835ec38-bc8f-48e4-9e36-eb232427b1df','with underscores','the_quick_brown_fox_jumps_over_the_lazy_dog',true),
('8cc1e080-a178-4494-b4b3-06982c9be2a8','with numbers','the 1 quick brown fox jumps over the 2 lazy dogs',true),
('bed96b1c-ff95-45b8-9731-fdbdcb6ede9a','missing letters replaced by numbers','7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog',false),
('938bd5d8-ade5-40e2-a2d9-55a338a01030','mixed case and punctuation','"Five quacking Zephyrs jolt my wax bed."',true),
('7138e389-83e4-4c6e-8413-1e40a0076951','a-m and A-M are 26 different characters but not a pangram','abcdefghijklm ABCDEFGHIJKLM',false);
11 changes: 11 additions & 0 deletions exercises/practice/pangram/data.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"",""
"abcdefghijklmnopqrstuvwxyz",""
"the quick brown fox jumps over the lazy dog",""
"a quick movement of the enemy will jeopardize five gunboats",""
"five boxing wizards jump quickly at it",""
"the_quick_brown_fox_jumps_over_the_lazy_dog",""
"the 1 quick brown fox jumps over the 2 lazy dogs",""
"7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog",""
"""Five quacking Zephyrs jolt my wax bed.""",""
"the quick brown fox jumps over with lazy FX",""
"abcdefghijklm ABCDEFGHIJKLM",""
2 changes: 2 additions & 0 deletions exercises/practice/pangram/pangram.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- Schema: CREATE TABLE pangram (sentence TEXT NOT NULL, result BOOLEAN);
-- Task: update pangram table and set result based on sentence.
40 changes: 40 additions & 0 deletions exercises/practice/pangram/pangram_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
-- Create database:
.read ./create_fixture.sql

-- Read user student solution and save any output as markdown in user_output.md:
.mode markdown
.output user_output.md
.read ./pangram.sql
.output

-- Create a clean testing environment:
.read ./create_test_table.sql

-- Comparison of user input and the tests updates the status for each test:
UPDATE tests
SET status = 'pass'
FROM (SELECT sentence, result FROM pangram) AS actual
WHERE (actual.sentence, actual.result) = (tests.sentence, tests.expected);

-- Update message for failed tests to give helpful information:
UPDATE tests
SET message = (
'Result for "'
|| actual.sentence
|| '"'
|| ' is <' || COALESCE(actual.result, 'NULL')
|| '> but should be <' || tests.expected || '>'
)
FROM (SELECT sentence, result FROM pangram) AS actual
WHERE actual.sentence = tests.sentence AND tests.status = 'fail';

-- Save results to ./output.json (needed by the online test-runner)
.mode json
.once './output.json'
SELECT description, status, message, output, test_code, task_id
FROM tests;

-- Display test results in readable form for the student:
.mode table
SELECT description, status, message
FROM tests;