{"id":21970299,"url":"https://github.com/andrearcaina/pyggle","last_synced_at":"2025-04-28T11:16:04.316Z","repository":{"id":223771798,"uuid":"761508169","full_name":"andrearcaina/pyggle","owner":"andrearcaina","description":"Pyggle is a boggle solver library written in Python, and compiled to Next.js!","archived":false,"fork":false,"pushed_at":"2024-09-18T01:41:40.000Z","size":2437,"stargazers_count":3,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-28T11:15:52.314Z","etag":null,"topics":["boggle-solver","easyocr","fastapi","nextjs","opencv","pypi-package","tailwindcss"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrearcaina.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-22T00:41:19.000Z","updated_at":"2024-06-11T00:34:59.000Z","dependencies_parsed_at":"2024-04-28T19:23:22.954Z","dependency_job_id":"132209f7-f48c-419f-a7f8-3a321d870f2b","html_url":"https://github.com/andrearcaina/pyggle","commit_stats":null,"previous_names":["andrearcaina/bogglesolver"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrearcaina%2Fpyggle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrearcaina%2Fpyggle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrearcaina%2Fpyggle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrearcaina%2Fpyggle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrearcaina","download_url":"https://codeload.github.com/andrearcaina/pyggle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251302782,"owners_count":21567601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["boggle-solver","easyocr","fastapi","nextjs","opencv","pypi-package","tailwindcss"],"created_at":"2024-11-29T14:38:31.707Z","updated_at":"2025-04-28T11:16:04.301Z","avatar_url":"https://github.com/andrearcaina.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"client/public/pyggle_logo - white.png\" alt=\"logo\" width=\"50%\"\u003e\n\u003c/h1\u003e\n\n# Pyggle\n\nFind all possible words given a boggle board and words (or none!), with a visual representation on how the algorithm works on the web!\n\nWeb Demo: [Coming Soon!](https://github.com/andrearcaina/pyggle)\n\n## Tech Stack\n\n[![TYPESCRIPT](https://img.shields.io/badge/typescript-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=FFF)](https://www.typescriptlang.org/)\n[![NEXT.JS](https://img.shields.io/badge/NEXT-0769AD?style=for-the-badge\u0026logo=next.js\u0026logoColor=white)](https://nextjs.org/)\n[![TAILWINDCSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)](https://tailwindcss.com/) \\\nThe frontend is developed using `TypeScript` and the Next.js framework, with Tailwind CSS as the chosen `CSS` framework.\n\n[![PYTHON](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54)](https://www.python.org/)\n[![FASTAPI](https://img.shields.io/badge/FastAPI-005571?style=for-the-badge\u0026logo=fastapi)](https://fastapi.tiangolo.com/)\n![OpenCV](https://img.shields.io/badge/opencv-%23white.svg?style=for-the-badge\u0026logo=opencv\u0026logoColor=white)\n![EasyOCR](https://img.shields.io/badge/easyocr-008080?style=for-the-badge\u0026logo=python\u0026logoColor=white) \\\nThe backend framework chosen for this project is FastAPI, a performant `Python`-based web framework. In FastAPI, I create API endpoints to communicate with the frontend (the client).\nThese endpoints are designed to decipher the given boggle board from the client and return all possible combinations, coordinates, and score using **Pyggle**.\nThe user can also send an image of a boggle board where I use **OpenCV** to preprocess the image and use **EasyOCR** to accurately retrieve the characters from the boggle board.\n\nThe words and coordinates are then sent to the client as a JSON payload for the frontend to render.\n\n## Package\n\nPyPi: [https://pypi.org/project/pyggle/](https://pypi.org/project/pyggle/)\n\n## Installation\n\n```bash\npip install pyggle\n```\n\n## Usage\n\nInput is case sensitive (for the board). \n\nThe input would consist of: an N x M board as a string with rows separated by spaces. Alternatively, you can pass in a list of lists where each element is the character on the board.\n\nIf words is not passed as an argument, it will utilize a text file that consists of [479k](https://github.com/dwyl/english-words) words. \n\nIf official is not given as a boolean argument, find all words regardless of length, and the letter 'Q' is not represented as 'Qu'.\nIf official is passed as a boolean argument, then the algorithm follows the official rules of boggle. Pyggle will solve and:\n- find all words that have a length greater than 3.\n- The letter 'Q' is now represented as 'Qu'.\n\n```python\nfrom pyggle import Boggle\n\nboard = \"ea st\"\n\nboggle = Boggle(board)\n\nboggle.print_result()\n```\n\nFor more functions from `pyggle`, check:\n- [`lib/examples/2x2_example.py`](https://github.com/andrearcaina/pyggle/blob/main/lib/examples/2x2_example.py) for general functions and more specificity\n- [`lib/examples/qu_example.py`](https://github.com/andrearcaina/pyggle/blob/main/lib/examples/qu_example.py) for an example where the letter 'Q' represents 'Qu'\n- [`lib/docs/boggle-api.md`](https://github.com/andrearcaina/pyggle/blob/main/lib/docs/boggle-api.md) for an understanding of each method\n\n### Output\n\nI don't know how \"ae\" or \"aes\" or \"ast\" is a word, but w/e :P\n\n```bash\na: [(0, 1)]\nae: [(0, 1), (0, 0)]\naes: [(0, 1), (0, 0), (1, 0)]\naet: [(0, 1), (0, 0), (1, 1)]\nas: [(0, 1), (1, 0)]\nase: [(0, 1), (1, 0), (0, 0)]\nast: [(0, 1), (1, 0), (1, 1)]\nat: [(0, 1), (1, 1)]\nate: [(0, 1), (1, 1), (0, 0)]\nates: [(0, 1), (1, 1), (0, 0), (1, 0)]\ne: [(0, 0)]\nea: [(0, 0), (0, 1)]\neast: [(0, 0), (0, 1), (1, 0), (1, 1)]\neat: [(0, 0), (0, 1), (1, 1)]\neats: [(0, 0), (0, 1), (1, 1), (1, 0)]\nes: [(0, 0), (1, 0)]\nest: [(0, 0), (1, 0), (1, 1)]\net: [(0, 0), (1, 1)]\neta: [(0, 0), (1, 1), (0, 1)]\netas: [(0, 0), (1, 1), (0, 1), (1, 0)]\ns: [(1, 0)]\nsa: [(1, 0), (0, 1)]\nsae: [(1, 0), (0, 1), (0, 0)]\nsat: [(1, 0), (0, 1), (1, 1)]\nsate: [(1, 0), (0, 1), (1, 1), (0, 0)]\nse: [(1, 0), (0, 0)]\nsea: [(1, 0), (0, 0), (0, 1)]\nseat: [(1, 0), (0, 0), (0, 1), (1, 1)]\nset: [(1, 0), (0, 0), (1, 1)]\nseta: [(1, 0), (0, 0), (1, 1), (0, 1)]\nst: [(1, 0), (1, 1)]\nsta: [(1, 0), (1, 1), (0, 1)]\nt: [(1, 1)]\nta: [(1, 1), (0, 1)]\ntae: [(1, 1), (0, 1), (0, 0)]\ntas: [(1, 1), (0, 1), (1, 0)]\nte: [(1, 1), (0, 0)]\ntea: [(1, 1), (0, 0), (0, 1)]\nteas: [(1, 1), (0, 0), (0, 1), (1, 0)]\nts: [(1, 1), (1, 0)]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrearcaina%2Fpyggle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrearcaina%2Fpyggle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrearcaina%2Fpyggle/lists"}