
You Can't JavaScript Under Pressure - jgv
http://toys.usvsth3m.com/javascript-under-pressure/
======
mikeash
Thanks for immediately playing audio without asking me first. I know everybody
just _loves_ it when web pages do that.

~~~
corresation
Because of your comment, HN will have a dozen "I am so disappointed in all of
you" posts in the coming week declaring how mean everyone here is, and how it
is no longer like it "once was".

I hope you are happy.

~~~
mikeash
I'd be happier if this page hadn't blasted music into my conference call.

~~~
tutuca
Your fault for not paying attention during a conference call...

~~~
mikeash
Yeah, because we never have conference calls where we have to be there but
don't really have to do anything besides listen for our name.

------
tomscott
Oh! Hello. This is my thing I made for usvsth3m.com. Hope y'all like it. HTML5
Webworkers made it possible - sandboxing user-submitted JavaScript so an
accidental while(1) or document.write can't kill everything.

Do have a look at the source code. Oh, and try turning up your speakers and
typing in the Konami code...

~~~
JosephRedfern
If you alert() something inside an infinite loop it doesn't seem to be able to
detect it (nor does it show an alert box!)

~~~
Demiurge
Nothing like figuring out another way to kill your browser :)

------
peeters
Fun distraction. For me it was:

30% figuring out the answer, 20% not having my editor shortcuts available, 50%
figuring out how to check if a value is a certain type.

Am I the only one that gives their functions preconditions that the input is
good? To me, throwing up when you're passed a non-number to a sum method is
correct behavior.

~~~
dclowd9901
TIL there is no typeof === 'array'. -_-

~~~
rhengles

        [] instanceof Array; // returns true

~~~
bentruyman
However this fails on "Array-like" objects like NodeLists.

------
ryanthejuggler
Could there be a histogram at the end that shows distribution of finishing
times? Or at least a leaderboard... I did pretty well [obviously ;)] but I'd
like to see where my time falls in relationship to others.

I've confirmed that I can, in fact, code under pressure, but to what degree?

Other than that, fantastically fun game. My only regret is that it's a one-
time game by nature, since obviously the second time around you'd simply be
remembering what you did the first time instead of creating it.

~~~
Aco-
A lot of people posted their results to twitter, you can get an idea of where
you fall in avg by giving this a glance over:

[https://twitter.com/search?q=I%20completed%20%22You%20Can't%...](https://twitter.com/search?q=I%20completed%20%22You%20Can't%20JavaScript%20Under%20Pressure%22&src=typd)

------
cheshire137
The sudden music/talking that started was annoying and caused me to close the
tab immediately.

~~~
brudgers
No NoScript?

~~~
tonyarkles
Maybe I'm naive but... I suspect that the rest of the page wouldn't have
worked with NoScript. Since you're, you know, typing in JavaScript code and
running it against some test cases.

~~~
ronaldx
I am using Noscript and the page works fine:

\- usvsthem is white-listed so Javascript runs, which is all that's strictly
required.

\- White-listed sites are still blocked from running plugins including
<AUDIO>. It's straightforward to override this on a plugin-by-plugin basis but
I typically don't want to.

11:14. The 14 seconds were enough for the first two questions, but I find
strings and array handling tough when switching languages.

~~~
tonyarkles
Ahhh that's pretty cool!

------
jenjem
I took almost 40 minutes, am I in the wrong profession? I figured out how to
do all of them right away but I got stuck on figuring out JS syntax in a few
places since I barely ever use it and felt like googling was cheating. I did
use google on the last one to see how to check if something's an array. I even
ended up checking at one point if something's a number by (!isNaN(n/4) && n+n
== 2*n), and checked for being a string or not with if(s.length!=undefined) (I
know that returns true for an array as well). Would've been a lot easier with
something like Intellisense - coding without it feels almost like I'm blind,
after being used to it. That and I thought alert() didn't work until I noticed
at the end it actually sent it to the output.

------
kirse
Fun little puzzles. First 4 went pretty quickly (~8:00) and then the last one
took ~7 minutes Googling around for this so I could test if a variable was an
integer...

    
    
      n===+n && n===(n|0)
    

Wish I could see my answers after the fact though!

Edit: Read the initial requirements of the puzzle, it says sum all the
_integers_ , not all the _numbers_. People using (typeof i[x] == 'number')
just got lucky because the test-cases didn't exercise the full requirements of
the puzzle ;)

    
    
      // i will be an array, containing integers and/or arrays like itself.
      // Sum all the integers you find, anywhere in the nest of arrays.

~~~
Justin_Time
typeof n === 'number'

It didn't actually require differentiating between integers and floats, just
numbers and other types.

~~~
solox3

        > typeof 5.4
          "number"

~~~
kirse
Yea, this is what I realized once I saw the puzzle was throwing junk data like
"false" on #5.

I mentally skipped over Justin_Time's solution, figuring I would just hit a
float error case because it was going to be a stickler about integers.

------
Demiurge
That was fun! I just got in to work so I was properly sleeping. I also rarely
use typeof, so I had to look up that 'integer' and 'array' do not exist :)
Also, what was really annoying is the use of 'i' for the argument. That's what
I exclusively use for the 'for loop' index! Tripped me up a lot, I had to
consciously remind myself every time I accessed the array. Last 'also', the
font is WAY too big for my small screen, the comment never fit in, I had to
scroll... So I think I did bad, 12 minutes. But still fun :)

