[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)