top | item 6976284

Beat This Level, Get A Programming Job

69 points| nwinter | 12 years ago |blog.codecombat.com | reply

72 comments

order
[+] rav|12 years ago|reply
Since there's just a single instance, you can find the optimal solution manually and write a 29-line program that specifies the 29 rectangles in the optimal solution.

The general version of this problem can be termed "the minimum dissection of a rectilinear region" and can be solved optimally using a sweep-line and computing the maximal independent set in a bipartite graph as described in section 7.1 of [1].

Now if you'll excuse me, I'm gonna have some fun implementing this result in JavaScript.

[1] Hiroshi Imai, Takao Asano: Efficient algorithms for geometric graph search problems (1986) https://dl.acm.org/citation.cfm?id=14098 http://epubs.siam.org/doi/pdf/10.1137/0215033

[+] drdaeman|12 years ago|reply
Here's the concept, neatly illustrated: http://stackoverflow.com/a/6634668/116546

(Offtopic rant) Guess, I'm not really suited for programming. When I read I remembered I've heard about an algorithm for such tasks, Googled the details up to freshen my memory, and things instantly became boring. :(

[+] thomasfedb|12 years ago|reply
Having found the same algorithm in a (different) review paper I almost implemented this for fun.

Sadly, JavaScript.

[+] stcredzero|12 years ago|reply
I came up with a general O(n^2) algorithm that yields 30 rectangles, which is one off from the optimal answer according to you. Actually, it's only O(n^2) because I'm exhaustively searching an array instead of indexing by xy coordinates in nested hashes, which would yield O(n).

Basically, it just fills the spaces with rectangles, expanding horizontally. Then I look for "stacks" of vertical adjacent rectangles and combine them.

(EDIT: Goes to show that you can get pretty good though non-optimal results by taking the low hanging fruit and optimizing a bit.)

[+] unreal37|12 years ago|reply
CodeCombat is just acting like a recruiter here. Do they have any advantage over traditional recruiters that may be more highly connected?

Beat this level, and we'll send your resume to some companies that are hiring. And those companies will pay us a hefty commission.

[+] nwinter|12 years ago|reply
This is a good point. Traditional recruiters have different ways of knowing how good you are at programming (often they don't). By starting with your Gridmancer competency, we can potentially find and qualify you for opportunities that traditional credentials couldn't. (And we're not going to send candidates who aren't good enough to higher-skill positions.)

One weakness is that we don't have a good way of measuring how much software development (as opposed to core programming skill) you have. In this sense, we don't yet have an advantage over traditional recruiters.

Traditional recruiters do have better connections, for now, but we are going really high-hustle for this initial batch of players, so it's not like we're just sending off resumes.

[+] ENGNR|12 years ago|reply
Is there a problem with recruiters working harder to find the best candidate/job fit? It's a nice change from having to compete (or work with!) people rammed into the wrong sorts of jobs.

Worst case you can have fun with the levels and just not worry about the job bits.

[+] varelse|12 years ago|reply
Only the very darkest realm would deprive its wizards of the mighty printf spell! To what Silicon demon legion did you pledge fealty to summon this coding abomination upon an unsuspecting land? Winter is truly coming at last.

(Otherwise pretty neat)

[+] nwinter|12 years ago|reply
I know, I know. Try this.say() for a poor man's replacement.

We haven't improved it much because we are going to make an awesome timeless debugger, where you just hover over the variables to see their values at any point in time as well as scrubbing forward and backward through your entire program's execution (like jsdares does), all without any breakpoints, but haven't quite got it yet.

[+] nwinter|12 years ago|reply
To those playing: if you want to be able to find your code again later, go to the CodeCombat home page and sign up for a free account! Sorry, we derped out and didn't put any signup form accessible from the Gridmancer level.

Also, we're sorry that we left you without good debugging tools: https://news.ycombinator.com/item?id=6976883 -- this is the #1 problem uncovered today. We will retreat in tearful shame to our code lairs until we can blow your minds with our timeless debugger.

You are amazing players--so many good solutions here. Thanks for playing! To those who sent in solutions and are looking for dev opportunities, we'll be in touch this weekend to see what we can do and learn about what you're looking for.

[+] stcredzero|12 years ago|reply
Also, we're sorry that we left you without good debugging tools

I just thought that was part of the challenge. (See if you can get by with scientific method and printf debugging.) The biggest problem I had was that the environment kept freezing. However, copy-pasting into the window from emacs worked fine.

[+] negamax|12 years ago|reply
Submit the solution using the contact button at the bottom (didn't signed up)?
[+] jacobbudin|12 years ago|reply
I can't play using Safari 7.0.1 on OS X 10.9.1. (And by "can't play", I mean I see the "CodeCombat requires a modern browser to play" screen.)

User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/537.73.11

[+] nwinter|12 years ago|reply
Sorry about that. The fix is deploying right now.
[+] abus|12 years ago|reply
> there aren't enough programmers to meet the demand.

There aren't enough good programmers to meet the demand for low paid programmers.

[+] natebrennand|12 years ago|reply
This seems pretty incredible that CodeCombat has already reached the point where they're placing people into jobs. It's supposed to be Codecademy's goal [1] to do that eventually but they've been around much longer.

1. http://bits.blogs.nytimes.com/2011/09/14/codecademy-offers-f...

[+] ibdknox|12 years ago|reply
There's a pretty big difference in audience in these two examples. Codecademy is targeting people who have no, or nearly no, experience programming and trying to turn them into programmers. CodeCombat's normal stuff appears to be in the same vein, but this specific challenge is something only a fairly experienced programmer is likely to solve. It's easy to place great programmers. Not so easy to take someone, make them a good programmer, and then get them a job.
[+] nwinter|12 years ago|reply
We are doing it in a way that won't scale: George is just going to hustle to make the placements. Codecademy might have a different problem to solve, too: the players we're placing through this level are mostly people with existing skills who like a fun challenge, not players who have gotten there from scratch through the site's content (like all Codecademy users). It'll be a while before we have enough content to take raw beginners to the required skill levels.
[+] shawndrost|12 years ago|reply
Shoutout to the gents at codecombat -- this is what hustle looks like.
[+] sbuccini|12 years ago|reply
These guys have been busting tail ever since the initial DDOS; I'm really rooting for them to make it big.
[+] daemonk|12 years ago|reply
A better way to look at the object's structure/values would help a lot. Seems like the first step would be to generate a list of vertices from the 2d array of tiles.
[+] acgourley|12 years ago|reply
Just curious - would anyone here currently hiring consider the winning candidates any more than they would from a (reputable) recruiter?

I'm not trying to be a cynic - I really hope this works and solves a real problem. This is honest feedback from someone has and will continue to evaluate talent for technical teams - proof of algorithmic ability is only one tick mark of the dozens needed.

[+] serickson|12 years ago|reply
We're not sure ourselves; we're testing the waters with this level to find out exactly that. And if it looks like this monetization strategy has legs, we'll aim to expand what we can provide to companies so we can be more compelling.

We'll be interested to hear what others think about this too!

[+] Danieru|12 years ago|reply
The blog post talks about minimizing count(rects) but the in-game comment only mentions having better than one rect per floor tile.

This second requirement is much simpler. One only needs to merge a single two rects into one rect to fulfil it. I assume this is a bug?

Edit: Sorry I didn't read the original post well enough the first time. It gives the more practical goal of 40 rects or less.

[+] nwinter|12 years ago|reply
I'll change the default code comments. We were much less ambitious before our playtesters blew my algorithm out of the water.
[+] jffry|12 years ago|reply
It covers all of the little coins!

  this.addRect(0, 0, 200, 200);
[+] nwinter|12 years ago|reply
Clever! In an ideal world, we'd have logic to prevent incorrect configurations so rectangles couldn't touch walls. There would also be ogres dying and explosions and battle music and such related to the efficiency of your algorithm--you know, actual gameplay mechanics, like our other levels. Didn't have time to get those in yet, though.
[+] emeraldd|12 years ago|reply
It would be very nice to have a console.log/dir style function that would let you inspect objects/arrays. (Makes debugging significantly easier).

Also, any chances of expanding beyond California?

[+] nwinter|12 years ago|reply
You are so right, I am ashamed. See also this comment: https://news.ycombinator.com/item?id=6976883

We could try doing placements outside of California later, but for now we don't have much of a network outside of the SF Bay Area. (We're quite young as a startup.)

[+] adamredwoods|12 years ago|reply
Hi. I took this challenge, asked for help in finding a job, and heard nothing back.

I could really use help as my resume is mostly Flash/Actionscript related work, which is not in demand, and it's difficult to convince the "filtering" HR reps that my skills are applicable to other languages. So if this proves that I can code, then I should be able to get a job?

[+] tokipin|12 years ago|reply
'this' is quirky when you make your own functions. also Starcraft II runs more smoothly on my computer, no joke
[+] kd5bjo|12 years ago|reply
This was a great way for me to get back into programming after the holiday break. Your optimal number seems off, though; I ended up with a solution in 27 rects:

http://imgur.com/hAOLUaD

[+] swframe|12 years ago|reply
try it again without overlapping the rects.
[+] Zarathust|12 years ago|reply
It was all fun and games until chrome crashed and lost the code I was writing.
[+] gorhill|12 years ago|reply
Why do you need 20+ screenshots of the game screen within less than a second?
[+] nwinter|12 years ago|reply
We, uh, don't! That sounds like a bug that I would love to slay. Can you give me some more info?
[+] chrismcb|12 years ago|reply
40? That doesn't even seem to be a challenge. Are you sure you want to recommend people that can't get the optimal solution?