Please dont take this seriously guys its just a dumb meme I haven’t written a single line of code in half of these languages

    • Da_Boom@iusearchlinux.fyi
      link
      fedilink
      English
      arrow-up
      25
      ·
      9 months ago

      Ever wanted to be somewhere inbetween java and JavaScript?

      Yeah, that’s Groovy. Only it’s the wrong groove

    • mindbleach@sh.itjust.works
      link
      fedilink
      arrow-up
      15
      ·
      9 months ago

      JS is ironic punishment as a programming language. It’s fun to screw around in! And then you have to use it for stuff, and pain ensues.

    • ALostInquirer@lemm.ee
      link
      fedilink
      arrow-up
      6
      ·
      9 months ago

      What makes JavaScript so widely disliked? I know very little of it, and in skimming different stuff I think I’ve seen like a million different frameworks for it, so is that a part of it?

      • smileyhead@discuss.tchncs.de
        link
        fedilink
        arrow-up
        15
        ·
        9 months ago

        It was mostly made for simple scripts to embed on a website for animations and handling updates without refreshing whole page. Not to make a full portable client (browser) side app.
        Hating JavaScript is mostly a meme, it’s just a programming language. But its very loose syntax, fact it’s often someone’s first programming language to learn and how most programs written in it nowadays are a hack build on top of a hack on top a hack makes this language easy to laugh at.

  • bort@sopuli.xyz
    link
    fedilink
    arrow-up
    110
    ·
    edit-2
    9 months ago

    Latex: Problem --> \def\please@#1#2#3#4{\e@kill#2#3{\me#1}#4@now} -->

    • renzev@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      62
      ·
      9 months ago

      Accurate. LaTeX is great, it makes you feel like you have superpowers compared to “office suite”-style software. But every once in a while you just run into some bullshit that feels like it’s stuck in 1985 and it completely breaks your flow. I remember wanting to make a longtable where text in the “date” column would be rotated by 90 degrees to leave more horizontal room for the other columns. It took me two rotateboxes, a phantom, a vspace, a hspace and 40 minutes of my life to get the alignment right. Would probably have taken a duckduckgo search and three clicks in Libreoffice.

      • voxel@sopuli.xyz
        link
        fedilink
        arrow-up
        10
        ·
        9 months ago

        btw what do you think about typst?
        i only used it for simple stuff so far but it seems pretty fun and easy to use

        • renzev@lemmy.worldOP
          link
          fedilink
          arrow-up
          8
          ·
          9 months ago

          Never heard of it before, but might give it a try at some point. From the website, it seems like something halfway in between LaTeX and Markdown? Sounds exactly like what I need at times, tbh.

        • PixelProf@lemmy.ca
          link
          fedilink
          arrow-up
          4
          ·
          9 months ago

          My two cents, after years of Markdown (and md to PDF solutions) and LaTeX and a full two years of trying to commit to bashing my head against Word for work purposes, I’m really enjoying Typst. It didn’t take long to convert my themes, having docs I can import which are basically just variables to share across documents in a folder has been really helpful. Haven’t gone too deep into it but I’m excited to give it a deeper test run over the next little bit.

      • tetris11@lemmy.ml
        link
        fedilink
        arrow-up
        5
        ·
        9 months ago

        I still have no idea how to exit the build process. It tells I need to type H or \end but it also just lies. I find the easiest way is to invoke Ctrl-Z and then kill the background process, and the younglings children

        • renzev@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          2
          ·
          8 months ago

          Yeah, what the hell is up with that? I always just echo | pdflatex to make it shut up and exit on error. Maybe one day I’ll learn how to actually use that interactive compilation thing, but not today lol.

            • renzev@lemmy.worldOP
              link
              fedilink
              arrow-up
              2
              ·
              8 months ago

              So there are many different commands that compile LaTeX, right? pdflatex, pdftex, latexmk, etc. But they all do that thing where they ask for your input as soon as they encounter an error, right? Well, if you just pipe an empty echo command to them, it notices that stdin has reached end-of-file, and gives up trying to ask the user for input, and just exits on first error. So instead of pdflatex mydocument.tex, you can do echo | pdflatex mydocument.tex and it won’t ask you for input if it sees an error, it’ll just exit. There’s probably a “proper” way to achieve the same behaviour, but I can’t be arsed to read the docs.

              Speaking of stupid TeX hacks, at one point I had a script called latex_compile_and_install_packages_until_it_works.sh. It’s essentially a loop that repeatedly tries to compile a document, searches the output of the compiler for anything that looks like a missing package error, and pipes it to sudo tlmgr install. The “fuck it” of package management, arbitrary code execution exploit included!

              (Sorry for the screenshot, I lost the original script in text form, probably for the better)

              • tetris11@lemmy.ml
                link
                fedilink
                arrow-up
                2
                ·
                8 months ago

                Haha that’s brilliant! I have a similar script for Conda, where it tries to install R packages by first looking in bioconductor and then trying the rejects through conda-forge, and then the rejects from that are compiled from source or just outright rejected.

                I would have thought you would have needed a (while :; do echo; done) | pdflatex or a yes "\end" | pdflatex, i.e. something that repeatedly generates output. It’s actually quite elegant that pdflatex checks if stdin is already EOF

      • Odiousmachine@feddit.de
        link
        fedilink
        arrow-up
        2
        ·
        8 months ago

        Funnily enough I had a similar problem but I wanted text instead of a date. In the end I used a solution similar to yours and adjusted each cell entry manually for hours. Feels like there should be a lot simpler solution for this problem in LaTeX. Glad I don’t need to use it anymore…

        • renzev@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          8 months ago

          u/vox@sopuli.xyz suggested Typst as an alternative to TeX. I gave it a try, and I’m loving it so far. It even has built-in support for the rotated text thing https://typst.app/docs/reference/model/table . I’ve only used it for notes/homework so far, but I’m looking forward to seeing how it fares for more serious typesetting tasks.

  • xlash123@sh.itjust.works
    link
    fedilink
    arrow-up
    111
    arrow-down
    2
    ·
    9 months ago

    PHP: Problem -> real_solution_for_real_this_time() (real_solution_i_swear() is unsafe and deprecated)

    • xmunk@sh.itjust.works
      link
      fedilink
      arrow-up
      27
      arrow-down
      2
      ·
      9 months ago

      Eh, your statement is accurate for PHP4 and still relevant up to PHP5.2… We’re on PHP8.3 now and PHP8.0 is now out of security updates. I know it’s trend to hate on PHP but you’ve got to at least update your materials to var-vars… it’s like knocking node for having substr() and substring().

      • bort@sopuli.xyz
        link
        fedilink
        arrow-up
        11
        arrow-down
        1
        ·
        9 months ago

        trend to hate on PHP

        2 years ago I tried to give a drupal project the ci/cd makeover (i.e. containers, test-deployments, reproducable builds, etc)… that’s when my hate was freshly renewed.

        At this point I think it’s ok to let a dead language die and move on to something else (anything else, really)

  • Swedneck@discuss.tchncs.de
    link
    fedilink
    arrow-up
    106
    arrow-down
    2
    ·
    9 months ago

    missing the stage of C where it’s all incomprehensible bitfucking with comments like “this works, i do not know why it works, do not touch this”

      • PlexSheep@feddit.de
        link
        fedilink
        arrow-up
        18
        ·
        9 months ago

        That one is not that complicated if you don’t think about the math. It’s basically just if we interpret the float as int and add a magic number we have a good estimation.

        From what I remember at least, it’s been a little while since I implemented it.

        • mindbleach@sh.itjust.works
          link
          fedilink
          arrow-up
          11
          ·
          9 months ago

          IIRC also relying on how floating-point is basically scientific notation and the most-significant bits are the exponent.

          And most importantly, relying on how a sloppy answer works just fine. The most important skill in game development is cheating.

          • sheepishly@kbin.social
            link
            fedilink
            arrow-up
            6
            ·
            9 months ago

            The most important skill in game development is cheating.

            Makes me feel better about my own game dev attempts lmao.

        • sheepishly@kbin.social
          link
          fedilink
          arrow-up
          8
          ·
          9 months ago

          I was more thinking of the comments which are pretty much exactly what you said (“incomprehensible bit hacks” followed by “what the FUCK?”)

      • dan@upvote.au
        link
        fedilink
        arrow-up
        16
        ·
        9 months ago

        CSS isn’t as bad these days if you use Flexbox. Debugging floats and absolute/relative positioning was a nightmare in comparison.

        • MonkderZweite@feddit.ch
          link
          fedilink
          arrow-up
          3
          ·
          edit-2
          9 months ago

          On the other hand, it made webpages way less flexible.

          Like yesterday (i have the browser not in fullscreen, for reasons) on my 16" fullhd notebook, webdev couldn’t imagine that someone would use his site in a ~1000px browser window, sidebars left and right, the main content about 20 characters wide squeezed inbetween. So i pressed f12 and deleted the sidebars. But the content was still 20em wide, because of flexbox.

  • neidu2@feddit.nl
    link
    fedilink
    arrow-up
    92
    ·
    edit-2
    9 months ago

    Perl:

    Problem -> $ @ % <=> <> =()= => ; qw() ])} select(undef, undef, undef, 0.25) =~ tr/.?\w\sREg3xfr0mhe|l/foo/g; $|++ &homebrewedFunction(%$ref, $_ , @_ ) -> solution

    Source: I mainly code in perl. I like it, but I’ll be the first to admit that it’s not a beautiful language.

    I was about to make an entry for lisp here, but I don’t have enough parentheses to draw the path to the solution.

    • mindbleach@sh.itjust.works
      link
      fedilink
      arrow-up
      25
      arrow-down
      1
      ·
      9 months ago

      Perl is write-only code. Larry Wall raised a monkey’s paw and asked for a language that works the way programmers want. So most Perl is the first thing someone tried, unfiltered by rigid syntax putting your thoughts in order, compiler warnings bringing side effects to mind, or even names forcing you to decide what a variable is. An uncommented Perl script is raw brain patterns displayed as ASCII.

      Thank god it runs like crap. We’d be in so much trouble if it was fast. Optimized C isn’t exactly gorgeous, but any project that compiles proves someone looked at the code more than once.

      • evranch@lemmy.ca
        link
        fedilink
        arrow-up
        11
        ·
        9 months ago

        I love the term “write-only code”, it’s perfect. I used to love Perl as it felt like it flowed straight from my brain into the keyboard. What a free and magical language.

        So it turned out I had ADHD. Took meds, went back to C/++ with renewed appreciation, haven’t touched Perl since as it horrifies me to look at it. What a nightmare of dangling references and questionable typing. Any language that allows you to cast a string to a function and call it really needs to sit down and think about what it’s doing.

        • mindbleach@sh.itjust.works
          link
          fedilink
          arrow-up
          6
          ·
          9 months ago

          So it turned out I had ADHD.

          Genuine LOL. Yeah… yeah, that’s Perl in a nutshell. Creating Perl: ‘why aren’t all languages like this?!’ Editing Perl: ‘oh.’

          • evranch@lemmy.ca
            link
            fedilink
            arrow-up
            1
            ·
            9 months ago

            As I said,

            C/++ with renewed appreciation

            No such thing as eval in non-interpreted languages. Unless you’re crazy enough to invoke the compiler and exec() the result.

            I used eval too in my Perl days which is why I specifically called it out. IMO any time you see eval used there should be another, more proper way to do it.

            • CapeWearingAeroplane@sopuli.xyz
              link
              fedilink
              arrow-up
              1
              ·
              edit-2
              9 months ago

              I was joking, and definitely agree with you. I don’t think I’ve used eval since my first programming course in uni.

              Edit: Except for monkey hacks for laughs of course.

    • palordrolap@kbin.social
      link
      fedilink
      arrow-up
      11
      ·
      edit-2
      9 months ago

      Over the top tone: “Pretty sure that won’t compile. $EVAL_ERROR modulo what you get from the filehandle called = isn’t an lvalue that can be put through the Goatse operator that I’m aware of.”

      But seriously(?), I’m almost certain that’s not how that would be parsed. = isn’t a valid bareword, so Perl would choke on the spaceship operator not being a term… I think.

      After testing… It’s worse. I think it’s parsing &lt;> as the glob operator and = as a filespec.

      For those who don’t know Perl:

      Because of its appearance, &lt;=> really is called the spaceship operator (at least, when it can be parsed as an operator and not whatever happened above).

      =()= by comparison has unofficially been called Goatse. If you don’t know what Goatse is, find out at your own risk. If you do know, you can see why this particular pseudo-operator was given that name.

      And if you’re still reading, =()= is a pseudo-operator because it’s not actually parsed as part of the syntax. It’s literally an assignment operator = followed by an empty list () followed by another assignment operator =, providing list context to the outside of the equals signs that wouldn’t otherwise be there.

      [Why are you still still reading?] Context is important in Perl. If a function returns a list of values (which is something Perl functions can do) and you try to store the result in a scalar variable, replacing the usual = with =()= will store the number of elements returned rather than the last element of the list.

      • neidu2@feddit.nl
        link
        fedilink
        arrow-up
        8
        ·
        edit-2
        9 months ago

        It’s not supposed to be compilable. It’s more intended as a list of weird looking (but valid and useful) perl stuff.

        As for the goatse operator, I’ve mostly used it for counting amount of regex matches.

        Oh, and I forgot the diamond operator. Added.

    • msage@programming.dev
      link
      fedilink
      arrow-up
      11
      arrow-down
      1
      ·
      9 months ago

      I was hired twice to write Perl, both times switched my department to something else after a few years.

      Perl is good for command line processing, and absolutely god awful read-only magic hacks. Nothing else.

    • I Cast Fist@programming.dev
      link
      fedilink
      arrow-up
      3
      ·
      9 months ago

      I personally never understood how anyone could find Perl appealing or even “good” to program in, probably because I could never understand wtf the code was meant to do

    • stevedidwhat_infosec@infosec.pub
      link
      fedilink
      arrow-up
      26
      ·
      9 months ago

      Idk I still like writing my own stuff purely pythonic when I can. Pythons syntax is the most “fun” and “natural” for me so I find it fun. Like doin a sudoku puzzle

        • stevedidwhat_infosec@infosec.pub
          link
          fedilink
          arrow-up
          11
          ·
          9 months ago

          This is the best way I’ve ever heard this described lol. You get used to it so fast, it’s really simple. Just indent your code like you’re supposed to 🤷🏻‍♂️

          • frezik@midwest.social
            link
            fedilink
            arrow-up
            5
            ·
            9 months ago

            The problem is that Python programmers tend to think the job of readability is done just by indentation. This is wrong, and it shows in all sorts of readability issues. Many of which are in official docs.

            • Fushuan [he/him]@lemm.ee
              link
              fedilink
              English
              arrow-up
              5
              ·
              edit-2
              9 months ago

              Same could be said about people that don’t think that indentation is not important for readability. Both are important, but if you really care about it defining an auto formatter and customising it for whatever consensus the team has is the only way to operate anyway.

              • frezik@midwest.social
                link
                fedilink
                arrow-up
                5
                ·
                9 months ago

                Same could be said about people that don’t think that indentation is not important for readability.

                You should really avoid double negatives. What you actually said was "Same could be said about people that think that indentation is important for readability“, which makes no sense in the context of the rest of your post.

                And I’m not saying this just to be a dick about grammar. I mean, obviously I am, but not just that. If your English isn’t readable, then I don’t trust your Python, either.

                • Fushuan [he/him]@lemm.ee
                  link
                  fedilink
                  English
                  arrow-up
                  2
                  ·
                  9 months ago

                  My bad, I deleted part of the comment to rewrite it and forgot part of the original. And as you probably guessed I meant for it to be a single negative.

                  Good thing this is a casual forum and not a work environment where I would reread my code with care haha. There’s a reason linters exist in code editors, it’s for people like me.

            • stevedidwhat_infosec@infosec.pub
              link
              fedilink
              arrow-up
              3
              ·
              edit-2
              9 months ago

              Yeah pythonistas just group bad code into “non-pythonic”

              It’s basically a credo if you aren’t familiar but Python is preeeetty explicit about formatting recommendations and whatnot so there’s really no excuse for poor Python practices/non-pythonic code

              • frezik@midwest.social
                link
                fedilink
                arrow-up
                1
                ·
                9 months ago

                Then what the hell is this shit?

                class&nbsp;argparse.ArgumentParser(prog=None,&nbsp;usage=None,&nbsp;description=None,&nbsp;epilog=None,&nbsp;parents=[],&nbsp;formatter_class=argparse.HelpFormatter,&nbsp;prefix_chars='-',&nbsp;fromfile_prefix_chars=None,&nbsp;argument_default=None,&nbsp;conflict_handler='error',&nbsp;add_help=True,&nbsp;allow_abbrev=True,&nbsp;exit_on_error=True)
                

                This is a mess. None of this ascii vomit is useful or enlightening.

                I got it from the argparse docs, which is a core module. But really, this is just the way Python docs are generated. Every class doc has an ascii vomit like this at the top, and my eyes hurt every time I see it.

          • Da_Boom@iusearchlinux.fyi
            link
            fedilink
            English
            arrow-up
            5
            ·
            9 months ago

            At least untill someone sneaks a tab in your spaced code, and you don’t know how to make your code editor show the difference, or it doesn’t support showing the difference.

            • Fushuan [he/him]@lemm.ee
              link
              fedilink
              English
              arrow-up
              8
              arrow-down
              1
              ·
              edit-2
              9 months ago

              That sound like a you problem really, detecting this is quite simple because any editor worth their salt will literally lint you an issue saying that tabs and spaces are mixed and the thing literally won’t be interpreted. If your editor can’t show white spaces, chances are you are one google question away from discovering that it actually can do that easily.

              The more I code the less I mind the tool and the more I hate the ones using it wrong.

            • CapeWearingAeroplane@sopuli.xyz
              link
              fedilink
              arrow-up
              1
              ·
              edit-2
              9 months ago

              That will give you an extremely clear error when you run the code. Also, any IDE worth its salt should be able to fix that for you.

              Even the error message you get from C++ for missing a semicolon is harder to understand and fix than this.

          • mindbleach@sh.itjust.works
            link
            fedilink
            arrow-up
            3
            ·
            9 months ago

            Does “like you’re supposed to” mean with tabs, or with spaces?

            Because if someone else disagrees you are not going to have fun with their code.

            • Fushuan [he/him]@lemm.ee
              link
              fedilink
              English
              arrow-up
              2
              arrow-down
              3
              ·
              9 months ago

              Who TF codes with tabs? All the editors I know input spaces when pressing tab anyway.

              I would not have fun in any language if someone inputted actual tabs and their tab size was different from mine. Chances are my linter would have told me, regardless of language used!

              I have worked with OS projects in C and not even those were tab formatted.

              • mindbleach@sh.itjust.works
                link
                fedilink
                arrow-up
                5
                ·
                edit-2
                9 months ago

                Why the fuck does anyone use spaces when tabs mean everyone uses the same tab size as you? That’s what they’re for!

                • Fushuan [he/him]@lemm.ee
                  link
                  fedilink
                  English
                  arrow-up
                  2
                  ·
                  9 months ago

                  Yeah, okay. Tell that to every code editor’s defaults and every open source projects source code that I have read.

                  Encountering tab indented files is like encountering ANSI encoded files or /r/n newline’d files. It’s not how it should be done. Sorry.

                  Spaces are there to ensure that everyone sees the same, tabs have issues with internal indentation of function declaration and the sort. Yeah it indents like correctly, but then you do need spaces to indent vertically called functions correctly and it always ends up being a cluster fuck. Spaces are a standard for a reason.

        • flashgnash@lemm.ee
          link
          fedilink
          arrow-up
          3
          ·
          9 months ago

          Python whitespace is child’s play compared to yaml, which I have the displeasure of having to interact with on the regular

          • bob_lemon@feddit.de
            link
            fedilink
            arrow-up
            2
            ·
            9 months ago

            Yaml is honestly just a terrible terrible format that is neither good for humans nor good for machines.

        • meteokr@community.adiquaints.moe
          link
          fedilink
          arrow-up
          3
          arrow-down
          1
          ·
          9 months ago

          I agree, whether or not it is good or bad, or readability concerns over nested braces. I fundamentally hate invisible delimiters. If it matters, make it visible. We have so many ascii characters, why not just borrow a few?

            • meteokr@community.adiquaints.moe
              link
              fedilink
              arrow-up
              1
              ·
              9 months ago

              Whitespace is not visible. It is the absence of something that is visible. Whitespace should be used for the comfort of the reader, not to determine scope. Are you proposing that a " " character is more visible than “{}”? The fact I must quote it to make what I am discussing even apparent speaks for itself. I’m not arguing that indentation is bad, far from it. In fact, the flexibility of using indentation purely for readability, makes code more readable.

    • huginn@feddit.it
      link
      fedilink
      arrow-up
      4
      ·
      9 months ago

      That’s true of basically all problems you deal with in programming. Unless you’re truly bleeding edge you’re working on a solved problem. It’ll be novel enough that you can’t out-of-the-box it but you can definitely use the tools and paths everyone else has put together.

      Part of why I like kotlin as a language. It has so many tools built right in.

      • renzev@lemmy.worldOP
        link
        fedilink
        English
        arrow-up
        13
        ·
        9 months ago

        I was mainly thinking about how so many Rust projects advertise very loudly that they’re written in Rust. Like, they would have -rs in the name, or “in Rust” as part of their one-line description. You rarely see this kind of enthusiasms for the the language in other languages. Not a bad thing by the way! And also there’s the “rewrite it in rust” meme, where people seem to take perfectly functional projects and port them to Rust (again, not a bad thing! Strength in diversity!)

          • CapeWearingAeroplane@sopuli.xyz
            link
            fedilink
            arrow-up
            1
            ·
            edit-2
            9 months ago

            For Python I think there’s an actual point though: A lot of Python projects are user friendly wrappers for pre-compiled high-performance code. It makes sense to call something “py” to signal what the library is.

            • calcopiritus@lemmy.world
              link
              fedilink
              arrow-up
              1
              ·
              9 months ago

              Well, it’s the same in rust, that’s why I agree more with the first interpretation.

              There is an existing solution in C/C++, just make some binding and call it *.rs

              Both python and rust use py and rs in the same way, to signal that it’s the python/rust version of that library.

              Of course, there are exceptions, but that’s what usually happens.

  • affiliate@lemmy.world
    link
    fedilink
    arrow-up
    48
    ·
    9 months ago

    i feel like javascript could also be

    Problem -> solution -> 3 days pass -> all dependencies had breaking changes made -> problem

  • NocturnalMorning@lemmy.world
    link
    fedilink
    arrow-up
    43
    arrow-down
    1
    ·
    9 months ago

    Python one is accurate. Most of our problems are solved by importing a library and writing the line, librarySolver.importedFunction.SolveMyProblem()

    def main(): Print(‘thanks librarySolver’)

    • SpeakinTelnet@sh.itjust.works
      link
      fedilink
      arrow-up
      15
      arrow-down
      1
      ·
      9 months ago

      Advent of code 2023 day 24 part 2. Z3 solver saved the day on that one.

      Now I have PTSD every time I see an hailstorm.

      • ornery_chemist@mander.xyz
        link
        fedilink
        arrow-up
        6
        ·
        edit-2
        8 months ago

        So many solver solutions that day, either Z3 or Gauss-Jordan lol. I got a little obsessed about doing it without solvers or (god forbid) manually solving the system and eventually found a relatively simple way to find the intersection with just lines and planes:

        1. Translate all hailstones and their velocities to a reference frame in which one stone is stationary at 0,0,0 (origin).
        2. Take another arbitrary hailstone (A) and cross its (rereferenced) velocity and position vectors. This gives the normal vector of a plane containing the origin and the trajectory of A, both of which the thrown stone must intersect. So, the trajectory of the thrown stone lies in that plane somewhere.
        3. Take two more arbitrary hailstones B and C and find the points and times that they intersect the plane. The thrown stone must strike B and C at those points, so those points are coordinates on the line representing the thrown stone. The velocity of the thrown stone is calculated by dividing the displacement between the two points by the difference of the time points of the intersections.
        4. Use the velocity of the thrown stone and the time and position info the intersection of B or C to determine the position of the thrown stone at t = 0
        5. Translate that position and velocity back to the original reference frame.

        It’s a suboptimal solution in that it uses 4 hailstones instead of the theoretical minimum of 3, but was a lot easier to wrap my head around. Incidentally, it is not too hard to adapt the above algorithm to not need C (i.e., to use only 3 hailstones) by using line intersections. Such a solution is not much more complicated than what I gave and still has a simple geometric interpretation, but I’ll leave that as an exercise for the reader :)

        • SpeakinTelnet@sh.itjust.works
          link
          fedilink
          arrow-up
          2
          ·
          9 months ago

          That is a great explanation of how you solved it, thanks! I should go back to it and conquer that puzzle properly without a solver. Or at least try.