{"id":20425277,"url":"https://github.com/catseye/ypsilax","last_synced_at":"2026-05-07T21:39:13.972Z","repository":{"id":3695884,"uuid":"4766620","full_name":"catseye/Ypsilax","owner":"catseye","description":"MIRROR of https://codeberg.org/catseye/Ypsilax : A non-deterministic reflective grid-rewriting language","archived":false,"fork":false,"pushed_at":"2023-12-08T09:33:34.000Z","size":61,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-15T15:11:53.630Z","etag":null,"topics":["esolang","esoteric-language","grid-rewriting","non-deterministic","reflective"],"latest_commit_sha":null,"homepage":"http://catseye.tc/node/Ypsilax","language":"Perl","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/catseye.png","metadata":{"files":{"readme":"README.markdown","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":"2012-06-23T18:26:51.000Z","updated_at":"2023-11-01T08:53:39.000Z","dependencies_parsed_at":"2025-01-15T15:08:40.136Z","dependency_job_id":"7f085546-83a3-4ada-8cf5-8b3d602efb53","html_url":"https://github.com/catseye/Ypsilax","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catseye%2FYpsilax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catseye%2FYpsilax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catseye%2FYpsilax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catseye%2FYpsilax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/catseye","download_url":"https://codeload.github.com/catseye/Ypsilax/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241966977,"owners_count":20050324,"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":["esolang","esoteric-language","grid-rewriting","non-deterministic","reflective"],"created_at":"2024-11-15T07:12:45.583Z","updated_at":"2025-12-02T23:01:21.750Z","avatar_url":"https://github.com/catseye.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"Ypsilax\n=======\n\nLanguage version 1.1, distribution revision 2014.0525\n\nOverview\n--------\n\n**Ypsilax** is a minimal, non-deterministic, reflective, two-dimensional\ngrid-rewriting language. Ypsilax is a descendent of Zirgulax, which was\nan earlier but similar idea which used a hexnet instead of a grid.\n\nAn Ypsilax source file is One Big Playfield. This playfield is not\nsemantically symmetrical; things closer to the 'top' of the playfield\nhave a higher 'precendence' than the things close to the 'bottom'. (I\nexperimented with colours and boundaries, and found having a 'sloping'\nplayfield was much easier to implement.)\n\n[Implementation note. The source for the reference implementation is\nonly about 5K of Perl code, and much of that is taken up by the\nlicense!]\n\nA rewriting rule in Ypsilax looks like this:\n\n      (  )\n       AB\n\nRules are always twice as wide as they are high. This particular rule,\nwhich is two cells wide by one cell high, says that it is OK to replace\nany A found below this rule with a B.\n\nYpsilax is totally non-determinstic, like [Thue][]. Each reduction\nconsists of picking a rule by an unspecified method — for all you know,\nit is selected completely at random — and attempting to apply it to some\npart of the playfield below the rule, again chosen by means unknown.\nWhen this suceeds, that part of the playfield is rewritten.\n\n[Thue]: https://esolangs.org/wiki/Thue\n\n[Implementation note: in fact, the reference implementation does indeed\nselect rules and places to apply them using Perl's pseudo-random number\ngenerator. Also, the interpreter dumps an image of the playfield to\n`stdout` whenever a rewrite occurs, for some jolly good entertainment,\nbut this is not specified as part of the language semantics proper.]\n\nYpsilax is reflective. This means that you can write rules which rewrite\nother rules. For example, you could write the following rule above the\npreviously noted rule, which would rewrite it:\n\n      (        )\n       (  )(  )\n        AB  CD\n\nNote that this rule is, in fact, four cells high, as it is eight cells\nacross.\n\nHowever, there is nothing stopping these 'embedded' rules from also\nbeing randomly picked and applied by some rule that may occur above\nthem. To get around that we can 'escape' the\nrules-to-be-matched-instead-of-obeyed:\n\n      (\\   \\   )\n       (  )(  )\n        AB  CD\n\nThe backslashes do not affect the semantics of the parentheses as\n'define rule'; however they do prevent rewrites on the cells immediately\nbelow them.\n\nFinally, Ypsilax just wouldn't be a proper constraint-based language\nwithout some form of pattern-matching. (*In 1.1: Updated to agree with\nexisting implementation and examples*) The wildcard character in any\ngiven rule is whatever character appears just to the left of the `)`\nthat delimits that rule on the right, as long as that character is not\nblank space. Whereever this character appears in the left-hand side of\nthe rule (the pattern,) it will match any character during a rewrite,\nnot just another of its own kind. Whereever this character appears in\nthe right-hand side of the rule (the substitution,) it will not replace\nthe corresponding character in the playfield when a substitution is\nmade. That character in the playfield will remain unchanged.\n\nLicense\n-------\n\nCopyright ©2001-2014, Chris Pressey, Cat's Eye Technologies.\nAll rights reserved.\n\nDistributed under a BSD-style license; see `LICENSE` for more information.\n\nOther Implementations\n---------------------\n\nThere is also a public-domain implementation of Ypsilax in Java included\nin [the yoob distribution](https://catseye.tc/distribution/yoob_distribution).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatseye%2Fypsilax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatseye%2Fypsilax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatseye%2Fypsilax/lists"}