[HN Gopher] Split the States (2021)
       ___________________________________________________________________
        
       Split the States (2021)
        
       Author : tosh
       Score  : 50 points
       Date   : 2022-03-03 17:05 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | anonymous_they wrote:
       | Not sure if it's just me, but I'm getting really weird rendering
       | bugs when I visit this link.
       | 
       | Maybe GitHub's rendering of ipynb files?
        
       | jayspell wrote:
       | Is this just an exercise?
        
         | hirundo wrote:
         | It's a puzzle:
         | 
         | "Welcome to The Riddler. Every week, I offer up problems
         | related to the things we hold dear around here: math, logic and
         | probability."
        
       | onychomys wrote:
       | The accepted answer from 538 can be found here:
       | https://fivethirtyeight.com/features/can-you-bowl-three-stri...
        
       | biorach wrote:
       | I've read a lot of code. Peter Norvig's code operates at a
       | different level to anything else I've ever read.
       | 
       | And he's been doing this a long time. I've read part of the way
       | through "Paradigms of Artificial Intelligence Programming" which
       | is from 1991, and uses much the same approach as in the OP, but
       | with Common Lisp.
        
       | wodenokoto wrote:
       | I'm not sure I understand how the `border` variable works.
       | 
       | Sets in Python are really cool when you can master them, but I do
       | sometimes wonder if they are too clever, or just not evangelized
       | enough.
        
         | dec0dedab0de wrote:
         | when you pipe a set it's the same thing as calling union on
         | each one, it creates a new set and puts all the variables in
         | them:
         | 
         | so this:                 border = north | south | west | east
         | 
         | is the same thing as:                 border =
         | north.union(south, west, east)
         | 
         | which is also:                 border = set()       for
         | border_set in [north, south, west, east]:         for state in
         | border_set:           border.add(state)
         | 
         | it's just a new set with all the previous items in it. Since
         | it's a set there is no doubles. for example, WA is in north and
         | east, but only in border once, because there is no duplicates
         | in a set.
         | 
         | to do it with lists you would need to make sure there was no
         | doubles yourself. plus you wouldn't get the set operations
         | later on, and would need similar loops to check things.
         | border = []       for state in north + south + west + east:
         | if state not in border:           border.append(state)
         | 
         | Sets are great any time you need to work with groups of unique
         | things and see how they relate to each other. Since there is
         | only one of each state, this is perfect use for them.
         | 
         | edits throughout as I thought of other things.
        
           | wodenokoto wrote:
           | I've never thought of that operation as shell pipes, but
           | always as an "or" operator.
        
             | dec0dedab0de wrote:
             | I just call the character a pipe, It's actually a "bitwise
             | or". i think the reasoning is that it looks at each item in
             | the two sets being compared and returns it if it is in
             | either or both of the sets. Which functionally is the same
             | thing as creating a union.
             | 
             | I usually avoid using bitwise operators because they get
             | confusing, and the kind of stuff my team does rarely needs
             | them. In this case I would have used union.
             | 
             | edit: here are some of the docs
             | 
             | Bitwise operators:
             | https://wiki.python.org/moin/BitwiseOperators
             | 
             | and how they work with sets: https://docs.python.org/3.10/t
             | utorial/datastructures.html#se...
             | 
             | Plus the set docs have the methods with their corresponding
             | operator:
             | https://docs.python.org/3.10/library/stdtypes.html#set
             | 
             | I can see how it would be nice and concise, but I think the
             | methods are easier to understand.
        
         | williamdclt wrote:
         | If sets were a Python-only thing I'd say that it's too clever,
         | but it's a concept that appears in many other environments:
         | Typescript (unions), Datalog and other declarative logic
         | languages, Haskell (I think) and other functional languages...
         | 
         | So python is implementing an existing paradigm, not trying to
         | be clever inventing something new. I'm happy with that
        
           | dec0dedab0de wrote:
           | it's actually much older than that.
           | 
           | https://en.wikipedia.org/wiki/Set_theory
        
       | charleskinbote wrote:
       | This reminds me of balanced graph partitioning, where the graph
       | is planar and its the nodes that have weights instead of the
       | edges.
        
       | harperlee wrote:
       | I quite like the chirurgical, strategic feel of the exposition.
       | Denotes clear thinking, and/or multiple revisions.
       | 
       | When I work in some code I often spend too much time on reviewing
       | and enhancing code in this way, but mine being a side project all
       | that work (I'm not the best programmer by far) is either for
       | future me or for no one, and often I end up feeling that I lost
       | time for nothing.
       | 
       | But I like to spend time in making this kind of clean code
       | {shrug}.
        
         | adolph wrote:
         | chirurgical [ ki-rur'ji-k@l ] adj. Surgical. No longer in
         | technical use.
        
           | avnigo wrote:
           | It's from the Greek kheirourgia, compound word for hand-work,
           | which nowadays is synonymous to surgery.
           | 
           | https://en.wiktionary.org/wiki/%CF%87%CE%B5%CE%B9%CF%81%CE%B.
           | ..
        
           | rsrsrs86 wrote:
           | In Portuguese: Cirurgico
        
           | harperlee wrote:
           | Yeah, sorry, still used in spanish, my mother tongue. My bad!
        
             | jwkane wrote:
             | don't apologize for using a great word. :)
        
             | tosh wrote:
             | in German also "chirurgisch"
             | 
             | https://en.wiktionary.org/wiki/chirurgisch
        
             | govg wrote:
             | It's also used (at the very least) by the Indian Medical
             | education system to denote a higher degree in surgery,
             | called the M. Ch.
        
             | codetrotter wrote:
             | The Norwegian name for it is very similar. Kirurgisk :)
        
       | serverlessmom wrote:
       | wow nice solution, saw this on 538 and couldn't think of any
       | clever solution.
        
       | d_burfoot wrote:
       | I was really hoping this was a political manifesto, not a
       | programming puzzle
        
         | karolsputo wrote:
         | Me too! I was surprised at the title, fully expecting Norvig to
         | channel Michael Malice and talk about splitting the US.
        
       | [deleted]
        
       | [deleted]
        
       | jmclnx wrote:
       | The image cannot be dispalied. I wish github only allowed Open
       | Image Formats, but too late now since Microsoft owns them.
       | 
       | Lately I have been running into image/video files people at work
       | create on their MACs that cannot be viewed in Linux. I wonder if
       | that crap is carrying ofer into github.
        
         | enobrev wrote:
         | In this case, it's not a matter of image formats, but simply a
         | 404.
         | 
         | https://github.com/norvig/pytudes/raw/5e745c392772d150b41462...
         | 
         | Here's map4.png:
         | https://github.com/norvig/pytudes/blob/main/ipynb/map4.png
         | 
         | There doesn't seem to be a 5 or 6.
        
       ___________________________________________________________________
       (page generated 2022-03-03 23:00 UTC)