5 ms·
Simple test. I’d say half struggle to declare a variable. Maybe 1/4 can get a class to compile. 1/6 can get code to run. 1/20 can get code to run and maybe star
by geraldwhen 2y ago
Simple test. I’d say half struggle to declare a variable. Maybe 1/4 can get a class to compile. 1/6 can get code to run. 1/20 can get code to run and maybe start to solve the problem.
- leetrout 2y agoI am very curious if it is actually simple or not. I've had some "easy" interview questions that are pure CS trivia. But this and your other comments make it sound practical... can you just post it?
- HeyLaughingBoy 2y agoGiven a 10x10 array filled with numbers. For a given (x,y) starting point, search the 3x3 grid starting with that point as its upper left corner and indicate if it contains a particular number. Ignore error conditions such as running off the edge of the array. I estimate that 80% of candidates could not accomplish this in an hour. 50% of them could not even get out of the gate.
- em-bee 2y agothis? array data = (array(int))random_string(100)/10; int x = random(10); int y = random(10); int seek = random(255); int findgrid(array data, int x, int y, int seek){ for(int i=0;i<=2;i++){ for(int j=0;j<=2;j++){ write("%d:%d\n", data[x+i][y+j], data[x+i][y+j]==seek); if(data[x+i][y+j]==seek){ return true; } } } } took me 15 minutes, and only because i am tired and took a break in between. i can't imagine anyone calling themselves programmer not being able to do that. 80%? hard to believe it's that bad.
- 6510 2y agocouldn't help myself, I think 3-5 min grid = [ [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] ] foo = function(x,y,num){ if (grid[x][y] == num) return true; if (grid[x+1] && grid[x+1][y] == num) return true; if (grid[x+2] && grid[x+2][y] == num) return true; if (grid[y+1]){ if (grid[x][y + 1] == num) return true; if (grid[x+1] && grid[x+1][y+1] == num) return true; if (grid[x+2] && grid[x+2][y+1] == num) return true; } if (grid[y+2]){ if (grid[x][y+2] == num) return true; if (grid[x+1] && grid[x+1][y+2] == num) return true; if (grid[x+2] && grid[x+2][y+2] == num) return true; } return false; } alert(foo(1,2,3)); alert(foo(1,2,30)); humm worked first try, probably something wrong with it.. https://jsfiddle.net/ycx159kg/ https://jsfiddle.net/ycx159kg/ 13 min later... round2 = function(x,y,num){ return grid.slice(x,x+3).map(g=>g.slice(y,y+3)).flat().includes(num); }
- HeyLaughingBoy 2y agoAnd that reminded me that some people were nervous about doing the nested loop solution so asked if they could "brute force" it and we would accept that. Interview stress is a thing after all. I'm intrigued by the slice/map solution. It would have been perfectly acceptable if you could explain what the functions did. In fact, it would have led to very probing conversations: my usual interview partner and me had a deep interest in elegant solutions.
- 6510 2y agogrid.slice(x,x+3) Turns the 10x10 array into a 3x10 discarding the rows before and after the target rows. If the second value in slice is larger than the length it slices to the end. It could be a 2x10 or 1x10 but lets pretend it is 3. .map(g=>g.slice(y,y+3)) Does the same with each row making it into a 3x3 (or 2x3 or 1x1 etc) .flat() Turns the 3x3 into a flat array of up to 9 values. .includes(num) tests if the flat sliced array include num.
- CyberDildonics 2y agoIn your example the first dimension returns a pointer to a row, then the next is the offset into that row so your lookup needs to be grid[y][x] Also you seem to be bounds checking for 0s, but to do that in the first dimension you need null pointers to pad your row selection and a second set of 0s at the end of your rows. It's interesting that both you and the person you replied to used arrays of arrays which is the very first mistake everyone makes in graphics programming when trying to make a 2D array or and image. A much better way is to have a single contiguous array and use buf[y*width + x] to lookup into the one dimension buffer.
- bubblyworld 2y agoIt's only much better if you care about cache misses, right? I think for a 10x10 array we can safely ignore performance concerns.
- 2y ago
- HeyLaughingBoy 2y ago80% is about what I remember. Haven't given that test since 2015 when I left that job. But yes, your solution would have been acceptable: it didn't even need to compile, or be bug free, just show a clear logical path to the solution. The point is that the vast majority of candidates, including some with Master's degrees in CS, could not write even a pseudocode solution to this problem. It got so bad that I started doing a verbal fizzbuzz test during the phone screen so we didn't waste so much time.
- em-bee 2y agoare you hiring? ;-)
- HeyLaughingBoy 2y agoSorry, that test was two jobs ago.
- CyberDildonics 2y agoI wouldn't get too ahead of yourself since this looks like C++ but won't work unless you make a special array class that returns pointers to the start of lines from the operator[] function. Even then you would need to switch the x and the y so that the y comes first. You might say it's pseudo code but one of the original comments was talking about the low numbers of people who could actually get something to compile and solve a problem.
- em-bee 2y agoit's neither c++ nor is it pseudo code. but this language has been designed to closely follow C syntax, so the confusion is not surprising. in fact originally the language did have C in its name. i am going to leave the actual answer at what language this is open to allow more people to keep guessing ;-) you are right about x and y. i was really tired :o but it runs (at least as long as there is no overflow). here is a sample output: > findgrid(data, y, x, seek); // there, fixed the x/y problem ;-) 160:0 165:0 65:0 174:0 23:0 253:0 229:0 130:1 (1) Result: 1 oh, and since we are talking about interview experiences. at one job during the interview i was allowed to provide coding solutions in this language, even though the job was about python.
- kcartlidge 2y agoOut of curiosity, here's a bit of C# to do it. This randomly populates a 10x10 grid then looks for a random target in a randomly located 3x3 sub-grid. As per the question I've ignored error conditions, but using the simple expedient in this case of positioning the 3x3's top left within the first 8x8 not the full 10x10. Example output is underneath. // Make and fill the grid. var r = new Random(); var grid = new int[10, 10]; for (var y = 0; y < 10; y++) for (var x = 0; x < 10; x++) grid[x, y] = r.Next(10); // Draw the grid for reference. Console.WriteLine(); Console.WriteLine(" 0 1 2 3 4 5 6 7 8 9"); Console.WriteLine(); for (var y = 0; y < 10; y++) { Console.Write($"{y} "); for (var x = 0; x < 10; x++) Console.Write(grid[x, y] + " "); Console.WriteLine(); } Console.WriteLine(); // Random starting point and target. var tlx = r.Next(8); var tly = r.Next(8); var target = r.Next(10); // Extract the 3x3 sub-grid and "[ ]" any matches. Console.WriteLine($"Looking for {target} in 3x3 grid at {tlx},{tly}"); Console.WriteLine(); for (var dy = 0; dy < 3; dy++) { for (var dx = 0; dx < 3; dx++) { var ax = tlx + dx; var ay = tly + dy; var v = grid[ax, ay]; if (v == target) Console.Write($"[{v}]"); else Console.Write($" {v} "); } Console.WriteLine(); } Console.WriteLine(); Example output: 0 1 2 3 4 5 6 7 8 9 0 1 2 5 4 1 8 0 2 8 5 1 4 2 2 5 8 4 4 0 4 8 2 7 1 8 2 5 6 3 6 3 6 3 8 7 3 2 4 6 5 9 6 2 4 6 3 4 2 9 7 4 7 6 1 5 1 4 2 3 8 3 2 4 3 3 6 0 6 6 5 1 4 7 3 4 9 7 2 0 6 9 9 9 3 9 1 7 8 1 6 5 8 3 8 9 8 3 4 9 0 8 7 9 5 4 0 7 0 3 Looking for 5 in 3x3 grid at 2,6 6 [5] 1 6 9 9 [5] 8 3 As others have said elsewhere this could use a one-dimensional array but as we know upfront what the constraints are I've gone for the clarity of the two-dimensional. This is said to be the very first mistake everyone makes in graphics programming - but nothing in the question says it is for use in graphics, so being an interview question I went for clarity. Similarly there's the possible use of a ternary, less memory allocation, and tighter code, but again in this situation I'd go for readability. There may also be edge cases not covered; this was a 10 minute hack (as it looked fun) and isn't exhaustively tested.