{"id":39908732,"url":"https://github.com/johnmcfarlane/wss","last_synced_at":"2026-01-18T16:03:27.528Z","repository":{"id":37617497,"uuid":"161050514","full_name":"johnmcfarlane/wss","owner":"johnmcfarlane","description":"Word Game Solver","archived":false,"fork":false,"pushed_at":"2023-04-10T17:51:56.000Z","size":32613,"stargazers_count":17,"open_issues_count":3,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-04-25T06:18:41.930Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnmcfarlane.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-09T14:58:16.000Z","updated_at":"2024-02-06T11:59:27.000Z","dependencies_parsed_at":"2023-02-13T05:00:50.847Z","dependency_job_id":null,"html_url":"https://github.com/johnmcfarlane/wss","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/johnmcfarlane/wss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmcfarlane%2Fwss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmcfarlane%2Fwss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmcfarlane%2Fwss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmcfarlane%2Fwss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnmcfarlane","download_url":"https://codeload.github.com/johnmcfarlane/wss/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmcfarlane%2Fwss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28541068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-18T16:03:26.970Z","updated_at":"2026-01-18T16:03:27.523Z","avatar_url":"https://github.com/johnmcfarlane.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WSS\n\n[![GitHub](https://github.com/johnmcfarlane/wss/actions/workflows/test.yml/badge.svg)](https://github.com/johnmcfarlane/wss/actions/workflows/test.yml)\n[![GitLab](https://gitlab.com/johnmcfarlane/wss/badges/main/pipeline.svg)](https://gitlab.com/johnmcfarlane/wss/-/commits/main)\n\n## Introduction\n\nWSS is a tool written in C++ for suggesting wordles. It serves two purposes:\n\n1. to provide [Wordle](https://www.nytimes.com/games/wordle/) players with a\n   list of possible moves, and\n1. to provide the template for a maintainable CMake project.\n\n## Requirements\n\n* C++20 compiler\n* CMake 3.16\n\n## Word Search\n\nWSS produces a command-line tool, `wordle`, which takes a history of previous\nattempts and lists all potentially-winning words.\n\n### Example\n\nAfter playing the following two moves,\n\n![Image](docs/wordle.png)\n\nyou can search for possible WORDLEs:\n\n```sh\nwordle TALES20010,TEMPO21001\n```\n\nOutput:\n\n\u003e THROE  \n\u003e TOGUE  \n\u003e TONNE  \n\u003e TOQUE  \n\u003e TORTE  \n\u003e TOWIE  \n\u003e TRODE  \n\u003e TROKE  \n\u003e TRONE  \n\u003e TROVE  \n\n### Implementation\n\nWSS builds the `wordle` program by consuming a lexicon of 5-letter words,\nconverting them into C++-encoded data, and then\nbuilding them into a program which searches through them for suggestions.\n\nThe encoded data takes the form of a Directed Acyclic Word-Graph (DAWG),\nsimilar to the one described in the paper,\n[The World's Fastest Scrabble Program](https://www.cs.cmu.edu/afs/cs/academic/class/15451-s06/www/lectures/scrabble.pdf)\n(Andrew W. Appel, Guy J. Jacobson, 1988).\nIt allows algorithms to search through the lexicon in a way that avoids much of\nthe duplication one typically finds in a word list.\nThis helps to find solutions in a shorter time.\n\n## Versatility Through Simplicity\n\nWSS also aims to demonstrate a simpler way of organising C++ projects.\n\nMany CMake projects couple tools to the build system explicitly.\nThis approach is often brittle, inflexible and overly-complex.\n\nWSS makes effective use of CMake by keeping configuration scripts minimal,\ndeclarative and decoupled. In this way, the code can be configured,\nbuilt and tested against an open set of toolchains, package managers,\nand other development tools.\n\nThe codebase represents multiple CMake targets and thousands of lines of code.\nYet, the essential build configuration amounts to just a few hundred lines of\nCMake, and everything can be built and tested with just two Conan commands,\nor five vcpkg commands. This is possible because the build system is separate\nfrom other aspects of project management, such as toolchain configuration and\ndependency management. It does one thing well: describing binaries.\n\n## Continuous Integration\n\nThe project's CI pipelines demonstrate how to develop maintainable C++ by\napplying the build system to many tools...\n\nToolchains:\n\n* [Clang](https://clang.llvm.org/)\n* [GCC](https://gcc.gnu.org/)\n* [MSVC](https://visualstudio.microsoft.com/vs/features/cplusplus/)\n\nPackage Managers:\n\n* [Conan](https://conan.io/) Python-based C++ package manager\n* [vcpkg](https://vcpkg.io/) CMake-based C++ package manager\n\nCollaboration and CI:\n\n* [GitHub](https://github.com/)+[Actions](https://github.com/features/actions)\n  demonstrates [CI](https://github.com/johnmcfarlane/wss/actions) via\n  [a GitHub repository](https://github.com/johnmcfarlane/wss)\n* [GitLab](https://gitlab.com/) demonstrates [CI](https://gitlab.com/johnmcfarlane/wss/-/pipelines)\n  via [a GitLab repository](https://gitlab.com/johnmcfarlane/wss)\n\nAnalysers:\n\n* [AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer.html)\n* [CppCheck](http://cppcheck.net/) static analyser\n* [Clang Static Analyzer](https://clang-analyzer.llvm.org/)\n* [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/) C++ linter and static\n  analyser\n* [gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html)+\n  [lcov](http://ltp.sourceforge.net/coverage/lcov.php) reporting 100% code coverage\n* [graphviz](https://graphviz.org/) representation of package and target dependencies\n* [Include what you use](https://include-what-you-use.org/) tool to analyze `#include`s\n* [libfuzzer](https://www.llvm.org/docs/LibFuzzer.html) coverage-guided fuzz testing\n* [pre-commit](https://pre-commit.com/) linting framework with\n  formatting and correctness checks for:\n  * Bash\n  * C++\n  * CMake\n  * JSON\n  * Markdown\n  * Python\n  * YAML\n* [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html)\n* [Valgrind](https://valgrind.org)\n\n## Instructions\n\nWSS is built and tested on Linux and Windows.\nIt is designed to be easy to build and to run with:\n\n* Conan package manager,\n* CMake build system generator,\n* A C++20-compatible compiler such as Clang, GCC or MSVC.\n\n### Build and Test (Conan)\n\nTo build `wordle` using Conan on Linux,\n\n1. create an empty build directory,\n\n   ```sh\n   mkdir -p build\n   cd build/\n   ```\n\n1. install package dependencies,\n\n   ```sh\n   conan install --build=missing \u003cpath-to-wss\u003e\n   ```\n\n1. then configure, build, test, and install the program:\n\n   ```sh\n   conan build \u003cpath-to-wss\u003e\n   ```\n\n1. The program can be found in `package/bin`:\n\n   ```sh\n   ./package/bin/wordle\n   ```\n\n### Build and Test (vcpkg)\n\nTo build `wordle` using vcpkg on Linux,\n\n1. create an empty build directory,\n\n   ```sh\n   mkdir -p build\n   cd build/\n   ```\n\n1. install vcpkg using [these instructions](https://vcpkg.io/en/getting-started.html),\n\n   ```sh\n   git clone https://github.com/Microsoft/vcpkg.git\n   ./vcpkg/bootstrap-vcpkg.sh\n   ```\n\n1. then configure, build, and test the program:\n\n   ```sh\n   cmake -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake \u003cpath-to-wss\u003e\n   cmake --build .\n   ctest\n   ```\n\n### Use WSS as a Template\n\nYou can use WSS as the starting-off point for your own C++ project.\nFrom the [WSS GitHub repository](https://github.com/johnmcfarlane/wss),\nclick the \"Use this template\" button in order to\n[generate](https://github.com/johnmcfarlane/wss/generate) your own repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnmcfarlane%2Fwss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnmcfarlane%2Fwss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnmcfarlane%2Fwss/lists"}