There are no reviews yet. Be the first to send feedback to the community and the maintainers!
o--o o o | | | o | O-Oo o-o o-o o-o o-o oo -o- o-o o-o oo | | \ |-' | | |-' | | | | | | | | | | | o o o-o o-o o o-o o-o- o | o-o o o o-o-o o--o o o | | | | O-Oo o-o o-o o-o -o- -o- o-o | \ | | \ |-' | | |-' o o o-o o-o o-o o o o-o In CS and in life, it is often easier to make the rules than it is to find a way to follow them. It is much easier to explain the game of Sudoku to a beginner than it is to solve a difficult puzzle yourself; it is much easier to critique a dish than it is to cook; it is much easier to describe a good human being than it is to be one. Surprisingly, however, it turns out that sometimes a problem's description (in the form of a solution-checking program) is all you need to get a solution! For some problems, with some cleverness, we can automagically turn solution-checker into a solution-finder; that is, we can turn a metaphorical critic into a metaphorical chef. Rosette [0] is a language in which we can define solution-checkers for our problems. On the surface, a Rosette program is an ordinary Scheme (well, Racket) program, and indeed you can run your Rosette program with a purported "solution" to check whether or not it solves your problem. The magic is that we can run Rosette programs without any input at all. Using some clever tricks, Rosette can work backwards from your checker and invent a brand-new input that will pass all of your checks. That is, once you have written a Sudoku-checker, you can get a Sudoku-solver for free! Internally, Rosette works by converting your Racket checks into a very large Boolean circuit, and then using a highly-optimized SAT solver to find true-or-false values for each variable in the circuit. Rosette then converts the SAT solver's solution back into Racket-ey values. Yes, there are scalability and efficiency concerns. Some problems are hard to find solutions to. Some of those problems are inherently tricky -- you can't reverse hashes with Rosette. Other problems can be rewritten to be easier for Rosette to solve, though it may not be obvious how to do this. But for small problems, this is rarely an issue! Computers are fast these days: even an inefficient program to solve a small problem can run fast enough to be practical. That is why I find Rosette exciting: because, at least in my toy domains, it lets me think about programming as a way to specify a problem rather than a solution. This repository, then, contains some small examples of small problems, where a small solution-checker is all that is needed to get Rosette to find a small solution. Enjoy! [0] http://emina.github.io/rosette/
nearley
📜🔜🌲 Simple, fast, powerful parser toolkit for JavaScript.gradient-descent-the-ultimate-optimizer
Code for our NeurIPS 2022 papertower-of-power
What is hip? Tell me, tell me (if you think you know)memo
A language for mental modelsdesigning-perceptual-puzzles-by-differentiating-probabilistic-programs
Supplementary materials for our SIGGRAPH 2022 papershabdle
Shabdle is Wordle in Hindineural-ambigrams
Generating digits that are secretly *other* digits doing handstandsacting-as-inverse-inverse-planning
Code for our SIGGRAPH 2023 paper, "Acting as Inverse Inverse Planning"chaos-game-fractal-foliage
Code for "Learning to Play the Chaos Game: Dreaming of fractal foliage by differentiating iterated function systems"Snapin8r
A Scratch 2.0->Snap! convertereddie
An automatic first-order theorem prover in Haskellemo.7
The man page for emoticons.torchsaber
Elegant dimensions for a more civilized agekesar
A Python library for quickly building human subject studiesshock
It's simple… it's static… it's shock!jigsaw
An Escher-esque jigsaw puzzle generatorprufrock
A literary proof assistant built on the affine calculus of inductive constraintsgifblocks
Make animated GIFs from your Scratch projects!haskell-lambda-calculus
A simple lambda calculus interpreter in Haskell.hamelin
Revenge of the The Py'd Piperlowtex
Low-tech text processingbaobab
Interactive Fiction with Racket and lovevoxel
Yet another raytracer, because we don't have enough of those alreadysublime-nearley
A nearley syntax plugin for TextMate/Sublime Textsoftraxterizer
A small softras implemented in JAXhell
Because http://xkcd.com/724/hootow-hyperlapse
Using classic computer vision algorithms to align hundreds of images of Hoover Towerquackoverflow
Meow.boxcars
Lively box-and-pointer diagrams for Racket.bellhop
A simple, informative bell schedule app.optimally-framing-roger-rabbit
accelerating accelerators with differentiable kD-treesenglipsum
Usable loremtextLegible
Regexes for HumansHuman
Humanist documentationketchup
A temporal RSS proxyturtlegrad
Bidirectional programming by gradient descentscotty
Specify Characters On a TTY - Readline for binary inputwatchat
jeopardy-wagering-under-uncertainty
indexme
Quick, portable, versatile directory listing generatorjokebot
A simple demo IRC bot in Pythonpoison-ivy
Create a graphical representation of dependency relationships between Ivy conjectures.generative-adversarial-web-development
Substance… and style!lagrange-climbs-a-hill
Interpolating Lagrangian mechanics by AD and gradient descentbentley-blizzard-blossoms
A frosty MNIST alternative :)Love Open Source and this site? Check out how you can help us