{ "exercise": "word-search", "version": "1.1.0", "comments": [ "Grid rows and columns are 1-indexed.", "An expected value of -1 indicates that some sort of failure should occur." ], "cases": [ { "description": "Should accept an initial game grid and a target search word", "property": "search", "grid": [ "jefblpepre" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": null } }, { "description": "Should locate one word written left to right", "property": "search", "grid": [ "clojurermt" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": { "start": { "column": 1, "row": 1 }, "end": { "column": 7, "row": 1 } } } }, { "description": "Should locate the same word written left to right in a different position", "property": "search", "grid": [ "mtclojurer" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": { "start": { "column": 3, "row": 1 }, "end": { "column": 9, "row": 1 } } } }, { "description": "Should locate a different left to right word", "property": "search", "grid": [ "coffeelplx" ], "wordsToSearchFor": [ "coffee" ], "expected": { "coffee": { "start": { "column": 1, "row": 1 }, "end": { "column": 6, "row": 1 } } } }, { "description": "Should locate that different left to right word in a different position", "property": "search", "grid": [ "xcoffeezlp" ], "wordsToSearchFor": [ "coffee" ], "expected": { "coffee": { "start": { "column": 2, "row": 1 }, "end": { "column": 7, "row": 1 } } } }, { "description": "Should locate a left to right word in two line grid", "property": "search", "grid": [ "jefblpepre", "tclojurerm" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": { "start": { "column": 2, "row": 2 }, "end": { "column": 8, "row": 2 } } } }, { "description": "Should locate a left to right word in three line grid", "property": "search", "grid": [ "camdcimgtc", "jefblpepre", "clojurermt" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": { "start": { "column": 1, "row": 3 }, "end": { "column": 7, "row": 3 } } } }, { "description": "Should locate a left to right word in ten line grid", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": { "start": { "column": 1, "row": 10 }, "end": { "column": 7, "row": 10 } } } }, { "description": "Should locate that left to right word in a different position in a ten line grid", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "clojurermt", "jalaycalmp" ], "wordsToSearchFor": [ "clojure" ], "expected": { "clojure": { "start": { "column": 1, "row": 9 }, "end": { "column": 7, "row": 9 } } } }, { "description": "Should locate a different left to right word in a ten line grid", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "fortranftw", "alxhpburyi", "clojurermt", "jalaycalmp" ], "wordsToSearchFor": [ "fortran" ], "expected": { "fortran": { "start": { "column": 1, "row": 7 }, "end": { "column": 7, "row": 7 } } } }, { "description": "Should locate multiple words", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "fortranftw", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "fortran", "clojure" ], "expected": { "clojure": { "start": { "column": 1, "row": 10 }, "end": { "column": 7, "row": 10 } }, "fortran": { "start": { "column": 1, "row": 7 }, "end": { "column": 7, "row": 7 } } } }, { "description": "Should locate a single word written right to left", "property": "search", "grid": [ "rixilelhrs" ], "wordsToSearchFor": [ "elixir" ], "expected": { "elixir": { "start": { "column": 6, "row": 1 }, "end": { "column": 1, "row": 1 } } } }, { "description": "Should locate multiple words written in different horizontal directions", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "elixir", "clojure" ], "expected": { "clojure": { "start": { "column": 1, "row": 10 }, "end": { "column": 7, "row": 10 } }, "elixir": { "start": { "column": 6, "row": 5 }, "end": { "column": 1, "row": 5 } } } }, { "description": "Should locate words written top to bottom", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript" ], "expected": { "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 } } } }, { "description": "Should locate words written bottom to top", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript", "rust" ], "expected": { "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 } } } }, { "description": "Should locate words written top left to bottom right", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript", "rust", "java" ], "expected": { "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 } } } }, { "description": "Should locate words written bottom right to top left", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript", "rust", "java", "lua" ], "expected": { "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 } } } }, { "description": "Should locate words written bottom left to top right", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript", "rust", "java", "lua", "lisp" ], "expected": { "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 } } } }, { "description": "Should locate words written top right to bottom left", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript", "rust", "java", "lua", "lisp", "ruby" ], "expected": { "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 } } } }, { "description": "Should fail to locate a word that is not in the puzzle", "property": "search", "grid": [ "jefblpepre", "camdcimgtc", "oivokprjsm", "pbwasqroua", "rixilelhrs", "wolcqlirpc", "screeaumgr", "alxhpburyi", "jalaycalmp", "clojurermt" ], "wordsToSearchFor": [ "clojure", "elixir", "ecmascript", "rust", "java", "lua", "lisp", "ruby", "haskell" ], "expected": { "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 } } ] }