4 ms·
this? array data = (array(int))random_string(100)/10; int x = random(10); int y = random(10); int seek = random(255); int findgrid(array data,
by em-bee 2y ago
this?
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.
- CyberDildonics 2y agoIt's only much better if you care about cache misses, right? No, not at all. There are cache misses and simplicity, but think about when an 1k image is on the heap. You have to allocate a buffer of pointers for each row then you have do a thousand individual heap allocations to get all your rows. Now think about an image with rgba channels. Technically this is a 3d image with one short dimension. Are you going to allocate a buffer of a thousand pointers, then off of each one allocate a buffer of a thousand more pointers so that you can ultimately do another 1 million heap allocations, all 16 bytes for each rgba pixel? There is no upside and all downsides, which is why it is never ultimately done this way, though it is an almost universal mistake when people do multi-dimensional arrays for the first time.
- bubblyworld 2y agoYeah, I hear you, my point was just that we know the constraints up front and it doesn't matter in this case. Sometimes it's convenient to not have to pass around the length and do one or more multiplies with every index.
- 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.