https://github.com/Vyxal/Vyxal Skip to content Toggle navigation Sign in * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Resources + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} Vyxal / Vyxal Public * Notifications * Fork 31 * Star 233 * A code-golfing language experience that has aspects of traditional programming languages - terse, elegant, readable. vyxal.github.io/ License MIT license 233 stars 31 forks Branches Tags Activity Star Notifications * Code * Issues 2 * Pull requests 2 * Discussions * Actions * Projects 0 * Wiki * Security * Insights Additional navigation options * Code * Issues * Pull requests * Discussions * Actions * Projects * Wiki * Security * Insights Vyxal/Vyxal This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. version-3 BranchesTags Go to file Code Folders and files Last commit Last Name Name message commit date Latest commit History 5,939 Commits .github .github contributing contributing dict_scripts dict_scripts documentation documentation js/src/vyxal js/src/vyxal jvm jvm native/src/vyxal native/src/vyxal pages pages shared shared .git-blame-ignore-revs .git-blame-ignore-revs .gitattributes .gitattributes .gitignore .gitignore .gitpod.yml .gitpod.yml .mill-version .mill-version .scala-steward.conf .scala-steward.conf .scalafix.conf .scalafix.conf .scalafmt.conf .scalafmt.conf CONTRIBUTING.md CONTRIBUTING.md LICENSE LICENSE README.md README.md build.sc build.sc local_server.py local_server.py mill mill mill.bat mill.bat View all files Repository files navigation * README * MIT license Vyxal 3 - Better than Ever If you are looking for version 2 of Vyxal, you can find it here Vyxal is an stack-based esoteric array language that is dedicated to dominating competition in code golf challenges. This means that it strips away all need for boilerplate, long function names and impractical source layouts. However, it also has a more traditional and familiar way of expressing itself if needed. Vyxal 3 is the third major iteration of the language that drives home this key design goal. Here's how. What's the Same as Version 2? Vyxal 3 is still a stack based programming language that uses a Single Byte Code Set (SBCS) for scoring well in code golf. It also retains some of the key features of. version 2, such as contexts, modifiers and many, many type overloads. It also maintains the more prac-lang-centric features such as variables and comments that version 2 has. That's about it. Because here's what's new in version 3 Literate Mode Ever wanted to write vyxal without needing an on screen keyboard or editor shortcuts? Well now you can! Literate mode is designed to allow you to write vyxal 3 programs in complete ascii while maintaining a SBCS score. It does this by simply converting the literate code into sbcs code. Wanna see it in action? ## A collatz conjecture program stdin := n ## read the input into n (. scan-fix: {if even? then halve else increment endif}) := collatz $n $collatz call (Try it Online!) turns into: ?#=n[?]l#{e|1/2|}#{}#=collatz#$n#$collatzE (Try it Online!) --------------------------------------------------------------------- ## The classic fizzbuzz 100 map{ n [3, 5] divides? "FizzBuzz" halve dot-product maximum } join-on-newlines (Try it Online!) turns into: 100Mln#[3|5#]D"FizzBuzz"1/2dG}n (Try it Online!) --------------------------------------------------------------------- ## How about something that generates all the fibonacci numbers? ## Like actually all of them relation add from [1, 1] end ## is it really that simple?! (yes!) turns into: N+|#[1|1#]} (Try it Online!) Isn't it snazzy? You can finally do well at golf without needing to smash your head on a weird looking keyboard! More modifiers Notice that scan-fix: in the collatz example? That's a modifier! "But version 2 already has modifiers, you said so yourself!" you say. Well version 2 had a very limited selection of modifiers, as they were more experimental at the time. Now, there's like 20 modifiers, all waiting to be used. Plus, they've gotten a little upgrade, in the form of Arity grouping Ever wanted to use jelly but realised it's way too hard? (who even sells hard jelly anyway? I thought the whole point was that it was soft and jiggly.) Well forget about using Ohm, because Vyxal 3 just got its own element grouping based on arity system. Plus it's much easier to understand! Say you have a nilad followed by a monad (basically a constant followed by something that takes a single thing). Usually this sequence would be treated as two elements. However, it's obvious that the monad is going to operate directly on the nilad, as it's the same as writing monad(nilad). So instead of treating it as 2 things, it treats it as a single thing. This is useful for modifiers because you might have a situation where you can squeeze an extra element into what a modifier modifies where you wouldn't have been able to do so previously. Variable Buffs But that's all esolang specific stuff. If you've never used a golfing language before, you're probably wondering what all of that element stuff means. Well I've got prac-lang material for you that I think you'll love. To define a variable: value #=name (sbcs) value := name (literate) And to retrieve its value: #$name (sbcs) $name (literate) "that's all good and well, but that's the same capabilities of version 2, how is that a buff?" Because a) augmented variable assignment: function #>name (SBCS) function :> name (literate) (works with any element or function, not just the regular +=, -=, *= etc you're probably used to seeing) And b) variable unpacking #:[x|y|z] (SBCS) :=[x|y|z] (literate) Variable unpacking can support any number of depths (e.g. [a|b|[[[[c| d]]]|e]|f]). Think of it like tuple unpacking in python but a little more powerful. Whole New Built-in Set The entire list of elements has been re-worked to remove some unnecessary overloads in version 2, and add some sorely missing elements that would make golfing a lot easier and shorter. For a more specific overview of Vyxal 3, check out the tour How do I run Vyxal 3? There's a few methods: 1. Head over to the online interpreter (this is the easiest). 2. Download one of the release jar files, and run using java -jar vyxal-jar 3. Download one of the executables for your platform and run as you would usually run an executable. 4. Download the repository source and run with ./mill jvm.run. See Building.md for more details. Contributing For instructions on how to set up a development environment and an overview of how the interpreter works, see the contributing folder. Links * Repository * Online Interpreter * Tutorial * Main Chat Room (SE Chat) * Vycord (Discord) * Elements * Vyxapedia Enjoy the cookies. About A code-golfing language experience that has aspects of traditional programming languages - terse, elegant, readable. vyxal.github.io/ Topics python programming-language esoteric-language code-golf readability arrays experience esolang golfing-language esoteric-programming-language stack-based golfing conciseness stack-based-language vyxal powered-by-copilot array-language fractional-bytes Resources Readme License MIT license Activity Custom properties Stars 233 stars Watchers 6 watching Forks 31 forks Report repository Releases 138 Version 3.4.1 Latest Feb 10, 2024 + 137 releases Contributors 31 * @lyxal * @ysthakur * @chunkybanana * @AMiller42 * @pre-commit-ci[bot] * @cgccuser * @nayakrujul * @RubenVerg * @pxeger * @scala-steward * @Steffan153 * @GingerIndustries * @pacmanboss256 * @github-actions[bot] + 17 contributors Languages * Scala 89.9% * JavaScript 5.7% * Python 3.0% * Other 1.4% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.