19 ms·
Beat This Level, Get A Programming Job
- jacobbudin 13y agoI 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 13y agoSorry about that. The fix is deploying right now.
- natebrennand 13y agoThis 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-free-coding-classes-for-aspiring-entrepreneurs/ http://bits.blogs.nytimes.com/2011/09/14/codecademy-offers-f...
- ibdknox 13y agoThere'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 13y agoWe 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.
- deleted 13y ago[deleted]
- jffry 13y agoIt covers all of the little coins! this.addRect(0, 0, 200, 200);
- nwinter 13y agoClever! 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.
- deleted 13y ago[deleted]
- shawndrost 13y agoShoutout to the gents at codecombat -- this is what hustle looks like.
- gorhill 13y agoWhy do you need 20+ screenshots of the game screen within less than a second?
- nwinter 13y agoWe, uh, don't! That sounds like a bug that I would love to slay. Can you give me some more info?
- gorhill 13y ago[nothing wrong, except my brain]
- nwinter 13y agoThis is for our multiplayer game list, which we haven't quite turned on for non-admins yet: https://www.dropbox.com/s/n956u62zdlghqjw/Screenshot%202013-12-28%2013.52.10.png https://www.dropbox.com/s/n956u62zdlghqjw/Screenshot%202013-... But it should only take one screenshot every 30 seconds, and only when something changes, so this is a bug! I will fix. Thanks so much!
- gorhill 13y ago> "But it should only take one screenshot every 30 seconds" The bug is in my reporting tool I just realized. Yes, it reports only each time the screen change. Sorry about that. About multiplayer, understood, make sense.
- nwinter 13y agoOh, okay. I thought I had a performance improvement at hand, so I was excited! Thanks for digging into that.
- rav 13y agoSince 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 https://dl.acm.org/citation.cfm?id=14098 http://epubs.siam.org/doi/pdf/10.1137/0215033 http://epubs.siam.org/doi/pdf/10.1137/0215033
- funky_vodka 13y agoI feel stupid now.
- darylteo 13y agoDon't be. These kinds of problems are algorithmic problems and have very little bearing on your capabilities as a developer from an engineering perspective. For me, its like saying someone who is poor at physics makes a poor accountant. While a fun exercise, I feel that it doesn't actually test for actual programming ability as it actually requires the programmer to be familiar with this particular subset of algorithms first (something that isn't entirely fundamental imho). I do not believe many jobs require the skillset that this problem tests for. For example, I had very little idea how to approach this problem in an optimal way. But once I read the comment above I figured out a pretty brute force method. You can get 34 by just joining contiguous segments in each column with segments in their neighbouring columns if they have the same row and height. With some trimming I managed to get 30... not really sure if 29 is actually possible actually, I can't find where I can cut down on 1 more. Edit: found it. Very tricky edge case with my algorithm. Happy with 30.
- rav 13y ago> While a fun exercise, I feel that it doesn't actually test for actual programming ability as it actually requires the programmer to be familiar with this particular subset of algorithms first (something that isn't entirely fundamental imho). I don't think you are required to know this particular subset of algorithms first -- I certainly did not, and it took me about half an hour of searching around the net until I found the right terms to use. Perhaps max cardinality bipartite matching is something I know from my first year at CS, but I didn't know its application to this problem before I had read through several different answers on StackExchange.
- varelse 13y agoOnly 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 13y agoI 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.
- morgante 13y agoHonestly, it's almost impossible to make a good solution to this without console.log. We need some way to inspect the undocumented grids and rectangles you've given us.
- de90 13y agoWhy? All you need to know is the grid width\height, and whether a grid coord is empty. All of which is shown in the example.
- karcass 13y agoMy solution required marking each coord as non-empty when I dropped a rect on it. I was able to hack something that worked (non-zero-len string stuffed into the structure), but I'd much rather know what the structure was instead of guessing. p.s. 29 ha ha
- Danieru 13y agoThe 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 13y agoI'll change the default code comments. We were much less ambitious before our playtesters blew my algorithm out of the water.
- unreal37 13y agoCodeCombat 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 13y agoThis 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.
- jschmitz28 13y agoIs the general consensus now that core programming skills and being good at math are the same thing? Because after taking a look at this challenge it appears to be a math problem that requires mathematical knowledge and barely any programming knowledge.
- darylteo 13y agoGlad I'm not the only one who thought this. Exercises like these have a very poor accuracy if it is used it to test for developers.
- stcredzero 13y agoSee above. Could be testing for problem solving ability and willingness to try.
- 13y ago
- acgourley 13y agoJust 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 13y agoWe'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!
- emeraldd 13y agoIt 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 13y agoYou are so right, I am ashamed. See also this comment: https://news.ycombinator.com/item?id=6976883 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.)
- emeraldd 13y agoOne question, why does this.addRect use the center of a rectangle to define it rather than a vertex? It makes attempting dealing with "native" rectangles rather awkward.
- nwinter 13y agoThat's how all the CodeCombat game engine works (things are positioned by their center points), so because this challenge was taken from an algorithm used in two places in the engine, it maintains that. I know it makes it a bit more complicated to write the code, but it's a lot easier for us to then snatch the winning solution to make CodeCombat faster!
- abus 13y ago> there aren't enough programmers to meet the demand. There aren't enough good programmers to meet the demand for low paid programmers.
- deleted 13y ago[deleted]
- daemonk 13y agoA 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.
- tokipin 13y ago'this' is quirky when you make your own functions. also Starcraft II runs more smoothly on my computer, no joke
- nwinter 13y agoTo 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 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.
- negamax 13y agoSubmit the solution using the contact button at the bottom (didn't signed up)?
- nwinter 13y agoThat's fine, too--we'll have your code, but you may not (after you change browser sessions). Well, until we reply to your email.
- stcredzero 13y agoAlso, 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.
- chrismcb 13y ago40? That doesn't even seem to be a challenge. Are you sure you want to recommend people that can't get the optimal solution?
- EGreg 13y agoWhy can't someone make a test account first, and then replay the best answer much more quickly with their real account?
- jezell 13y agoI got 29 with first algorithm I came up with. Was really fun, but surprised they say their current code gets 33. Maybe it handles other cases better?
- kd5bjo 13y agoThis 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 http://imgur.com/hAOLUaD
- swframe 13y agotry it again without overlapping the rects.
- foxly 13y agoSOLVED. -29 rectangles -O(N) worst-case complexity -Under 200 lines https://gist.github.com/foxly/8168624 https://gist.github.com/foxly/8168624 http://imgur.com/PXcUEHz http://imgur.com/PXcUEHz
- Zarathust 13y agoIt was all fun and games until chrome crashed and lost the code I was writing.
- adamredwoods 13y agoHi. 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?