From 3388bb6127deaf8e7b14af087a771cbcda1e54d8 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 11:37:16 -0300 Subject: [PATCH 01/26] * add practice exercise: word-search --- config.json | 8 + .../word-search/.docs/instructions.md | 24 ++ .../practice/word-search/.meta/config.json | 17 ++ .../practice/word-search/.meta/example.sql | 216 ++++++++++++++++++ .../practice/word-search/.meta/tests.toml | 82 +++++++ .../practice/word-search/create_fixture.sql | 10 + .../word-search/create_test_table.sql | 42 ++++ exercises/practice/word-search/data.csv | 24 ++ .../practice/word-search/word-search.sql | 7 + .../practice/word-search/word-search_test.sql | 62 +++++ 10 files changed, 492 insertions(+) create mode 100644 exercises/practice/word-search/.docs/instructions.md create mode 100644 exercises/practice/word-search/.meta/config.json create mode 100644 exercises/practice/word-search/.meta/example.sql create mode 100644 exercises/practice/word-search/.meta/tests.toml create mode 100644 exercises/practice/word-search/create_fixture.sql create mode 100644 exercises/practice/word-search/create_test_table.sql create mode 100644 exercises/practice/word-search/data.csv create mode 100644 exercises/practice/word-search/word-search.sql create mode 100644 exercises/practice/word-search/word-search_test.sql diff --git a/config.json b/config.json index de03fee8..f2c1f829 100644 --- a/config.json +++ b/config.json @@ -626,6 +626,14 @@ "prerequisites": [], "difficulty": 8 }, + { + "slug": "word-search", + "name": "Word Search", + "uuid": "3d82c7c8-0988-438b-b9db-345c9eb61250", + "practices": [], + "prerequisites": [], + "difficulty": 8 + }, { "slug": "wordy", "name": "Wordy", diff --git a/exercises/practice/word-search/.docs/instructions.md b/exercises/practice/word-search/.docs/instructions.md new file mode 100644 index 00000000..e2d08aa9 --- /dev/null +++ b/exercises/practice/word-search/.docs/instructions.md @@ -0,0 +1,24 @@ +# Instructions + +In word search puzzles you get a square of letters and have to find specific words in them. + +For example: + +```text +jefblpepre +camdcimgtc +oivokprjsm +pbwasqroua +rixilelhrs +wolcqlirpc +screeaumgr +alxhpburyi +jalaycalmp +clojurermt +``` + +There are several programming languages hidden in the above square. + +Words can be hidden in all kinds of directions: left-to-right, right-to-left, vertical and diagonal. + +Given a puzzle and a list of words return the location of the first and last letter of each word. diff --git a/exercises/practice/word-search/.meta/config.json b/exercises/practice/word-search/.meta/config.json new file mode 100644 index 00000000..3c370b3c --- /dev/null +++ b/exercises/practice/word-search/.meta/config.json @@ -0,0 +1,17 @@ +{ + "authors": [ + "jimmytty" + ], + "files": { + "solution": [ + "word-search.sql" + ], + "test": [ + "word-search_test.sql" + ], + "example": [ + ".meta/example.sql" + ] + }, + "blurb": "Create a program to solve a word search puzzle." +} diff --git a/exercises/practice/word-search/.meta/example.sql b/exercises/practice/word-search/.meta/example.sql new file mode 100644 index 00000000..dbb39687 --- /dev/null +++ b/exercises/practice/word-search/.meta/example.sql @@ -0,0 +1,216 @@ +DROP TABLE IF EXISTS letters; +CREATE TEMPORARY TABLE letters ( + grid TEXT NOT NULL, + chr TEXT NOT NULL, + row INTEGER NOT NULL, + col INTEGER NOT NULL +); +WITH + to_lines AS ( + SELECT grid, + j.value AS line, + LENGTH(j.value) AS len, + j.key AS row + FROM (SELECT DISTINCT JSON_EXTRACT(input, '$.grid') AS grid + FROM "word-SEARCH"), + JSON_EACH(grid) j + ), + to_chars AS ( + SELECT grid, SUBSTR(line, g.value, 1) AS chr, row, g.value - 1 col + FROM to_lines, GENERATE_SERIES(1, to_lines.len) g + ) +INSERT INTO letters + (grid, chr, row, col) +SELECT grid, chr, row, col + FROM to_chars +; + +DROP TABLE IF EXISTS strings; +CREATE TEMPORARY TABLE strings ( + grid TEXT NOT NULL, + string TEXT NOT NULL, + array TEXT NOT NULL +); +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY row ASC, col ASC + ) + GROUP BY grid, row +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY row DESC, col DESC + ) + GROUP BY grid, row +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY col ASC, row ASC + ) + GROUP BY grid, col +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY col DESC, row DESC + ) + GROUP BY grid, col +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; + +WITH + bounds (grid, mrow, mcol) AS ( + SELECT grid, MAX(row), MAX(col) + FROM letters + GROUP BY grid + ), + starts AS ( + SELECT grid, + gr.value row, + gc.value col + FROM bounds, GENERATE_SERIES(0, mrow) gr, GENERATE_SERIES(0, mcol) gc + ), + r2l_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + JSON_ARRAY(row + g.value, col + g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col + g.value <= mcol + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + l2r_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + g.VALUE, + JSON_ARRAY(row + g.value, col - g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.VALUE <= mrow + AND col - g.VALUE >= 0 + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + chrs AS ( + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + r2l_coords.coords + FROM letters, r2l_coords + WHERE letters.grid = r2l_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + UNION ALL + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + l2r_coords.coords + FROM letters, l2r_coords + WHERE letters.grid = l2r_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + ) + INSERT INTO strings (grid, string, array) +SELECT * + FROM ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) + GROUP BY grid, coords + ) + UNION ALL +SELECT * + FROM ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) + GROUP BY grid, coords + ) +; + +WITH + find AS ( + SELECT input, + j.value AS word, + (SELECT + JSON_EXTRACT( + array, + PRINTF('$[%d][1]', INSTR(string, j.value) - 1), + PRINTF('$[%d][1]', INSTR(string, j.VALUE) + + LENGTH(j.value) - 2 + ) + ) + FROM strings + WHERE JSON_EXTRACT(input, '$.grid') = grid + AND INSTR(string, j.value) + ) AS bounds + FROM "word-search", + JSON_EACH(JSON_EXTRACT(input, '$.wordsToSearchFor')) j + ), + results AS ( + SELECT input, + JSON_GROUP_OBJECT(word, JSON(object)) result + FROM ( + SELECT + input, + word, + IIF( + bounds ISNULL, + bounds, + JSON_OBJECT( + 'start', + JSON_OBJECT( + 'column', JSON_EXTRACT(bounds, '$[0][1]') + 1, + 'row', JSON_EXTRACT(bounds, '$[0][0]') + 1 + ), + 'end', + JSON_OBJECT( + 'column', JSON_EXTRACT(bounds, '$[1][1]') + 1, + 'row', JSON_EXTRACT(bounds, '$[1][0]') + 1 + ) + ) + ) object + FROM find + ORDER BY input, word + ) + GROUP BY input + ) +UPDATE "word-search" + SET result = results.result + FROM results + WHERE "word-search".input = results.input +; diff --git a/exercises/practice/word-search/.meta/tests.toml b/exercises/practice/word-search/.meta/tests.toml new file mode 100644 index 00000000..3f98113d --- /dev/null +++ b/exercises/practice/word-search/.meta/tests.toml @@ -0,0 +1,82 @@ +# 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. + +[b4057815-0d01-41f0-9119-6a91f54b2a0a] +description = "Should accept an initial game grid and a target search word" + +[6b22bcc5-6cbf-4674-931b-d2edbff73132] +description = "Should locate one word written left to right" + +[ff462410-434b-442d-9bc3-3360c75f34a8] +description = "Should locate the same word written left to right in a different position" + +[a02febae-6347-443e-b99c-ab0afb0b8fca] +description = "Should locate a different left to right word" + +[e42e9987-6304-4e13-8232-fa07d5280130] +description = "Should locate that different left to right word in a different position" + +[9bff3cee-49b9-4775-bdfb-d55b43a70b2f] +description = "Should locate a left to right word in two line grid" + +[851a35fb-f499-4ec1-9581-395a87903a22] +description = "Should locate a left to right word in three line grid" + +[2f3dcf84-ba7d-4b75-8b8d-a3672b32c035] +description = "Should locate a left to right word in ten line grid" + +[006d4856-f365-4e84-a18c-7d129ce9eefb] +description = "Should locate that left to right word in a different position in a ten line grid" + +[eff7ac9f-ff11-443e-9747-40850c12ab60] +description = "Should locate a different left to right word in a ten line grid" + +[dea39f86-8c67-4164-8884-13bfc48bd13b] +description = "Should locate multiple words" + +[29e6a6a5-f80c-48a6-8e68-05bbbe187a09] +description = "Should locate a single word written right to left" + +[3cf34428-b43f-48b6-b332-ea0b8836011d] +description = "Should locate multiple words written in different horizontal directions" + +[2c8cd344-a02f-464b-93b6-8bf1bd890003] +description = "Should locate words written top to bottom" + +[9ee1e43d-e59d-4c32-9a5f-6a22d4a1550f] +description = "Should locate words written bottom to top" + +[6a21a676-f59e-4238-8e88-9f81015afae9] +description = "Should locate words written top left to bottom right" + +[c9125189-1861-4b0d-a14e-ba5dab29ca7c] +description = "Should locate words written bottom right to top left" + +[b19e2149-7fc5-41ec-a8a9-9bc6c6c38c40] +description = "Should locate words written bottom left to top right" + +[69e1d994-a6d7-4e24-9b5a-db76751c2ef8] +description = "Should locate words written top right to bottom left" + +[695531db-69eb-463f-8bad-8de3bf5ef198] +description = "Should fail to locate a word that is not in the puzzle" + +[fda5b937-6774-4a52-8f89-f64ed833b175] +description = "Should fail to locate words that are not on horizontal, vertical, or diagonal lines" + +[5b6198eb-2847-4e2f-8efe-65045df16bd3] +description = "Should not concatenate different lines to find a horizontal word" + +[eba44139-a34f-4a92-98e1-bd5f259e5769] +description = "Should not wrap around horizontally to find a word" + +[cd1f0fa8-76af-4167-b105-935f78364dac] +description = "Should not wrap around vertically to find a word" diff --git a/exercises/practice/word-search/create_fixture.sql b/exercises/practice/word-search/create_fixture.sql new file mode 100644 index 00000000..40128e94 --- /dev/null +++ b/exercises/practice/word-search/create_fixture.sql @@ -0,0 +1,10 @@ +DROP TABLE IF EXISTS "word-search"; +CREATE TABLE "word-search" ( + input TEXT NOT NULL, -- json object + result TEXT -- json object +); + +.mode csv +.import ./data.csv "word-search" + +UPDATE "word-search" SET result = NULL; diff --git a/exercises/practice/word-search/create_test_table.sql b/exercises/practice/word-search/create_test_table.sql new file mode 100644 index 00000000..6860bb8c --- /dev/null +++ b/exercises/practice/word-search/create_test_table.sql @@ -0,0 +1,42 @@ +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 + input TEXT NOT NULL, -- json object + expected TEXT NOT NULL +); + +INSERT INTO tests (uuid, description, input, expected) +VALUES +('b4057815-0d01-41f0-9119-6a91f54b2a0a', 'Should accept an initial game grid and a target search word', '{"grid":["jefblpepre"],"wordsToSearchFor":["clojure"]}', '{"clojure":null}'), +('6b22bcc5-6cbf-4674-931b-d2edbff73132', 'Should locate one word written left to right', '{"grid":["clojurermt"],"wordsToSearchFor":["clojure"]}', '{"clojure":{"start":{"column":1,"row":1},"end":{"column":7,"row":1}}}'), +('ff462410-434b-442d-9bc3-3360c75f34a8', 'Should locate the same word written left to right in a different position', '{"grid":["mtclojurer"],"wordsToSearchFor":["clojure"]}', '{"clojure":{"start":{"column":3,"row":1},"end":{"column":9,"row":1}}}'), +('a02febae-6347-443e-b99c-ab0afb0b8fca', 'Should locate a different left to right word', '{"grid":["coffeelplx"],"wordsToSearchFor":["coffee"]}', '{"coffee":{"start":{"column":1,"row":1},"end":{"column":6,"row":1}}}'), +('e42e9987-6304-4e13-8232-fa07d5280130', 'Should locate that different left to right word in a different position', '{"grid":["xcoffeezlp"],"wordsToSearchFor":["coffee"]}', '{"coffee":{"start":{"column":2,"row":1},"end":{"column":7,"row":1}}}'), +('9bff3cee-49b9-4775-bdfb-d55b43a70b2f', 'Should locate a left to right word in two line grid', '{"grid":["jefblpepre","tclojurerm"],"wordsToSearchFor":["clojure"]}', '{"clojure":{"start":{"column":2,"row":2},"end":{"column":8,"row":2}}}'), +('851a35fb-f499-4ec1-9581-395a87903a22', 'Should locate a left to right word in three line grid', '{"grid":["camdcimgtc","jefblpepre","clojurermt"],"wordsToSearchFor":["clojure"]}', '{"clojure":{"start":{"column":1,"row":3},"end":{"column":7,"row":3}}}'), +('2f3dcf84-ba7d-4b75-8b8d-a3672b32c035', 'Should locate a left to right word in ten line grid', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}}}'), +('006d4856-f365-4e84-a18c-7d129ce9eefb', 'Should locate that left to right word in a different position in a ten line grid', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","clojurermt","jalaycalmp"],"wordsToSearchFor":["clojure"]}', '{"clojure":{"start":{"column":1,"row":9},"end":{"column":7,"row":9}}}'), +('eff7ac9f-ff11-443e-9747-40850c12ab60', 'Should locate a different left to right word in a ten line grid', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","fortranftw","alxhpburyi","clojurermt","jalaycalmp"],"wordsToSearchFor":["fortran"]}', '{"fortran":{"start":{"column":1,"row":7},"end":{"column":7,"row":7}}}'), +('dea39f86-8c67-4164-8884-13bfc48bd13b', 'Should locate multiple words', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","fortranftw","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["fortran","clojure"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"fortran":{"start":{"column":1,"row":7},"end":{"column":7,"row":7}}}'), +('29e6a6a5-f80c-48a6-8e68-05bbbe187a09', 'Should locate a single word written right to left', '{"grid":["rixilelhrs"],"wordsToSearchFor":["elixir"]}', '{"elixir":{"start":{"column":6,"row":1},"end":{"column":1,"row":1}}}'), +('3cf34428-b43f-48b6-b332-ea0b8836011d', 'Should locate multiple words written in different horizontal directions', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["elixir","clojure"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}}}'), +('2c8cd344-a02f-464b-93b6-8bf1bd890003', 'Should locate words written top to bottom', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}}}'), +('9ee1e43d-e59d-4c32-9a5f-6a22d4a1550f', 'Should locate words written bottom to top', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript","rust"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}},"rust":{"start":{"column":9,"row":5},"end":{"column":9,"row":2}}}'), +('6a21a676-f59e-4238-8e88-9f81015afae9', 'Should locate words written top left to bottom right', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript","rust","java"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}},"rust":{"start":{"column":9,"row":5},"end":{"column":9,"row":2}},"java":{"start":{"column":1,"row":1},"end":{"column":4,"row":4}}}'), +('c9125189-1861-4b0d-a14e-ba5dab29ca7c', 'Should locate words written bottom right to top left', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript","rust","java","lua"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}},"rust":{"start":{"column":9,"row":5},"end":{"column":9,"row":2}},"java":{"start":{"column":1,"row":1},"end":{"column":4,"row":4}},"lua":{"start":{"column":8,"row":9},"end":{"column":6,"row":7}}}'), +('b19e2149-7fc5-41ec-a8a9-9bc6c6c38c40', 'Should locate words written bottom left to top right', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript","rust","java","lua","lisp"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}},"rust":{"start":{"column":9,"row":5},"end":{"column":9,"row":2}},"java":{"start":{"column":1,"row":1},"end":{"column":4,"row":4}},"lua":{"start":{"column":8,"row":9},"end":{"column":6,"row":7}},"lisp":{"start":{"column":3,"row":6},"end":{"column":6,"row":3}}}'), +('69e1d994-a6d7-4e24-9b5a-db76751c2ef8', 'Should locate words written top right to bottom left', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript","rust","java","lua","lisp","ruby"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}},"rust":{"start":{"column":9,"row":5},"end":{"column":9,"row":2}},"java":{"start":{"column":1,"row":1},"end":{"column":4,"row":4}},"lua":{"start":{"column":8,"row":9},"end":{"column":6,"row":7}},"lisp":{"start":{"column":3,"row":6},"end":{"column":6,"row":3}},"ruby":{"start":{"column":8,"row":6},"end":{"column":5,"row":9}}}'), +('695531db-69eb-463f-8bad-8de3bf5ef198', 'Should fail to locate a word that is not in the puzzle', '{"grid":["jefblpepre","camdcimgtc","oivokprjsm","pbwasqroua","rixilelhrs","wolcqlirpc","screeaumgr","alxhpburyi","jalaycalmp","clojurermt"],"wordsToSearchFor":["clojure","elixir","ecmascript","rust","java","lua","lisp","ruby","haskell"]}', '{"clojure":{"start":{"column":1,"row":10},"end":{"column":7,"row":10}},"elixir":{"start":{"column":6,"row":5},"end":{"column":1,"row":5}},"ecmascript":{"start":{"column":10,"row":1},"end":{"column":10,"row":10}},"rust":{"start":{"column":9,"row":5},"end":{"column":9,"row":2}},"java":{"start":{"column":1,"row":1},"end":{"column":4,"row":4}},"lua":{"start":{"column":8,"row":9},"end":{"column":6,"row":7}},"lisp":{"start":{"column":3,"row":6},"end":{"column":6,"row":3}},"ruby":{"start":{"column":8,"row":6},"end":{"column":5,"row":9}},"haskell":null}'), +('fda5b937-6774-4a52-8f89-f64ed833b175', 'Should fail to locate words that are not on horizontal, vertical, or diagonal lines', '{"grid":["abc","def"],"wordsToSearchFor":["aef","ced","abf","cbd"]}', '{"aef":null,"ced":null,"abf":null,"cbd":null}'), +('5b6198eb-2847-4e2f-8efe-65045df16bd3', 'Should not concatenate different lines to find a horizontal word', '{"grid":["abceli","xirdfg"],"wordsToSearchFor":["elixir"]}', '{"elixir":null}'), +('eba44139-a34f-4a92-98e1-bd5f259e5769', 'Should not wrap around horizontally to find a word', '{"grid":["silabcdefp"],"wordsToSearchFor":["lisp"]}', '{"lisp":null}'), +('cd1f0fa8-76af-4167-b105-935f78364dac', 'Should not wrap around vertically to find a word', '{"grid":["s","u","r","a","b","c","t"],"wordsToSearchFor":["rust"]}', '{"rust":null}'); diff --git a/exercises/practice/word-search/data.csv b/exercises/practice/word-search/data.csv new file mode 100644 index 00000000..0a2b3474 --- /dev/null +++ b/exercises/practice/word-search/data.csv @@ -0,0 +1,24 @@ +"{""grid"":[""jefblpepre""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""clojurermt""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""mtclojurer""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""coffeelplx""],""wordsToSearchFor"":[""coffee""]}", +"{""grid"":[""xcoffeezlp""],""wordsToSearchFor"":[""coffee""]}", +"{""grid"":[""jefblpepre"",""tclojurerm""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""camdcimgtc"",""jefblpepre"",""clojurermt""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""clojurermt"",""jalaycalmp""],""wordsToSearchFor"":[""clojure""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""fortranftw"",""alxhpburyi"",""clojurermt"",""jalaycalmp""],""wordsToSearchFor"":[""fortran""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""fortranftw"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""fortran"",""clojure""]}", +"{""grid"":[""rixilelhrs""],""wordsToSearchFor"":[""elixir""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""elixir"",""clojure""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript"",""rust""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript"",""rust"",""java""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript"",""rust"",""java"",""lua""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript"",""rust"",""java"",""lua"",""lisp""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript"",""rust"",""java"",""lua"",""lisp"",""ruby""]}", +"{""grid"":[""jefblpepre"",""camdcimgtc"",""oivokprjsm"",""pbwasqroua"",""rixilelhrs"",""wolcqlirpc"",""screeaumgr"",""alxhpburyi"",""jalaycalmp"",""clojurermt""],""wordsToSearchFor"":[""clojure"",""elixir"",""ecmascript"",""rust"",""java"",""lua"",""lisp"",""ruby"",""haskell""]}", +"{""grid"":[""abc"",""def""],""wordsToSearchFor"":[""aef"",""ced"",""abf"",""cbd""]}", +"{""grid"":[""abceli"",""xirdfg""],""wordsToSearchFor"":[""elixir""]}", +"{""grid"":[""silabcdefp""],""wordsToSearchFor"":[""lisp""]}", +"{""grid"":[""s"",""u"",""r"",""a"",""b"",""c"",""t""],""wordsToSearchFor"":[""rust""]}", diff --git a/exercises/practice/word-search/word-search.sql b/exercises/practice/word-search/word-search.sql new file mode 100644 index 00000000..e72d7f9f --- /dev/null +++ b/exercises/practice/word-search/word-search.sql @@ -0,0 +1,7 @@ +-- Schema: +-- CREATE TABLE "word-search" ( +-- input TEXT NOT NULL, -- json object +-- result TEXT -- json object +-- ); +-- +-- Task: update the word-search table and set the result column based on the input. diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql new file mode 100644 index 00000000..6ff2f41d --- /dev/null +++ b/exercises/practice/word-search/word-search_test.sql @@ -0,0 +1,62 @@ +-- 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 ./word-search.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 input, result FROM "word-search") AS actual + WHERE actual.input = tests.input + AND (SELECT + NOT EXISTS ( + SELECT j.key, j.value FROM JSON_EACH(actual.result) j + EXCEPT + SELECT j.key, j.value FROM JSON_EACH(tests.expected) j + ) AND NOT EXISTS ( + SELECT j.key, j.value FROM JSON_EACH(tests.expected) j + EXCEPT + SELECT j.key, j.value FROM JSON_EACH(actual.result) j + ) + ) + ; + +-- Update message for failed tests to give helpful information: +UPDATE tests + SET message = ( + 'Result for "' || tests.input || '"' || ' is <' || + COALESCE(actual.result, 'NULL') || '> but should be <' || + tests.expected || '>' + ) + FROM (SELECT input, result FROM "word-search") AS actual + WHERE actual.input = tests.input + 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; From 93ab4717cfb08665f0b2403107bff586fab872f4 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 19:32:11 -0300 Subject: [PATCH 02/26] * irreproducible error: debbug - try 001 --- .../practice/word-search/.meta/example.sql | 96 +++++++++---------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/exercises/practice/word-search/.meta/example.sql b/exercises/practice/word-search/.meta/example.sql index dbb39687..b9adf0d0 100644 --- a/exercises/practice/word-search/.meta/example.sql +++ b/exercises/practice/word-search/.meta/example.sql @@ -31,54 +31,54 @@ CREATE TEMPORARY TABLE strings ( string TEXT NOT NULL, array TEXT NOT NULL ); -INSERT INTO strings (grid, string, array) -SELECT grid, - GROUP_CONCAT(chr, ''), - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) - FROM ( - SELECT grid, chr, row, col - FROM letters - ORDER BY row ASC, col ASC - ) - GROUP BY grid, row -HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 -; -INSERT INTO strings (grid, string, array) -SELECT grid, - GROUP_CONCAT(chr, ''), - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) - FROM ( - SELECT grid, chr, row, col - FROM letters - ORDER BY row DESC, col DESC - ) - GROUP BY grid, row -HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 -; -INSERT INTO strings (grid, string, array) -SELECT grid, - GROUP_CONCAT(chr, ''), - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) - FROM ( - SELECT grid, chr, row, col - FROM letters - ORDER BY col ASC, row ASC - ) - GROUP BY grid, col -HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 -; -INSERT INTO strings (grid, string, array) -SELECT grid, - GROUP_CONCAT(chr, ''), - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) - FROM ( - SELECT grid, chr, row, col - FROM letters - ORDER BY col DESC, row DESC - ) - GROUP BY grid, col -HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 -; +-- INSERT INTO strings (grid, string, array) +-- SELECT grid, +-- GROUP_CONCAT(chr, ''), +-- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) +-- FROM ( +-- SELECT grid, chr, row, col +-- FROM letters +-- ORDER BY row ASC, col ASC +-- ) +-- GROUP BY grid, row +-- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +-- ; +-- INSERT INTO strings (grid, string, array) +-- SELECT grid, +-- GROUP_CONCAT(chr, ''), +-- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) +-- FROM ( +-- SELECT grid, chr, row, col +-- FROM letters +-- ORDER BY row DESC, col DESC +-- ) +-- GROUP BY grid, row +-- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +-- ; +-- INSERT INTO strings (grid, string, array) +-- SELECT grid, +-- GROUP_CONCAT(chr, ''), +-- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) +-- FROM ( +-- SELECT grid, chr, row, col +-- FROM letters +-- ORDER BY col ASC, row ASC +-- ) +-- GROUP BY grid, col +-- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +-- ; +-- INSERT INTO strings (grid, string, array) +-- SELECT grid, +-- GROUP_CONCAT(chr, ''), +-- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) +-- FROM ( +-- SELECT grid, chr, row, col +-- FROM letters +-- ORDER BY col DESC, row DESC +-- ) +-- GROUP BY grid, col +-- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +-- ; WITH bounds (grid, mrow, mcol) AS ( From aeb98d0cb488bff9db20b150910ecc0f8d4fdee3 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 19:40:32 -0300 Subject: [PATCH 03/26] * irreproducible error: debbug - try 002 --- .../practice/word-search/.meta/example.sql | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/exercises/practice/word-search/.meta/example.sql b/exercises/practice/word-search/.meta/example.sql index b9adf0d0..988809e7 100644 --- a/exercises/practice/word-search/.meta/example.sql +++ b/exercises/practice/word-search/.meta/example.sql @@ -31,54 +31,54 @@ CREATE TEMPORARY TABLE strings ( string TEXT NOT NULL, array TEXT NOT NULL ); --- INSERT INTO strings (grid, string, array) --- SELECT grid, --- GROUP_CONCAT(chr, ''), --- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) --- FROM ( --- SELECT grid, chr, row, col --- FROM letters --- ORDER BY row ASC, col ASC --- ) --- GROUP BY grid, row --- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 --- ; --- INSERT INTO strings (grid, string, array) --- SELECT grid, --- GROUP_CONCAT(chr, ''), --- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) --- FROM ( --- SELECT grid, chr, row, col --- FROM letters --- ORDER BY row DESC, col DESC --- ) --- GROUP BY grid, row --- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 --- ; --- INSERT INTO strings (grid, string, array) --- SELECT grid, --- GROUP_CONCAT(chr, ''), --- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) --- FROM ( --- SELECT grid, chr, row, col --- FROM letters --- ORDER BY col ASC, row ASC --- ) --- GROUP BY grid, col --- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 --- ; --- INSERT INTO strings (grid, string, array) --- SELECT grid, --- GROUP_CONCAT(chr, ''), --- JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) --- FROM ( --- SELECT grid, chr, row, col --- FROM letters --- ORDER BY col DESC, row DESC --- ) --- GROUP BY grid, col --- HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 --- ; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY row ASC, col ASC + ) + GROUP BY grid, row +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY row DESC, col DESC + ) + GROUP BY grid, row +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY col ASC, row ASC + ) + GROUP BY grid, col +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; +INSERT INTO strings (grid, string, array) +SELECT grid, + GROUP_CONCAT(chr, ''), + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) + FROM ( + SELECT grid, chr, row, col + FROM letters + ORDER BY col DESC, row DESC + ) + GROUP BY grid, col +HAVING LENGTH(GROUP_CONCAT(chr, '')) > 1 +; WITH bounds (grid, mrow, mcol) AS ( @@ -141,25 +141,25 @@ WITH FROM letters, l2r_coords WHERE letters.grid = l2r_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - ) - INSERT INTO strings (grid, string, array) -SELECT * - FROM ( - SELECT grid, + ), + straigh AS ( + SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) GROUP BY grid, coords - ) - UNION ALL -SELECT * - FROM ( + ), + reverse AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) +INSERT INTO strings (grid, string, array) +SELECT * FROM straigh + UNION ALL +SELECT * FROM reverse ; WITH From ebdd42f92a8a8f8f7100dc471ebd499a14235861 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 19:47:11 -0300 Subject: [PATCH 04/26] * irreproducible error: debbug - try 003 --- exercises/practice/word-search/.meta/example.sql | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/exercises/practice/word-search/.meta/example.sql b/exercises/practice/word-search/.meta/example.sql index 988809e7..0f421b85 100644 --- a/exercises/practice/word-search/.meta/example.sql +++ b/exercises/practice/word-search/.meta/example.sql @@ -1,3 +1,4 @@ +BEGIN TRANSACTION; DROP TABLE IF EXISTS letters; CREATE TEMPORARY TABLE letters ( grid TEXT NOT NULL, @@ -117,12 +118,12 @@ WITH starts.grid, row, col, - g.VALUE, + g.value, JSON_ARRAY(row + g.value, col - g.value) coord FROM bounds, starts, GENERATE_SERIES(0, mrow) g WHERE bounds.grid = starts.grid - AND row + g.VALUE <= mrow - AND col - g.VALUE >= 0 + AND row + g.value <= mrow + AND col - g.value >= 0 ) GROUP BY grid, row, col HAVING JSON_ARRAY_LENGTH(coords) > 1 @@ -143,7 +144,7 @@ WITH AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) ), straigh AS ( - SELECT grid, + SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) @@ -170,7 +171,7 @@ WITH JSON_EXTRACT( array, PRINTF('$[%d][1]', INSTR(string, j.value) - 1), - PRINTF('$[%d][1]', INSTR(string, j.VALUE) + + PRINTF('$[%d][1]', INSTR(string, j.value) + LENGTH(j.value) - 2 ) ) @@ -214,3 +215,4 @@ UPDATE "word-search" FROM results WHERE "word-search".input = results.input ; +COMMIT; From 01c0146fabd92d01f7afbad61c6c3d09a86b6b5d Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:00:08 -0300 Subject: [PATCH 05/26] * irreproducible error: debbug - try 004 --- exercises/practice/word-search/.meta/example.sql | 2 -- exercises/practice/word-search/word-search_test.sql | 8 +++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/exercises/practice/word-search/.meta/example.sql b/exercises/practice/word-search/.meta/example.sql index 0f421b85..cdba2423 100644 --- a/exercises/practice/word-search/.meta/example.sql +++ b/exercises/practice/word-search/.meta/example.sql @@ -1,4 +1,3 @@ -BEGIN TRANSACTION; DROP TABLE IF EXISTS letters; CREATE TEMPORARY TABLE letters ( grid TEXT NOT NULL, @@ -215,4 +214,3 @@ UPDATE "word-search" FROM results WHERE "word-search".input = results.input ; -COMMIT; diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 6ff2f41d..a70870bc 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -37,7 +37,13 @@ UPDATE tests ) FROM (SELECT input, result FROM "word-search") AS actual WHERE actual.input = tests.input - AND tests.status = 'fail'; + AND tests.status = 'fail' +; + +-- Hacking errors --------------------------------------------- +INSERT INTO tests (uuid, description, input, expected, message) +VALUES ('a', '', '', '', (SELECT COUNT(*) 'COUNT strings' FROM strings)); +--------------------------------------------------------------- -- Save results to ./output.json (needed by the online test-runner) .mode json From 49782c7038a657c244807d3b35fb789d37fe6791 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:03:56 -0300 Subject: [PATCH 06/26] * irreproducible error: debbug - try 005 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index a70870bc..b88cdd1b 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -42,7 +42,7 @@ UPDATE tests -- Hacking errors --------------------------------------------- INSERT INTO tests (uuid, description, input, expected, message) -VALUES ('a', '', '', '', (SELECT COUNT(*) 'COUNT strings' FROM strings)); +VALUES ('a', '', '', '', (SELECT COUNT(*) 'COUNT string on strings table' FROM strings WHERE INSTR(string, 'java'))); --------------------------------------------------------------- -- Save results to ./output.json (needed by the online test-runner) From b50c876ec5e75698f035f1f49506a07dda60ad7a Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:06:49 -0300 Subject: [PATCH 07/26] * irreproducible error: debbug - try 006 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index b88cdd1b..df979f09 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -42,7 +42,7 @@ UPDATE tests -- Hacking errors --------------------------------------------- INSERT INTO tests (uuid, description, input, expected, message) -VALUES ('a', '', '', '', (SELECT COUNT(*) 'COUNT string on strings table' FROM strings WHERE INSTR(string, 'java'))); +VALUES ('a', '', '', '', (SELECT COUNT(*) 'COUNT string on strings table' FROM strings WHERE INSTR(string, 'java') > 0)); --------------------------------------------------------------- -- Save results to ./output.json (needed by the online test-runner) From 91a414e102989fa03a4617f8b8ad0e08feec43d4 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:10:50 -0300 Subject: [PATCH 08/26] * irreproducible error: debbug - try 007 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index df979f09..a8969539 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -42,7 +42,7 @@ UPDATE tests -- Hacking errors --------------------------------------------- INSERT INTO tests (uuid, description, input, expected, message) -VALUES ('a', '', '', '', (SELECT COUNT(*) 'COUNT string on strings table' FROM strings WHERE INSTR(string, 'java') > 0)); +VALUES ('a', '', '', '', (select count(*) from (select distinct string from strings) where string like '%java%')); --------------------------------------------------------------- -- Save results to ./output.json (needed by the online test-runner) From c2dcdc8b59d03c98222af93e1fafdfe959581c59 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:15:20 -0300 Subject: [PATCH 09/26] * irreproducible error: debbug - try 008 --- exercises/practice/word-search/word-search_test.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index a8969539..2ec2bab1 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -42,7 +42,10 @@ UPDATE tests -- Hacking errors --------------------------------------------- INSERT INTO tests (uuid, description, input, expected, message) -VALUES ('a', '', '', '', (select count(*) from (select distinct string from strings) where string like '%java%')); +VALUES +('a', '', '', '', (select count(*) from (select distinct string from strings) where string like '%java%')), +('b', '', '', '', (SELECT GROUP_CONCAT(string) FROM (SELECT DISTINCT string FROM strings ORDER BY string))) + ; --------------------------------------------------------------- -- Save results to ./output.json (needed by the online test-runner) From 2dc0813ba7444d9e3861e1a717ae25ec06a930c3 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:21:38 -0300 Subject: [PATCH 10/26] * irreproducible error: debbug - try 009 --- exercises/practice/word-search/word-search_test.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 2ec2bab1..c27480e4 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -43,8 +43,9 @@ UPDATE tests -- Hacking errors --------------------------------------------- INSERT INTO tests (uuid, description, input, expected, message) VALUES -('a', '', '', '', (select count(*) from (select distinct string from strings) where string like '%java%')), -('b', '', '', '', (SELECT GROUP_CONCAT(string) FROM (SELECT DISTINCT string FROM strings ORDER BY string))) +('a', '', '', '', (select PRINTF('count string on strings table: %d', count(*)) from (select distinct string from strings) where string like '%java%')), +('b', '', '', '', (SELECT GROUP_CONCAT(string) FROM (SELECT DISTINCT string FROM strings ORDER BY string))), +('c', '', '', '', (SELECT PRINTF('COUNT DISTINT strings = %d', COUNT(*)) FROM (SELECT DISTINCT string FROM strings))) ; --------------------------------------------------------------- From 1f58187f1f1f035f4678a3bfb2a9a472ebd3f4b1 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:25:05 -0300 Subject: [PATCH 11/26] * irreproducible error: debbug - try 010 --- .../practice/word-search/word-search_test.sql | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index c27480e4..417dcd64 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -45,7 +45,89 @@ INSERT INTO tests (uuid, description, input, expected, message) VALUES ('a', '', '', '', (select PRINTF('count string on strings table: %d', count(*)) from (select distinct string from strings) where string like '%java%')), ('b', '', '', '', (SELECT GROUP_CONCAT(string) FROM (SELECT DISTINCT string FROM strings ORDER BY string))), -('c', '', '', '', (SELECT PRINTF('COUNT DISTINT strings = %d', COUNT(*)) FROM (SELECT DISTINCT string FROM strings))) +('c', '', '', '', (SELECT PRINTF('COUNT DISTINT strings = %d', COUNT(*)) FROM (SELECT DISTINCT string FROM strings))), +('d', '', '', '', ( +WITH + bounds (grid, mrow, mcol) AS ( + SELECT grid, MAX(row), MAX(col) + FROM letters + GROUP BY grid + ), + starts AS ( + SELECT grid, + gr.value row, + gc.value col + FROM bounds, GENERATE_SERIES(0, mrow) gr, GENERATE_SERIES(0, mcol) gc + ), + r2l_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + JSON_ARRAY(row + g.value, col + g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col + g.value <= mcol + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + l2r_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + g.value, + JSON_ARRAY(row + g.value, col - g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col - g.value >= 0 + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + chrs AS ( + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + r2l_coords.coords + FROM letters, r2l_coords + WHERE letters.grid = r2l_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + UNION ALL + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + l2r_coords.coords + FROM letters, l2r_coords + WHERE letters.grid = l2r_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + ), + straigh AS ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) + GROUP BY grid, coords + ), + reverse AS ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) + GROUP BY grid, coords + ) +SELECT PRINTF('COUNT diagonal strings = %d', COUNT(*)) FROM ( +SELECT * FROM straigh + UNION ALL +SELECT * FROM reverse + ))) ; --------------------------------------------------------------- From fe13bdc641215b67ff36a6a56361b4bc57a24b61 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 20:57:28 -0300 Subject: [PATCH 12/26] * irreproducible error: debbug - try 011 --- .../practice/word-search/word-search_test.sql | 86 ++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 417dcd64..a47eeb2a 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -127,7 +127,91 @@ SELECT PRINTF('COUNT diagonal strings = %d', COUNT(*)) FROM ( SELECT * FROM straigh UNION ALL SELECT * FROM reverse - ))) +))), +('e', '', '', '', ( +WITH + bounds (grid, mrow, mcol) AS ( + SELECT grid, MAX(row), MAX(col) + FROM letters + GROUP BY grid + ), + starts AS ( + SELECT grid, + gr.value row, + gc.value col + FROM bounds, GENERATE_SERIES(0, mrow) gr, GENERATE_SERIES(0, mcol) gc + ), + r2l_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + JSON_ARRAY(row + g.value, col + g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col + g.value <= mcol + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + l2r_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + g.value, + JSON_ARRAY(row + g.value, col - g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col - g.value >= 0 + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + chrs AS ( + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + r2l_coords.coords + FROM letters, r2l_coords + WHERE letters.grid = r2l_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + UNION ALL + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + l2r_coords.coords + FROM letters, l2r_coords + WHERE letters.grid = l2r_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + ), + straigh AS ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) + GROUP BY grid, coords + ), + reverse AS ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) + GROUP BY grid, coords + ) +SELECT PRINTF('COUNT diagonal strings for specific string = %d', COUNT(*)) FROM ( +SELECT * FROM straigh + UNION ALL +SELECT * FROM reverse +) + WHERE INSTR(string, 'java') +)) ; --------------------------------------------------------------- From 71f4d2d9e3fb4d9eae06d03e62defe2ab44d4fb6 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 21:37:57 -0300 Subject: [PATCH 13/26] * irreproducible error: debbug - try 012 --- .../practice/word-search/word-search_test.sql | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index a47eeb2a..d0bac683 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -211,7 +211,89 @@ SELECT * FROM straigh SELECT * FROM reverse ) WHERE INSTR(string, 'java') -)) +)), +('f', '', '', '', ( +WITH + bounds (grid, mrow, mcol) AS ( + SELECT grid, MAX(row), MAX(col) + FROM letters + GROUP BY grid + ), + starts AS ( + SELECT grid, + gr.value row, + gc.value col + FROM bounds, GENERATE_SERIES(0, mrow) gr, GENERATE_SERIES(0, mcol) gc + ), + r2l_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + JSON_ARRAY(row + g.value, col + g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col + g.value <= mcol + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + l2r_coords AS ( + SELECT grid, + JSON_GROUP_ARRAY(JSON(coord)) AS coords + FROM ( + SELECT DISTINCT + starts.grid, + row, + col, + g.value, + JSON_ARRAY(row + g.value, col - g.value) coord + FROM bounds, starts, GENERATE_SERIES(0, mrow) g + WHERE bounds.grid = starts.grid + AND row + g.value <= mrow + AND col - g.value >= 0 + ) + GROUP BY grid, row, col + HAVING JSON_ARRAY_LENGTH(coords) > 1 + ), + chrs AS ( + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + r2l_coords.coords + FROM letters, r2l_coords + WHERE letters.grid = r2l_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + UNION ALL + SELECT letters.*, + JSON_ARRAY(letters.row, letters.col) AS row_col, + l2r_coords.coords + FROM letters, l2r_coords + WHERE letters.grid = l2r_coords.grid + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + ), + straigh AS ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) + GROUP BY grid, coords + ), + reverse AS ( + SELECT grid, + GROUP_CONCAT(chr, '') AS string, + JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array + FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) + GROUP BY grid, coords + ) +SELECT GROUP_CONCAT(string) FROM ( +SELECT * FROM straigh + UNION ALL +SELECT * FROM reverse +))) ; --------------------------------------------------------------- From 4c71652b0af39c68fd1a5a445ccf81dfc587d14a Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Mon, 15 Sep 2025 21:42:58 -0300 Subject: [PATCH 14/26] * fix typo --- exercises/practice/word-search/.meta/example.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/practice/word-search/.meta/example.sql b/exercises/practice/word-search/.meta/example.sql index cdba2423..d7d57300 100644 --- a/exercises/practice/word-search/.meta/example.sql +++ b/exercises/practice/word-search/.meta/example.sql @@ -142,14 +142,14 @@ WITH WHERE letters.grid = l2r_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) ), - straigh AS ( + straight AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) GROUP BY grid, coords ), - reverse AS ( + reversed AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array @@ -157,9 +157,9 @@ WITH GROUP BY grid, coords ) INSERT INTO strings (grid, string, array) -SELECT * FROM straigh +SELECT * FROM straight UNION ALL -SELECT * FROM reverse +SELECT * FROM reversed ; WITH From 78c0a566eb6020b29dfe4e94e31c015c8ff4a18e Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 18:53:45 -0300 Subject: [PATCH 15/26] * irreproducible error: debbug - try 013 --- exercises/practice/word-search/word-search_test.sql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index d0bac683..9878f7d3 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -293,7 +293,11 @@ SELECT GROUP_CONCAT(string) FROM ( SELECT * FROM straigh UNION ALL SELECT * FROM reverse -))) +))), +('g', '', '', '', ( +SELECT JSON_GROUP_OBJECT(grid, JSON_OBJECT('mrow', mrow, 'mcol', mcol)) + FROM (SELECT grid, MAX(row) mrow, MAX(col) mcol FROM letters GROUP BY grid) +)) ; --------------------------------------------------------------- From 782dca588b1d1f3dd919d5aa5c363c5f540d4436 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:03:08 -0300 Subject: [PATCH 16/26] * irreproducible error: debbug - try 014 --- .../practice/word-search/word-search_test.sql | 188 +----------------- 1 file changed, 6 insertions(+), 182 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 9878f7d3..56377802 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -43,11 +43,8 @@ UPDATE tests -- Hacking errors --------------------------------------------- INSERT INTO tests (uuid, description, input, expected, message) VALUES -('a', '', '', '', (select PRINTF('count string on strings table: %d', count(*)) from (select distinct string from strings) where string like '%java%')), -('b', '', '', '', (SELECT GROUP_CONCAT(string) FROM (SELECT DISTINCT string FROM strings ORDER BY string))), -('c', '', '', '', (SELECT PRINTF('COUNT DISTINT strings = %d', COUNT(*)) FROM (SELECT DISTINCT string FROM strings))), -('d', '', '', '', ( -WITH +('a', '', '', '', ( + WITH bounds (grid, mrow, mcol) AS ( SELECT grid, MAX(row), MAX(col) FROM letters @@ -109,195 +106,22 @@ WITH WHERE letters.grid = l2r_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) ), - straigh AS ( + straight AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) GROUP BY grid, coords ), - reverse AS ( + reversed AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) -SELECT PRINTF('COUNT diagonal strings = %d', COUNT(*)) FROM ( -SELECT * FROM straigh - UNION ALL -SELECT * FROM reverse -))), -('e', '', '', '', ( -WITH - bounds (grid, mrow, mcol) AS ( - SELECT grid, MAX(row), MAX(col) - FROM letters - GROUP BY grid - ), - starts AS ( - SELECT grid, - gr.value row, - gc.value col - FROM bounds, GENERATE_SERIES(0, mrow) gr, GENERATE_SERIES(0, mcol) gc - ), - r2l_coords AS ( - SELECT grid, - JSON_GROUP_ARRAY(JSON(coord)) AS coords - FROM ( - SELECT DISTINCT - starts.grid, - row, - col, - JSON_ARRAY(row + g.value, col + g.value) coord - FROM bounds, starts, GENERATE_SERIES(0, mrow) g - WHERE bounds.grid = starts.grid - AND row + g.value <= mrow - AND col + g.value <= mcol - ) - GROUP BY grid, row, col - HAVING JSON_ARRAY_LENGTH(coords) > 1 - ), - l2r_coords AS ( - SELECT grid, - JSON_GROUP_ARRAY(JSON(coord)) AS coords - FROM ( - SELECT DISTINCT - starts.grid, - row, - col, - g.value, - JSON_ARRAY(row + g.value, col - g.value) coord - FROM bounds, starts, GENERATE_SERIES(0, mrow) g - WHERE bounds.grid = starts.grid - AND row + g.value <= mrow - AND col - g.value >= 0 - ) - GROUP BY grid, row, col - HAVING JSON_ARRAY_LENGTH(coords) > 1 - ), - chrs AS ( - SELECT letters.*, - JSON_ARRAY(letters.row, letters.col) AS row_col, - r2l_coords.coords - FROM letters, r2l_coords - WHERE letters.grid = r2l_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - UNION ALL - SELECT letters.*, - JSON_ARRAY(letters.row, letters.col) AS row_col, - l2r_coords.coords - FROM letters, l2r_coords - WHERE letters.grid = l2r_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - ), - straigh AS ( - SELECT grid, - GROUP_CONCAT(chr, '') AS string, - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array - FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) - GROUP BY grid, coords - ), - reverse AS ( - SELECT grid, - GROUP_CONCAT(chr, '') AS string, - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array - FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) - GROUP BY grid, coords - ) -SELECT PRINTF('COUNT diagonal strings for specific string = %d', COUNT(*)) FROM ( -SELECT * FROM straigh - UNION ALL -SELECT * FROM reverse -) - WHERE INSTR(string, 'java') -)), -('f', '', '', '', ( -WITH - bounds (grid, mrow, mcol) AS ( - SELECT grid, MAX(row), MAX(col) - FROM letters - GROUP BY grid - ), - starts AS ( - SELECT grid, - gr.value row, - gc.value col - FROM bounds, GENERATE_SERIES(0, mrow) gr, GENERATE_SERIES(0, mcol) gc - ), - r2l_coords AS ( - SELECT grid, - JSON_GROUP_ARRAY(JSON(coord)) AS coords - FROM ( - SELECT DISTINCT - starts.grid, - row, - col, - JSON_ARRAY(row + g.value, col + g.value) coord - FROM bounds, starts, GENERATE_SERIES(0, mrow) g - WHERE bounds.grid = starts.grid - AND row + g.value <= mrow - AND col + g.value <= mcol - ) - GROUP BY grid, row, col - HAVING JSON_ARRAY_LENGTH(coords) > 1 - ), - l2r_coords AS ( - SELECT grid, - JSON_GROUP_ARRAY(JSON(coord)) AS coords - FROM ( - SELECT DISTINCT - starts.grid, - row, - col, - g.value, - JSON_ARRAY(row + g.value, col - g.value) coord - FROM bounds, starts, GENERATE_SERIES(0, mrow) g - WHERE bounds.grid = starts.grid - AND row + g.value <= mrow - AND col - g.value >= 0 - ) - GROUP BY grid, row, col - HAVING JSON_ARRAY_LENGTH(coords) > 1 - ), - chrs AS ( - SELECT letters.*, - JSON_ARRAY(letters.row, letters.col) AS row_col, - r2l_coords.coords - FROM letters, r2l_coords - WHERE letters.grid = r2l_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - UNION ALL - SELECT letters.*, - JSON_ARRAY(letters.row, letters.col) AS row_col, - l2r_coords.coords - FROM letters, l2r_coords - WHERE letters.grid = l2r_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - ), - straigh AS ( - SELECT grid, - GROUP_CONCAT(chr, '') AS string, - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array - FROM (SELECT * FROM chrs ORDER BY grid, row_col ASC) - GROUP BY grid, coords - ), - reverse AS ( - SELECT grid, - GROUP_CONCAT(chr, '') AS string, - JSON_GROUP_ARRAY(JSON_ARRAY(chr, JSON_ARRAY(row, col))) array - FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) - GROUP BY grid, coords - ) -SELECT GROUP_CONCAT(string) FROM ( -SELECT * FROM straigh - UNION ALL -SELECT * FROM reverse -))), -('g', '', '', '', ( -SELECT JSON_GROUP_OBJECT(grid, JSON_OBJECT('mrow', mrow, 'mcol', mcol)) - FROM (SELECT grid, MAX(row) mrow, MAX(col) mcol FROM letters GROUP BY grid) -)) + SELECT JSON_GROUP_OBJECT(grid, JSON_OBJECT('string', string, 'array', ARRAY)) FROM straight +) ) ; --------------------------------------------------------------- From a5142f7ded57d6b508ab8fd3016a33f3bdbac5af Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:16:50 -0300 Subject: [PATCH 17/26] * irreproducible error: debbug - try 015 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 56377802..de02bf08 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -120,7 +120,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT JSON_GROUP_OBJECT(grid, JSON_OBJECT('string', string, 'array', ARRAY)) FROM straight + SELECT COUNT(*) FROM chrs ) ) ; --------------------------------------------------------------- From f5358bf7321e8a4c9453ca1436cc337ae3b04163 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:19:43 -0300 Subject: [PATCH 18/26] * irreproducible error: debbug - try 016 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index de02bf08..aa051df5 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -120,7 +120,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT COUNT(*) FROM chrs + SELECT COUNT(*) FROM letters ) ) ; --------------------------------------------------------------- From 53e316451764724d62028e5cac25d7e78948d094 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:22:31 -0300 Subject: [PATCH 19/26] * irreproducible error: debbug - try 017 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index aa051df5..d5f11504 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -120,7 +120,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT COUNT(*) FROM letters + SELECT COUNT(*) FROM l2r_coords ) ) ; --------------------------------------------------------------- From a58b7e7e9f0b9deab3cf1d2a9884ad3345d90d36 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:26:09 -0300 Subject: [PATCH 20/26] * irreproducible error: debbug - try 018 --- exercises/practice/word-search/word-search_test.sql | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index d5f11504..5819bb9c 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -91,21 +91,25 @@ VALUES GROUP BY grid, row, col HAVING JSON_ARRAY_LENGTH(coords) > 1 ), - chrs AS ( + chrs AS ( + SELECT * FROM ( SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, r2l_coords.coords FROM letters, r2l_coords WHERE letters.grid = r2l_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - UNION ALL +) + UNION ALL + SELECT * FROM ( SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, l2r_coords.coords FROM letters, l2r_coords WHERE letters.grid = l2r_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - ), + ) + ), straight AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, @@ -120,7 +124,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT COUNT(*) FROM l2r_coords + SELECT COUNT(*) FROM chrs ) ) ; --------------------------------------------------------------- From 70306054bd2b8acf4b62fa47a49842d6daafa03e Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:30:22 -0300 Subject: [PATCH 21/26] * irreproducible error: debbug - try 019 --- exercises/practice/word-search/word-search_test.sql | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 5819bb9c..5064559f 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -92,24 +92,20 @@ VALUES HAVING JSON_ARRAY_LENGTH(coords) > 1 ), chrs AS ( - SELECT * FROM ( SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, r2l_coords.coords FROM letters, r2l_coords WHERE letters.grid = r2l_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) -) UNION ALL - SELECT * FROM ( SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, l2r_coords.coords FROM letters, l2r_coords WHERE letters.grid = l2r_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) - ) - ), + ), straight AS ( SELECT grid, GROUP_CONCAT(chr, '') AS string, @@ -124,7 +120,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT COUNT(*) FROM chrs + SELECT COUNT(*) FROM r2l_coords ) ) ; --------------------------------------------------------------- From a95b4503a1e94df7ded6160a8fa51a6a78925a72 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:33:28 -0300 Subject: [PATCH 22/26] * irreproducible error: debbug - try 020 --- exercises/practice/word-search/word-search_test.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 5064559f..b63229aa 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -120,7 +120,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT COUNT(*) FROM r2l_coords + SELECT JSON_GROUP_OBJECT(grid, JSON(coords)) FROM r2l_coords ) ) ; --------------------------------------------------------------- From f3f023fc832f0f68c76266f52104aa2b62749881 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 19:54:02 -0300 Subject: [PATCH 23/26] * irreproducible error: debbug - try 021 --- exercises/practice/word-search/word-search_test.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index b63229aa..4c84dbba 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -97,14 +97,14 @@ VALUES r2l_coords.coords FROM letters, r2l_coords WHERE letters.grid = r2l_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + AND JSON(row_col) IN ((SELECT JSON(j.value) FROM JSON_EACH(coords) j)) UNION ALL SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, l2r_coords.coords FROM letters, l2r_coords WHERE letters.grid = l2r_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + AND JSON(row_col) IN ((SELECT JSON(j.value) FROM JSON_EACH(coords) j)) ), straight AS ( SELECT grid, @@ -120,7 +120,7 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT JSON_GROUP_OBJECT(grid, JSON(coords)) FROM r2l_coords + SELECT COUNT(*) FROM chrs ) ) ; --------------------------------------------------------------- From edf9339579bb760df95ff0df24ea87a4f4793853 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 21:29:40 -0300 Subject: [PATCH 24/26] * irreproducible error: debbug - try 022 --- .../practice/word-search/word-search_test.sql | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 4c84dbba..1affcb8b 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -97,14 +97,14 @@ VALUES r2l_coords.coords FROM letters, r2l_coords WHERE letters.grid = r2l_coords.grid - AND JSON(row_col) IN ((SELECT JSON(j.value) FROM JSON_EACH(coords) j)) + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) UNION ALL SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, l2r_coords.coords FROM letters, l2r_coords WHERE letters.grid = l2r_coords.grid - AND JSON(row_col) IN ((SELECT JSON(j.value) FROM JSON_EACH(coords) j)) + AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) ), straight AS ( SELECT grid, @@ -120,9 +120,14 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT COUNT(*) FROM chrs -) ) - ; + SELECT JSON_GROUP_OBJECT(grid, JSON(coords)) FROM r2l_coords +) ), +( + 'b', '', '', '', ( + SELECT JSON_GROUP_OBJECT(grid, JSON_ARRAY(chr, row, col)) FROM letters + ) +) +; --------------------------------------------------------------- -- Save results to ./output.json (needed by the online test-runner) From 507a03bc65dbd6596ade9d3aac4b96b556ac8763 Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 21:34:07 -0300 Subject: [PATCH 25/26] * irreproducible error: debbug - try 023 --- exercises/practice/word-search/word-search_test.sql | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 1affcb8b..2ad43fe0 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -92,14 +92,14 @@ VALUES HAVING JSON_ARRAY_LENGTH(coords) > 1 ), chrs AS ( - SELECT letters.*, + SELECT letters.grid, letters.chr, letters.row, letters.col, JSON_ARRAY(letters.row, letters.col) AS row_col, r2l_coords.coords FROM letters, r2l_coords WHERE letters.grid = r2l_coords.grid AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) UNION ALL - SELECT letters.*, + SELECT letters.grid, letters.chr, letters.row, letters.col, JSON_ARRAY(letters.row, letters.col) AS row_col, l2r_coords.coords FROM letters, l2r_coords @@ -120,13 +120,8 @@ VALUES FROM (SELECT * FROM chrs ORDER BY grid, row_col DESC) GROUP BY grid, coords ) - SELECT JSON_GROUP_OBJECT(grid, JSON(coords)) FROM r2l_coords -) ), -( - 'b', '', '', '', ( - SELECT JSON_GROUP_OBJECT(grid, JSON_ARRAY(chr, row, col)) FROM letters - ) -) + SELECT COUNT(*) FROM chrs +) ) ; --------------------------------------------------------------- From 84ecc7685f4f7f1a0141630e84a274f25364d26f Mon Sep 17 00:00:00 2001 From: Ronaldo Ferreira de Lima Date: Wed, 17 Sep 2025 21:49:28 -0300 Subject: [PATCH 26/26] * irreproducible error: debbug - try 024 --- exercises/practice/word-search/word-search_test.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/practice/word-search/word-search_test.sql b/exercises/practice/word-search/word-search_test.sql index 2ad43fe0..4bd2d685 100644 --- a/exercises/practice/word-search/word-search_test.sql +++ b/exercises/practice/word-search/word-search_test.sql @@ -92,19 +92,19 @@ VALUES HAVING JSON_ARRAY_LENGTH(coords) > 1 ), chrs AS ( - SELECT letters.grid, letters.chr, letters.row, letters.col, + SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, r2l_coords.coords FROM letters, r2l_coords WHERE letters.grid = r2l_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + AND row_col NOT IN ((SELECT j.value FROM JSON_EACH(coords) j)) UNION ALL - SELECT letters.grid, letters.chr, letters.row, letters.col, + SELECT letters.*, JSON_ARRAY(letters.row, letters.col) AS row_col, l2r_coords.coords FROM letters, l2r_coords WHERE letters.grid = l2r_coords.grid - AND row_col IN ((SELECT j.value FROM JSON_EACH(coords) j)) + AND row_col NOT IN ((SELECT j.value FROM JSON_EACH(coords) j)) ), straight AS ( SELECT grid,