• nebulous1 3 hours ago

    Here is the line, it is written in K. K is a language created by the same person (Arthur Whitney) based on APL and Scheme.

      x(,/{@[x;y;]'(!10)^x*|/p[;y]=p,:,3/:-3!p:!9 9}')/&~*x
    • pjot 2 hours ago

        > Advocates of the language emphasize its speed, facility in handling arrays, and expressive syntax.
      
      Indeed.

      https://en.m.wikipedia.org/wiki/K_(programming_language)

      • brookst 2 hours ago

        “Expressive” = like two cats fought while standing on the keyboard

        • xwolfi an hour ago

          I work with it daily in a bank, and I couldnt find a better way to express it. Many colleagues throwing their keyboard in despair at this stupid impossible to remember syntax.

          • rak1507 an hour ago

            There are a lot of things in various programming languages which are hard to remember, but k and array languages have such a small surface area, not being able to remember it while working with it daily amounts to learned helplessness.

            (source: mostly amateur k programmer, also worked with it in a bank, find it vastly easier to read/write/remember than most mainstream languages)

      • Isamu 2 hours ago

        Not knowing K, am I correct in assuming this is a backtracking brute force solver?

        • o11c 2 hours ago

          From the linked page (and the one linked beyond that), it's a breadth-first search actually. Keep a list of possible puzzle states at all times, pick a blank cell (theoretically arbitrary, but in practice intelligently for performance), add copies of the state with each possibility for that state added.

          • BobbyTables2 an hour ago

            That sounds like 100+ lines in python or similar languages…

            • otteromkram 30 minutes ago

              It probably isn't. At least, not for Python.

        • make3 32 minutes ago

          "one line in your custom language" is not one line at all lol

          • Spivak 21 minutes ago

            To be fair K is a real language that's used by more than just him.

            Why array languages seem to gravitate to symbol soup that makes regex blush I'll never know.

          • asah 24 minutes ago

            What baud is that? /s

            • genewitch 7 minutes ago

              mismatched, whatever it is, that's for sure. It's not quite line noise, so maybe it's just the wrong stop bit?

          • shahbazac 2 hours ago

            I’ve often wondered about languages like APL/k, are the programmers actually able to think about problems more efficiently?

            • Jorge1o1 2 hours ago

              As a kdb+/Q programmer I would say it depends on the type of problem.

              For example, when working with arrays of data it certainly is easier to think and write “avg a+b” to add two arrays together and then take the average.

              In a non-array programming language you would probably first need to do some bounds checking, then a big for loop, a temporary variable to hold the sum and the count as you loop over the two arrays, etc.

              Probably the difference between like 6ish lines of code in some language like C versus the 6 characters above in Q.

              But every language has features that help you reason about certain types of problems better. Functional languages with algebraic data types and pattern matching (think OCaml or F#) are nicer than switch statements or big if-else-if statements. Languages with built-in syntactic sugar like async/await are better at dealing with concurrency, etc.

              • lll-o-lll 2 hours ago

                Which is why C# is the giant ever increasing bag of tricks that it is (unkind people might say bloat…) ;-) Personally, I’m all for this; let me express the problem in whatever way is most natural.

                There are limits, of course, and it’s not without downsides. Still, if I have to code in something all day, I’d like that “something” be as expressive as possible.

                • sudosysgen an hour ago

                  Well no, not in a non-array programming language. In any language that has a semi-decent type/object system and some kind of functional programming support, `avg a+b` would just be `avg(a, b)`, which is not any easier or harder, with an array type defined somewhere. Once you make your basic array operations (Which they have to be made in q anyways, just in the stdlib), you can compose them just like you would in q, and get the same results. All of the bounds checking and for-loops is unnecessary, all you really need are a few HKTs that do fancy maps and reduces, which the most popular languages already have.

                  A very real example of this is Julia. Julia is not really an array-oriented programming language, it's a general language with a strong type system and decent functional programming facilities, with some syntactic sugar that makes it look like it's a bit array oriented. You could write any Q/k program in Julia with the same complexity and it would not be any more complex. For a decently complex program Julia will be faster, and in every case it will be easier to modify and read and not any harder to write.

                  • rak1507 an hour ago

                    I don't know what you mean by the q array operations being defined in the standard library. Yes there are things defined in .q, but they're normally thin wrappers over k which has array operations built in.

                    • otteromkram 24 minutes ago

                      Why would it be avg(a, b)?

                      What if I want to take the average difference of two arrays?

                  • giraffe_lady 2 hours ago

                    Hillel Wayne writes about it on his newsletter every once in a while. He's convinced me that he does in fact think through some problems better in array languages but I still can't really conceive of what that experience is like.

                  • cduzz an hour ago

                    I'll sometimes gauge code complexity by comparing the number of lines of code against the output of

                      tar -cf - . | gzip | base64 | wc -l
                    
                    IE "how much does it compress?"

                    Looking at APL -- I'm reminded of what happens if I accidentally send the gzipped output to my tty...

                    I'm impressed that there's anyone who can follow along (can you find the bug?) to code like

                    p←{(↑⍵)∘{(⍺∨.=⍵)/⍳n×n∘}¨,⍵},(n*÷2){⍵,⍺⊥⌊⍵÷⍺}'⍳n n←⍴⍵

                    It really feels like compressed binary data where everyone's got a copy of the dictionary already...

                    • bryancoxwell 41 minutes ago

                      Legitimately curious how APL programmers think about maintainability and readability. Is code just thoroughly commented or otherwise documented?

                      • rak1507 an hour ago

                        I'm not sure why it would be any more impressive or surprising than the billions of people who read and write in non English alphabets

                        • cduzz an hour ago

                          That's a really good point...

                          But -- (and forgive me if I'm totally wrong) -- this isn't just "non-english" but "non-phonetic" which is a smaller set of written languages, and the underlying language is ... math.... so understanding the underlying grammer itself relies on having decades of math education to really make it jive.

                          If this code is just a final result of "learn math for 2-3 decades, and spend years learning this specific programming language" -- my statement stands. Interacting with this kinda binary blob as a programming language is impressive. I think I read somewhere that seymour cray's wife knew he was working too hard when he started balancing the checkbook in hex...

                          • rak1507 an hour ago

                            The underlying language isn't really very mathematical, at most there's a bit of linear algebra in the primitives but that's it. You certainly don't need any sort of formal maths education to learn APL. There are about 50 or so new symbols, which is not a big ask, with any sort of focus the majority of the syntax etc can be learned very quickly. The "bugs" in your original code stand out very clearly because things like "∘}" don't make sense, ∘ being "dyadic" (infix).

                      • 29athrowaway 3 hours ago

                        There is a video about this.

                        https://www.youtube.com/watch?v=DmT80OseAGs

                        You can try the solution at https://tryapl.org/

                        • wileydragonfly 3 hours ago

                          Sudoku was always a meditative thing for me. It’s impossible not to win so long as you pay attention. Optimizing solutions seems contrary to the point to me.

                          • swatcoder 3 hours ago

                            Solvers are useful for confirming that a puzzle you've recieved or generated is solvable. The meditative process can really go sideways when there is no solution for you to stumble upon.

                            Puzzles in commercial collections don't usually have that problem, but those from other sources sometimes do.

                            Solvers also make for a nice craft exercise, as here. Simple but not trivial, you can approach them in a lot of different ways and thereby work through different techniques or constraints you mean to explore.

                            • UncleOxidant 3 hours ago

                              I guess I'm the opposite. After doing a couple of sudoku many years ago my thought was "Hey, I could just automate this" and started thinking of algorithms.

                              • gerdesj 2 hours ago

                                Meta: No need to DV a comment you don't like for no reason. Engage instead. Why not have a chat?

                                • swatcoder 2 hours ago

                                  Downvotes and upvotes work together to manage the visibility of posts that align with the community's tastes.

                                  While I myself found an opportunity to reply to the GP and didn't down vote them, their comment only engaged with the article in a shallow way and only then, seemingly, to just dismiss the concept of solver altogether.

                                  It wasn't a offensive comment, but it didn't really contribute to the site in the way many people digging into deep technical walkthroughs like this expect to see.

                                  Some downvotes weren't guaranteed, but they're not surprising and they're probably helping new readers stay engaged with more topical and technical alternatives.

                                  It's not the end of the world to get a few downvotes, and it's almost never personal. It certainly isn't here.

                                  • jksmith an hour ago

                                    Aside: Downvotes on HN can be an expression of age related, self-righteous sniper pique; Opinions on what contributes to a conversation can be all over the place and are entirely subject to biases, which can be interesting (I guess). Doesn't really matter, and Hail Satan anyway. Also "Q for Mortals" is an interesting book.

                                  • ben0x539 2 hours ago

                                    Wouldn't it be more productive/rewarding to instead engage with comments I do like?

                                    • otteromkram 16 minutes ago

                                      Only you can say what's best for you.

                                      If have to ask: What's rewarding about only having your viewpoint reinforced?

                                    • riiii 2 hours ago

                                      People are saturated with anger and frustration after doom scrolling. They engage with their pitchforks.

                                      • mcphage 20 minutes ago

                                        A few anonymous downvotes are what qualifies as pitchforks these days?

                                    • malux85 3 hours ago

                                      Optimising solutions is the meditative exercise for me.

                                      I enjoy running simulation after simulation after simulation, studying possible outcomes and optimising everything. Everyone is different :)

                                      • K0balt 2 hours ago

                                        I find that sodoku is not a math or even a logic puzzle, but rather an epistemology puzzle. Lots of how we know/how much we know, and if you get into speed with some failure tolerance through estimating probability it adds even more thought provoking rabbit holes.