{"id":13803548,"url":"https://github.com/oatmealine/78","last_synced_at":"2025-04-12T09:12:07.400Z","repository":{"id":106473163,"uuid":"253650275","full_name":"oatmealine/78","owner":"oatmealine","description":"an esolang focused on the numbers 7 and 8","archived":false,"fork":false,"pushed_at":"2020-04-07T04:51:32.000Z","size":6,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-12T09:05:24.207Z","etag":null,"topics":["esolang","language","suffering"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/oatmealine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-04-07T00:47:21.000Z","updated_at":"2024-07-02T11:19:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"a2dbc66f-531f-4bd4-b12f-6a48d4463194","html_url":"https://github.com/oatmealine/78","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/oatmealine%2F78","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oatmealine%2F78/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oatmealine%2F78/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oatmealine%2F78/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oatmealine","download_url":"https://codeload.github.com/oatmealine/78/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248543848,"owners_count":21121838,"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","language","suffering"],"created_at":"2024-08-04T01:00:35.246Z","updated_at":"2025-04-12T09:12:07.370Z","avatar_url":"https://github.com/oatmealine.png","language":"JavaScript","funding_links":[],"categories":["Languages"],"sub_categories":[],"readme":"# 78\n\n78 is an esoteric language based on the numbers **7** and **8**. It's really confusing and complicated to use, but supports quite a few features.\n\nFor example, the language has:\n\n- (Up to) 2 variables\n- Float support\n- Simple if conditions\n- Outputting both numbers and characters\n- Loops\n\n## Why?\n\n¯\\\\\\_(ツ)\\_/¯\n\n## Interpreters\n\nCurrently the only interpreter I know of is mine, which you can see in this repo as `interpreter.js`! It only has the very basic features of 78 and nothing else. To run it, you have to do:\n\n```bash\nnode interpreter.js code.78\n```\n\n## Syntax\n\nThe syntax of the language is really simple. Each character in a program is an instruction, which must be one of the pre-defined instructions. Each instruction in the program is ran in order over and over again until the program is terminated.\n\n### Instructions\n\n- **a** - 7 is added to the current value\n- **b** - 8 is subtracted from the current value\n- **g** - 10^-x ie added to the current value, the amount of the next g instructions determines the x\n- **o** - output the current value multiplied by 2\n- **s** - swaps the current variable and the extra variable's values\n- **!** - starts and ends a loop. a loop is terminated once the resulting main value at the end of the loop is equal to 0\n- **h** - the next instruction is ignored if the current value is over 0\n- **j** - the next instruction is ignored if the current value is 0\n- **k** - if the next instruction is h or j, it reverses the statement of the instruction (ex. kha would only add 7 if the current value is below 0), else negtates the value\n- **f** - terminates the program if the next instruction is u\n- **u** - ignored if the next instruction isnt c\n- **c** - ignored if the next instruction isnt k\n- **y** - outputs the current value's character based on the ascii code\n- **r** - sets the current value to 8\n (whitespace) - ignored\n \n## Examples\n\n### 14\n\nThis program will output the number 14 and then exit:\n\n```78\na o fuck\n```\n\nThis is because first the main value is added 7 to with `a`, making it 7, then that value is multiplied by two and outputted by `o`, and then the program is terminated with `fuck`.\n\n### Loops\n\nThis program will output numbers from 14 to 0:\n\n```78\na !ba g g g g g o! fuck\n```\n\n*Note: because of float impercision, this doesn't actually happen on the JS interpreter included in the repo.*\n\n### Simpler loops\n\nThis program will output even numbers from 14 to 0:\n\n```78\na !ba o! fuck\n```\n\n### Extra variable\n\nThis program would output even numbers from 14 to 0 and put spaces inbetween the numbers:\n\n```78\naaaaabababa s a !ba o s y s! fuck\n```\n\nWhat this does is it first sets the main value to the unicode code of a space character, then swaps the extra and main values to make it stored in memory, but not erased: `aaaaabababa s`. And then, when it needs to use the value, it swaps to the extra value, prints it out, then swaps back to the main value: `s y s`.\n\n### Unicode table\n\nThis program will output each character in the unicode table:\n\n```78\na !aaaaaaabbbbb y!\n```\n\nSince there is no termination condition, the program will run forever.*\n\n*_Until the interpreter reaches the maximum call stack size._\n\n### If conditions\n\nThis program will never terminate, even though there is a `fuck` inside it:\n\n```78\na hfuck\n```\n\nThis happens because `h` doesn't run the next instruction unless the value is under or equal to 0, and the value just happens to be 7, due to the first `a` instruction in the program. Therefore the `h` ignores the `fuck` instruction and the program endlessly loops.\n\n~~also the program says \"ah fuck\" for some reason but that's a different mystery to solve~~\n\n\n\nThere are a few more examples in the `examples/` folder of the repo which you can check out. They usually have a comment after the `fuck` instruction saying what it does.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foatmealine%2F78","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foatmealine%2F78","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foatmealine%2F78/lists"}