{"id":23759798,"url":"https://github.com/ethyca/python-takehome-2","last_synced_at":"2026-01-25T13:32:52.293Z","repository":{"id":103328520,"uuid":"389808045","full_name":"ethyca/python-takehome-2","owner":"ethyca","description":null,"archived":false,"fork":false,"pushed_at":"2021-07-31T02:20:05.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-25T04:33:59.197Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ethyca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-07-27T00:54:47.000Z","updated_at":"2021-11-18T12:48:08.000Z","dependencies_parsed_at":"2023-06-02T19:00:16.918Z","dependency_job_id":null,"html_url":"https://github.com/ethyca/python-takehome-2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ethyca/python-takehome-2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethyca%2Fpython-takehome-2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethyca%2Fpython-takehome-2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethyca%2Fpython-takehome-2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethyca%2Fpython-takehome-2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethyca","download_url":"https://codeload.github.com/ethyca/python-takehome-2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethyca%2Fpython-takehome-2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28753440,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T10:25:12.305Z","status":"ssl_error","status_checked_at":"2026-01-25T10:25:11.933Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":"2024-12-31T20:20:00.014Z","updated_at":"2026-01-25T13:32:52.286Z","avatar_url":"https://github.com/ethyca.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ethyca Technical Challenge -- Open Source Engineer (Python)\n\n## User Story\nAs a keen noughts and crosses (/tic-tac-toe) player (and aspiring champion), I need a web service that allows me to play against a computer via a REST API. The API must allow me to create a new game, make the next move in a game, and list all games previously played.\n\n### Noughts and Crosses (Tic-tac-toe)\nTic-tac-toe (American English), noughts and crosses (British English) is a game for two players, X and O, who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a diagonal, horizontal, or vertical row is the winner. ~It is a solved game with a forced draw assuming best play from both players.~\n\nAn example game series can be represented as:\n```\n# A blank board\n[\n    [\".\", \".\", \".\"],\n    [\".\", \".\", \".\"],\n    [\".\", \".\", \".\"],\n]\n\n# First move\n[\n    [\".\", \".\", \".\"],\n    [\".\", \"X\", \".\"],\n    [\".\", \".\", \".\"],\n]\n\n# Second move\n[\n    [\".\", \".\", \".\"],\n    [\".\", \"X\", \".\"],\n    [\".\", \".\", \"O\"],\n]\n\n# Third move\n[\n    [\".\", \".\", \"X\"],\n    [\".\", \"X\", \".\"],\n    [\"O\", \".\", \"O\"],\n]\n\n...and so forth\n```\n\n## Your Task\nUse Python (any flavour) to develop a REST API that:\n- Allows me to create a new game of Noughts and Crosses, and returns the game ID.\n- Allows me to make the next move by specifying the co-ordinates I wish to move on. e.g. `{\"x\": 1, \"y\": 1}` would denote a move to the middle square by the requesting player, and returns the new state of the board _after_ the computer has made its move in turn. __Note: There is no need to create an AI opponent, random moves are fine__\n- Allows me to view all moves in a game, chronologically ordered.\n- Allows me to view all games I have played, chronologically ordered.\n- Surprise us! Use your inherent style and panache to sprinkle that extra bit of gee-whizz atop your solution.\n\n\n## Notes\n- Please work independently without code review by others.\n- It's our intention that you spend between 3 and 4 hours on this task.\n- This challenge is deliberately vague on detail to give candidates the opportunity for a wide range of solutions. That being said, feel free to reach out and ask questions as needed.\n- There is no 100% correct solution, be creative! We are just as interested in your approach to problem solving as we are in your actual solution.\n- Remember that we'll schedule a debrief interview with you afterwards to discuss the code and ask questions, so you'll be able to explain what you've done!\n- Code style, comments, and general code hygiene matter despite this being a test!\n\n\n## Delivery\n- Once completed, please create a README file describing:\n  - How to run your project (or where it is hosted),\n  - How much time you spent building the project,\n  - Any assumptions you made,\n  - Any trade-offs you made,\n  - Any special/unique features you added,\n  - Anything else you want us to know about,\n  - Any feedback you have on this technical challenge -- we care deeply about our hiring process here at Ethyca, and about the engineers who go through it (that's you!) -- we wholeheartedly promise any feedback will be met with a warm thank you!\n- The assignment can be published and shared with us via any code sharing platform such as Github, Gitlab, or sent as a .zip file to the Ethyca employee who sent you this task.\n- We'll review your submission in advance of your debrief interview, and look forward to talking to you about it!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethyca%2Fpython-takehome-2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethyca%2Fpython-takehome-2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethyca%2Fpython-takehome-2/lists"}