

Sudoku solver in 1-line of CoffeeScript (with explanation) - pathikrit
https://gist.github.com/3863614
suggestions to make it shorter/cleaner welcome
======
lvh
Can we stop calling things like these 1-liners? Most languages can have
arbitrary programs reduced to one line. That doesn't mean it's legible or a
good idea. It's a _concise_ , possibly even elegant (although that's an
opinion) Sudoku solver in Coffeescript. Isn't that good enough?

------
kjp
This is not an one-liner by any means. By this definition the entire linux
kernel can probably be compressed into one very long line too.

~~~
beatgammit
The only sortof unique thing about coffee-script is the lack of semi-colons.
They just abused the comma operator though.

------
power
From a quick glance it looks to only check conflicts at the box level, not row
and column. This is the first CoffeeScript I've seen, it's nice and concise.

~~~
pathikrit
`g in [s[x][i], s[i][y], box i]` - the first 2 arguments check in row and
column level and third in box level

~~~
power
Thanks for clarifying. If you've the time, could you tell me how I should
read: non_conflicting = (g) -> ![0...9].some (i) -> g in [s[x][i], s[i][y],
box i]

~~~
pathikrit
[0...9].some (i) -> g in [s[x][i], s[i][y], box i] returns true iff it finds
some i in [0,9) such that given a guess g, g equals either s[x][i] or s[i][y]
or box i or in other words it finds a conflict in either a row or column or
box for g assuming it g is at s[x][y] The ! at the start negates it - so the
whole method non_conflicting returns true iff g does not conflict with any i.

If Arrays in JavaScript had an "all" reducer it could be written like this:

non_conflicting = (g) -> [0...9].all (i) -> g not in [s[x][i], s[i][y], box i]

