I need to solve this algorithm problem. In the diagram, there are many rows with different no. of blocks. Each block is either good or bad. The block with no. 1 on it is good block and rest are all bad. I need to do the grouping of these blocks in 2 in order to find whether the resultant of these groupings is good or bad. If I make a group of 2 , I will check if all the blocks are having '1' on it. If yes, then the resultant block is good, otherwise bad.
Problem: while doing groupings of blocks, I always have to consider the blocks that are on the edges. If the row has odd number of blocks(lets say 9) and I'm making group of 2, then the middle block(5th block) has to be ignored, the blocks on the edges should get preference with respect to middle block. I don't know how to solve the problem as I'm confused with the part of ignoring the middle block in case of odd no. of blocks.It can ignore any block(near to middle block) but have to consider the blocks on the edges.
So basically, First I need to find if the row has odd/even no.of blocks according to the groupsize which is 2. Then if odd no. of blocks are here, leave the middle one and make a group with blocks on edges and find the result if the resultant is good or bad.
In the inputs, I have the X and Y co-ordinate of each and every block and its information as the block is good or bad.
Answer
It seems like throwing away the exact middle block isn't a good solution. With a row of size 7, you should be able to make 3 pairs, but if you discard the center one, you'll only get two pairs usable.
Try taking blocks from both ends alternately: A pair from the left, then a pair from the right, then the next pair inward from the left. When your two pointers (or indexes) cross in the middle, you're done with the row. When necessary you'll discard a block as near to the middle as possible, and you won't need any special case for even vs odd.
No comments:
Post a Comment