{"id":17086232,"url":"https://github.com/kach/recreational-rosette","last_synced_at":"2026-01-05T00:41:13.647Z","repository":{"id":66653320,"uuid":"95187242","full_name":"kach/recreational-rosette","owner":"kach","description":"Some fun examples of solving problems with symbolic execution","archived":false,"fork":false,"pushed_at":"2018-08-05T13:39:03.000Z","size":206,"stargazers_count":112,"open_issues_count":1,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-28T20:41:27.770Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Racket","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/kach.png","metadata":{"files":{"readme":"README.txt","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":"2017-06-23T05:47:23.000Z","updated_at":"2024-11-09T06:59:21.000Z","dependencies_parsed_at":"2023-02-25T10:00:19.231Z","dependency_job_id":null,"html_url":"https://github.com/kach/recreational-rosette","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kach%2Frecreational-rosette","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kach%2Frecreational-rosette/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kach%2Frecreational-rosette/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kach%2Frecreational-rosette/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kach","download_url":"https://codeload.github.com/kach/recreational-rosette/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245115331,"owners_count":20563138,"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":[],"created_at":"2024-10-14T13:27:58.512Z","updated_at":"2026-01-05T00:41:13.568Z","avatar_url":"https://github.com/kach.png","language":"Racket","funding_links":[],"categories":[],"sub_categories":[],"readme":"             o--o                        o                 o \n             |   |                       |  o              | \n             O-Oo  o-o  o-o o-o o-o  oo -o-   o-o o-o   oo | \n             |  \\  |-' |    |   |-' | |  |  | | | |  | | | | \n             o   o o-o  o-o o   o-o o-o- o  | o-o o  o o-o-o \n                                                             \n                                                             \n                      o--o               o   o      \n                      |   |              |   |      \n                      O-Oo  o-o o-o o-o -o- -o- o-o \n                      |  \\  | |  \\  |-'  |   |  |-' \n                      o   o o-o o-o o-o  o   o  o-o \n\n\nIn CS and in life, it is often easier to make the rules than it is to find a\nway to follow them. It is much easier to explain the game of Sudoku to a\nbeginner than it is to solve a difficult puzzle yourself; it is much easier to\ncritique a dish than it is to cook; it is much easier to describe a good human\nbeing than it is to be one.\n\nSurprisingly, however, it turns out that sometimes a problem's description (in\nthe form of a solution-checking program) is all you need to get a solution! For\nsome problems, with some cleverness, we can automagically turn solution-checker\ninto a solution-finder; that is, we can turn a metaphorical critic into a\nmetaphorical chef.\n\nRosette [0] is a language in which we can define solution-checkers for our\nproblems. On the surface, a Rosette program is an ordinary Scheme (well,\nRacket) program, and indeed you can run your Rosette program with a purported\n\"solution\" to check whether or not it solves your problem.\n\nThe magic is that we can run Rosette programs without any input at all. Using\nsome clever tricks, Rosette can work backwards from your checker and invent a\nbrand-new input that will pass all of your checks. That is, once you have\nwritten a Sudoku-checker, you can get a Sudoku-solver for free!\n\nInternally, Rosette works by converting your Racket checks into a very large\nBoolean circuit, and then using a highly-optimized SAT solver to find\ntrue-or-false values for each variable in the circuit. Rosette then converts\nthe SAT solver's solution back into Racket-ey values.\n\nYes, there are scalability and efficiency concerns. Some problems are hard to\nfind solutions to. Some of those problems are inherently tricky -- you can't\nreverse hashes with Rosette. Other problems can be rewritten to be easier for\nRosette to solve, though it may not be obvious how to do this.\n\nBut for small problems, this is rarely an issue! Computers are fast these days:\neven an inefficient program to solve a small problem can run fast enough to be\npractical. That is why I find Rosette exciting: because, at least in my toy\ndomains, it lets me think about programming as a way to specify a problem\nrather than a solution.\n\nThis repository, then, contains some small examples of small problems, where a\nsmall solution-checker is all that is needed to get Rosette to find a small\nsolution.\n\nEnjoy!\n\n[0] http://emina.github.io/rosette/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkach%2Frecreational-rosette","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkach%2Frecreational-rosette","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkach%2Frecreational-rosette/lists"}