~~~
robflynn
The use of 'i' set me back a bit, too. Caused me to go into an infinite loop
at one point.

~~~
daGrevis
Exactly this. I had to rename `i` for indexes to `j` and that really messes my
head up! :(

------
Bahamut
It was a kinda cool thing, although I got some strange behavior when I was
using `match` for determining whether the input is a filename - my regex was
/. _\\.._ / (and so I did var match = i.match(/. _\\.._ /) ), and match[1] was
undefined - turned out match[2] was what I wanted, and it was present, but the
behavior was incorrect in the reporting console in the game.

I finished this in 4 minutes.

Edit: looks like HN doesn't like asterisks

~~~
tensafefrogs
I thought regex was overkill for that one and used:

return input.split(".")[1] || "";

~~~
dclowd9901
I fully anticipated a test case like file.name.ext. Of course, you could still
do what you're doing, but it'd be a lot more verbose.

------
prezjordan
Lighten up, everyone, this is a fun little thing. Thanks for sharing.

------
ianstallings
I'm a bit disappointed that it doesn't award points for my heavy use of regex
and obscure variable names.

~~~
Cyranix
> obscure variable names

Absolutely! Being under the gun led me, at one point, to have a "longest
string in array" method with a statement like

    
    
      if (i[z].length < qq) { ... }

------
metaphorm
there's a truly dubious test case in the File Extension test.

file called .htaccess is not filename "" and extension "htaccess" with a "."
separating the two. .htaccess is a unix style dotfile. its whole name is
".htaccess" and it has no file extension.

~~~
taternuts
I have to admit to cheating and putting 'if (i === '.htaccess') return
'htaccess';' to save time :)

~~~
jrawlings
I just did

return i.indexOf('.') > -1 ? i.substring(i.indexOf('.')+1) : false;

Seemed to pass all test cases

~~~
EdgarVerona
Aye, I did similarly, though for some reason I did >= 0 instead of > -1. I
wonder what % of people choose one test approach vs. the other?

~~~
taternuts
I chose >= 0, it's fun to learn!

------
pak
It's problems like 5 that make me sad that IE <9 doesn't have
Array.prototype.reduce.

    
    
        return i.reduce(function(prev, next) {
            if (typeof(next) == "object" && next.length) { return arraySum(next) + prev; }
            if (typeof(next) == "number") { return next + prev; }
            return prev;
        }, 0);
    

Something that simple needs to be shimmed on earlier IEs. In fact, I had to
look up Array.prototype.reduce for this since I usually use Underscore's.
Javascript problems...

~~~
1wheel
[https://github.com/kriskowal/es5-shim](https://github.com/kriskowal/es5-shim)

~~~
pak
Cool project, but all the warnings on that page about the edge cases make me
concerned about trying to exuberantly move to ES5, and so I just stick with
Underscore and the same level of JavaScript syntax I've been writing since
2005. (sigh)

------
drdrxp
The input argument name "i" is really annoying. I always use "i" as for-loop
var. Made some mistake on this. But the Game is really great. :D

------
dmak
I got 11 minutes and 14 seconds. Is that slow? The answer to my last solution
was like this:

    
    
          function arraySum(i) {
    	var total = 0
    	for(var x=0; x < i.length; x++) {
    		if(typeof i[x] == 'object') {
    			 arraySum(i[x])
    		} else if(typeof i[x] == 'number') {
    			total += i[x]
    		}
    	}
    	return total
         }

~~~
dclowd9901
You must've total+= arraySum(i[x]) right? Otherwise this couldn't work as the
result of a deep dive wouldn't be utilized anywhere...

~~~
dmak
Yeah, I did, thanks for pointing that out. I made that mistake when writing
the comment.

------
peregrine
Total bait and switch. As soon as I saw that random array in my array of
strings I knew what kind of game this would be.

------
hcarvalhoalves
Last one reminded me how awful JS is once again. There are 5 different ways to
check if an object is an array, some are implementation dependent, and the
obvious one doesn't work (typeof x == "array").

~~~
hayksaakian
typeof(x) === typeof(["something which is certainly", "an array"])

or am i missing something?

~~~
wging

         > typeof ["a", "b"]
    
        "object"
    

Of course, since you're told you'll only get numbers, arrays, and strings,
that is enough to solve the problem narrowly.

------
salehenrahman
I created a CoffeeScript version of it.
[http://shovon.github.io/youcantcoffeescriptunderpressure/](http://shovon.github.io/youcantcoffeescriptunderpressure/)

------
axyjo
"6 minutes, 21 seconds for all 5 levels. Well done!" I feel like I should have
done better considering JS is one of my primary languages.

------
jamesroseman
9:10, had to Google a bit for type checking, and I had forgotten the proper
syntax for a string split. :-/

------
salehenrahman
I got 3 minutes 39 seconds.

I used i.forEach for questions involving arrays, instead of for-loops. Saves
me time.

------
leehro
This was awesome. 5:48. I actually turned my sound on for the end.

------
chudi
nice stuff but this is plain wrong! // return the file extension (with no
period) if it has one, otherwise false

its like returning error codes in C for errors

~~~
jamesroseman
I too shuddered at this instruction...

~~~
ep103
Or for using i as your input variable

------
ep103
What's everyone's times? I did 7 minutes

~~~
CompelTechnic
17 minutes, 47 seconds. slow poke here.

~~~
dclowd9901
26 Minutes. If you're a slowpoke, I'm a Slowbro.

------
Kiro
Would be great to see some solutions.

