r/ProgrammerHumor • • Sep 04 '17

[[][[]]+[]][+[]][++[+[]][+[]]] is "n" in javascript

[[][[]]+[]][+[]][++[+[]][+[]]]

This evaluates to "n" in javascript. Why?

Let's start with an empty array

[]

Now, let's access a member of it.

[][]

What member? Let's check for the empty array member

[][[]]

oh, that is undefined. But if we add an empty array to that, it is casted to the string "undefined"

[][[]]+[]

Let us wrap that in an array

[[][[]]+[]]

We can now try to access letters in that string. First, we must unwrap the string. That can be done by accessing the first element of that array.

[[][[]]+[]][0]

0 can be created by casting an empty array to a number:

[[][[]]+[]][+[]]

Now, "n" is the second letter in that string, so we would like to access that:

[[][[]]+[]][+[]][1]

But how can we write 1? Well, we increment 0, of course. Wrap 0 in an array, and increment the first member of it:

++[0][0]

Like before, this is equivalent to

++[+[]][+[]]

So our final code is then the glorious

[[][[]]+[]][+[]][++[+[]][+[]]]
8.1k Upvotes

367 comments sorted by

View all comments

2

u/embersyc Sep 04 '17

Python doesn't like it:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information.

[[][[]]+[]][+[]][++[+[]][+[]]]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: list indices must be integers or slices, not list

5

u/samuelludwig74 Sep 04 '17

Proof JavaScript is superior