ycomp
asked on
Help with a relatively simple algorithm
Hi,
I've been stuck trying to make this simple algorithm. I'm hoping someone out there can help me with this.
Basically I need to write a function:
/**
* @param row 1-based row number
* @param numOriginalRows number of original rows
* @param numOutputRows number of output rows
* @return the resolved row (1-based)
*/
public static int resolveRow(int row, int numOriginalRows, int numOutputRows) {
// return the result here
}
(defintion: "rectangle", I just mean a bunch of rows and cols - like m x n array)
- numOriginalRows represents an original rectangle
- numOutputRows represents a rectangle that could possibly have more rows in it than numOriginalRows
but I need to access information associated with the original Rectangle. The "row" value is relative to the output rectangle. Therefore I cannot just do getOriginalRectangleRow(ro w). Instead I need to do getOriginalRectangleRow(re solveRow(r ow)).
hopefully this is enough information. I can't really explain it more without making it more confusing.
Here is my junit code. It shows the input values and the corresponding output values.
public void testRowResolver() {
// 4 Original Rows
assertEquals(resolveRow(1, 4,4), 1);
assertEquals(resolveRow(2, 4,4), 2);
assertEquals(resolveRow(3, 4,4), 3);
assertEquals(resolveRow(4, 4,4), 4);
assertEquals(resolveRow(1, 4,5), 1);
assertEquals(resolveRow(2, 4,5), 2);
assertEquals(resolveRow(3, 4,5), 2);
assertEquals(resolveRow(4, 4,5), 3);
assertEquals(resolveRow(5, 4,5), 4);
assertEquals(resolveRow(1, 4,6), 1);
assertEquals(resolveRow(2, 4,6), 2);
assertEquals(resolveRow(3, 4,6), 2);
assertEquals(resolveRow(4, 4,6), 3);
assertEquals(resolveRow(5, 4,6), 3);
assertEquals(resolveRow(6, 4,6), 4);
assertEquals(resolveRow(1, 4,7), 1);
assertEquals(resolveRow(2, 4,7), 2);
assertEquals(resolveRow(3, 4,7), 2);
assertEquals(resolveRow(4, 4,7), 2);
assertEquals(resolveRow(5, 4,7), 3);
assertEquals(resolveRow(6, 4,7), 3);
assertEquals(resolveRow(7, 4,7), 4);
assertEquals(resolveRow(1, 4,8), 1);
assertEquals(resolveRow(2, 4,8), 2);
assertEquals(resolveRow(3, 4,8), 2);
assertEquals(resolveRow(4, 4,8), 2);
assertEquals(resolveRow(5, 4,8), 3);
assertEquals(resolveRow(6, 4,8), 3);
assertEquals(resolveRow(7, 4,8), 3);
assertEquals(resolveRow(8, 4,8), 4);
// 5 Original Rows
assertEquals(resolveRow(1, 5,5), 1);
assertEquals(resolveRow(2, 5,5), 2);
assertEquals(resolveRow(3, 5,5), 3);
assertEquals(resolveRow(4, 5,5), 4);
assertEquals(resolveRow(5, 5,5), 5);
assertEquals(resolveRow(1, 5,6), 1);
assertEquals(resolveRow(2, 5,6), 2);
assertEquals(resolveRow(3, 5,6), 3);
assertEquals(resolveRow(4, 5,6), 3);
assertEquals(resolveRow(5, 5,6), 4);
assertEquals(resolveRow(6, 5,6), 5);
assertEquals(resolveRow(1, 5,7), 1);
assertEquals(resolveRow(2, 5,7), 2);
assertEquals(resolveRow(3, 5,7), 3);
assertEquals(resolveRow(4, 5,7), 3);
assertEquals(resolveRow(5, 5,7), 3);
assertEquals(resolveRow(6, 5,7), 4);
assertEquals(resolveRow(7, 5,7), 5);
assertEquals(resolveRow(1, 5,8), 1);
assertEquals(resolveRow(2, 5,8), 2);
assertEquals(resolveRow(3, 5,8), 3);
assertEquals(resolveRow(4, 5,8), 3);
assertEquals(resolveRow(5, 5,8), 3);
assertEquals(resolveRow(6, 5,8), 3);
assertEquals(resolveRow(7, 5,8), 4);
assertEquals(resolveRow(8, 5,8), 5);
}
I've been stuck trying to make this simple algorithm. I'm hoping someone out there can help me with this.
Basically I need to write a function:
/**
* @param row 1-based row number
* @param numOriginalRows number of original rows
* @param numOutputRows number of output rows
* @return the resolved row (1-based)
*/
public static int resolveRow(int row, int numOriginalRows, int numOutputRows) {
// return the result here
}
(defintion: "rectangle", I just mean a bunch of rows and cols - like m x n array)
- numOriginalRows represents an original rectangle
- numOutputRows represents a rectangle that could possibly have more rows in it than numOriginalRows
but I need to access information associated with the original Rectangle. The "row" value is relative to the output rectangle. Therefore I cannot just do getOriginalRectangleRow(ro
hopefully this is enough information. I can't really explain it more without making it more confusing.
Here is my junit code. It shows the input values and the corresponding output values.
public void testRowResolver() {
// 4 Original Rows
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(8,
// 5 Original Rows
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(8,
}
ASKER
Hi Webstorm,
thanks for the quick response!
unfortunately it doesn't work in all cases:
(the commented lines are problem lines)
// 4 Original Rows
assertEquals(resolveRow(1, 4,4), 1);
assertEquals(resolveRow(2, 4,4), 2);
assertEquals(resolveRow(3, 4,4), 3);
assertEquals(resolveRow(4, 4,4), 4);
assertEquals(resolveRow(1, 4,5), 1);
// assertEquals(resolveRow(2, 4,5), 2);
assertEquals(resolveRow(3, 4,5), 2);
assertEquals(resolveRow(4, 4,5), 3);
assertEquals(resolveRow(5, 4,5), 4);
assertEquals(resolveRow(1, 4,6), 1);
// assertEquals(resolveRow(2, 4,6), 2);
assertEquals(resolveRow(3, 4,6), 2);
assertEquals(resolveRow(4, 4,6), 3);
assertEquals(resolveRow(5, 4,6), 3);
assertEquals(resolveRow(6, 4,6), 4);
assertEquals(resolveRow(1, 4,7), 1);
// assertEquals(resolveRow(2, 4,7), 2);
assertEquals(resolveRow(3, 4,7), 2);
assertEquals(resolveRow(4, 4,7), 2);
assertEquals(resolveRow(5, 4,7), 3);
assertEquals(resolveRow(6, 4,7), 3);
assertEquals(resolveRow(7, 4,7), 4);
assertEquals(resolveRow(1, 4,8), 1);
// assertEquals(resolveRow(2, 4,8), 2);
assertEquals(resolveRow(3, 4,8), 2);
assertEquals(resolveRow(4, 4,8), 2);
assertEquals(resolveRow(5, 4,8), 3);
assertEquals(resolveRow(6, 4,8), 3);
// assertEquals(resolveRow(7, 4,8), 3);
assertEquals(resolveRow(8, 4,8), 4);
// 5 Original Rows
assertEquals(resolveRow(1, 5,5), 1);
assertEquals(resolveRow(2, 5,5), 2);
assertEquals(resolveRow(3, 5,5), 3);
assertEquals(resolveRow(4, 5,5), 4);
assertEquals(resolveRow(5, 5,5), 5);
assertEquals(resolveRow(1, 5,6), 1);
// assertEquals(resolveRow(2, 5,6), 2);
// assertEquals(resolveRow(3, 5,6), 3);
assertEquals(resolveRow(4, 5,6), 3);
assertEquals(resolveRow(5, 5,6), 4);
assertEquals(resolveRow(6, 5,6), 5);
assertEquals(resolveRow(1, 5,7), 1);
// assertEquals(resolveRow(2, 5,7), 2);
// assertEquals(resolveRow(3, 5,7), 3);
assertEquals(resolveRow(4, 5,7), 3);
assertEquals(resolveRow(5, 5,7), 3);
assertEquals(resolveRow(6, 5,7), 4);
assertEquals(resolveRow(7, 5,7), 5);
assertEquals(resolveRow(1, 5,8), 1);
// assertEquals(resolveRow(2, 5,8), 2);
// assertEquals(resolveRow(3, 5,8), 3);
// assertEquals(resolveRow(4, 5,8), 3);
assertEquals(resolveRow(5, 5,8), 3);
// assertEquals(resolveRow(6, 5,8), 3);
assertEquals(resolveRow(7, 5,8), 4);
assertEquals(resolveRow(8, 5,8), 5);
thanks for the quick response!
unfortunately it doesn't work in all cases:
(the commented lines are problem lines)
// 4 Original Rows
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
// assertEquals(resolveRow(7,
assertEquals(resolveRow(8,
// 5 Original Rows
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
// assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
// assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(1,
// assertEquals(resolveRow(2,
// assertEquals(resolveRow(3,
// assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
// assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(8,
In fact, to get exactly what you need in your assertEquals statements:
public static int resolveRow(int row, int numOriginalRows, int numOutputRows)
{
int dh=(numOriginalRows+1)/2;
if (row<dh) return row;
else if (row>(numOutputRows-dh)) return row+numOriginalRows-numOut putRows;
else return dh;
}
public static int resolveRow(int row, int numOriginalRows, int numOutputRows)
{
int dh=(numOriginalRows+1)/2;
if (row<dh) return row;
else if (row>(numOutputRows-dh)) return row+numOriginalRows-numOut
else return dh;
}
So what does your current method look like?
ASKER
unfortunately that doesn't quite work either WebStorm. But the problems are limited to the 4 rows example:
// 4 Original Rows
assertEquals(resolveRow(1, 4,4), 1);
assertEquals(resolveRow(2, 4,4), 2);
assertEquals(resolveRow(3, 4,4), 3);
assertEquals(resolveRow(4, 4,4), 4);
assertEquals(resolveRow(1, 4,5), 1);
assertEquals(resolveRow(2, 4,5), 2);
assertEquals(resolveRow(3, 4,5), 2);
assertEquals(resolveRow(4, 4,5), 3);
assertEquals(resolveRow(5, 4,5), 4);
assertEquals(resolveRow(1, 4,6), 1);
assertEquals(resolveRow(2, 4,6), 2);
assertEquals(resolveRow(3, 4,6), 2);
// assertEquals(resolveRow(4, 4,6), 3);
assertEquals(resolveRow(5, 4,6), 3);
assertEquals(resolveRow(6, 4,6), 4);
assertEquals(resolveRow(1, 4,7), 1);
assertEquals(resolveRow(2, 4,7), 2);
assertEquals(resolveRow(3, 4,7), 2);
assertEquals(resolveRow(4, 4,7), 2);
// assertEquals(resolveRow(5, 4,7), 3);
assertEquals(resolveRow(6, 4,7), 3);
assertEquals(resolveRow(7, 4,7), 4);
assertEquals(resolveRow(1, 4,8), 1);
assertEquals(resolveRow(2, 4,8), 2);
assertEquals(resolveRow(3, 4,8), 2);
assertEquals(resolveRow(4, 4,8), 2);
// assertEquals(resolveRow(5, 4,8), 3);
// assertEquals(resolveRow(6, 4,8), 3);
assertEquals(resolveRow(7, 4,8), 3);
assertEquals(resolveRow(8, 4,8), 4);
// 5 Original Rows
assertEquals(resolveRow(1, 5,5), 1);
assertEquals(resolveRow(2, 5,5), 2);
assertEquals(resolveRow(3, 5,5), 3);
assertEquals(resolveRow(4, 5,5), 4);
assertEquals(resolveRow(5, 5,5), 5);
assertEquals(resolveRow(1, 5,6), 1);
assertEquals(resolveRow(2, 5,6), 2);
assertEquals(resolveRow(3, 5,6), 3);
assertEquals(resolveRow(4, 5,6), 3);
assertEquals(resolveRow(5, 5,6), 4);
assertEquals(resolveRow(6, 5,6), 5);
assertEquals(resolveRow(1, 5,7), 1);
assertEquals(resolveRow(2, 5,7), 2);
assertEquals(resolveRow(3, 5,7), 3);
assertEquals(resolveRow(4, 5,7), 3);
assertEquals(resolveRow(5, 5,7), 3);
assertEquals(resolveRow(6, 5,7), 4);
assertEquals(resolveRow(7, 5,7), 5);
assertEquals(resolveRow(1, 5,8), 1);
assertEquals(resolveRow(2, 5,8), 2);
assertEquals(resolveRow(3, 5,8), 3);
assertEquals(resolveRow(4, 5,8), 3);
assertEquals(resolveRow(5, 5,8), 3);
assertEquals(resolveRow(6, 5,8), 3);
assertEquals(resolveRow(7, 5,8), 4);
assertEquals(resolveRow(8, 5,8), 5);
// 4 Original Rows
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
// assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
// assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
// assertEquals(resolveRow(5,
// assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(8,
// 5 Original Rows
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(1,
assertEquals(resolveRow(2,
assertEquals(resolveRow(3,
assertEquals(resolveRow(4,
assertEquals(resolveRow(5,
assertEquals(resolveRow(6,
assertEquals(resolveRow(7,
assertEquals(resolveRow(8,
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
objects, my current method is blank. I tried to write something but couldn't figure it out. Basically what I need to do is to somehow divide the thing so that the rows that are closer to the top correlate to the original rows closer to the top and those closer to the bottom correlate to those original rows closer to the bottom.
But I can't really describe it very well, which is one reason why I can't write the code. However I do know that the junit code does describe what I need done much better than I can explain it.
But I can't really describe it very well, which is one reason why I can't write the code. However I do know that the junit code does describe what I need done much better than I can explain it.
ASKER
Webstorm, you are awesome... thanks! Saved me a lot of scratching my head. It works 100%.
:-)
public static int resolveRow(int row, int numOriginalRows, int numOutputRows)
{
return 1+((numOriginalRows*(row-1
}