asplake
1/21/2006 7:51:00 PM
Matthew, thank you for sharing your results (and in the form of test
cases). Pleased to report that mine are identical (and pass!).
BTW it's not hard to work out (and - hint to Chris - validate) the grid
dimensions from the folds so my function takes just the one argument.
Regards, Mike
Matthew Moss wrote:
> The first extra credit (handling dimensions other than 16x16) is
> pretty darn easy, so you may want to start out on a 2x2 to get yer
> basics working and move up. With that in mind, here are a few tests
> to help verify your work. The test_2x2 tests all possible folding
> combinations.
>
> (NOTE: The 16x16 test below is the result of my own solution. I'm
> fairly certain it's correct, but not 100%. So if you run this and
> pass the other two tests but fail the 16x16 test, I'd be interested to
> see your output and between us figure out what the expected solution
> is.)
>
> Oh, and if you have more tests, feel free to share.
>
>
> require 'test/unit'
> require 'test/unit/ui/console/testrunner'
>
> class FoldTest < Test::Unit::TestCase
> def test_2x2
> folds = {"TR" => [4, 2, 1, 3],
> "BR" => [2, 4, 3, 1],
> "TL" => [3, 1, 2, 4],
> "BL" => [1, 3, 4, 2],
> "RT" => [1, 2, 4, 3],
> "RB" => [3, 4, 2, 1],
> "LT" => [2, 1, 3, 4],
> "LB" => [4, 3, 1, 2]}
>
> folds.each do |cmds,xpct|
> assert_equal xpct, fold(2, 2, cmds)
> end
> end
>
> def test_16x16
> xpct = [189, 77, 68, 180, 196, 52, 61, 205,
> 204, 60, 53, 197, 181, 69, 76, 188,
> 185, 73 , 72, 184, 200, 56, 57, 201,
> 208, 64, 49, 193, 177, 65, 80, 192,
> 191, 79, 66, 178, 194, 50, 63, 207,
> 202, 58, 55, 199, 183, 71, 74, 186,
> 187, 75, 70, 182, 198, 54, 59, 203,
> 206, 62, 51, 195, 179, 67, 78, 190,
> 142, 126, 115, 131, 243, 3, 14, 254,
> 251, 11, 6, 246, 134, 118, 123, 139,
> 138, 122, 119, 135, 247, 7, 10, 250,
> 255, 15, 2, 242, 130, 114, 127, 143,
> 144, 128, 113, 129, 241, 1, 16, 256,
> 249, 9, 8, 248, 136, 120, 121, 137,
> 140, 124, 117, 133, 245, 5, 12, 252,
> 253, 13, 4, 244, 132, 116, 125, 141,
> 157, 109, 100, 148, 228, 20, 29, 237,
> 236, 28, 21, 229, 149, 101, 108, 156,
> 153, 105, 104, 152, 232, 24, 25, 233,
> 240, 32, 17, 225, 145, 97, 112, 160,
> 159, 111, 98, 146, 226, 18, 31, 239,
> 234, 26, 23, 231, 151, 103, 106, 154,
> 155, 107, 102, 150, 230, 22, 27, 235,
> 238, 30, 19, 227, 147, 99, 110, 158,
> 174, 94, 83, 163, 211, 35, 46, 222,
> 219, 43, 38, 214, 166, 86, 91, 171,
> 170, 90, 87, 167, 215, 39, 42, 218,
> 223, 47, 34, 210, 162, 82, 95, 175,
> 176, 96, 81, 161, 209, 33, 48, 224,
> 217, 41, 40, 216, 168, 88, 89, 169,
> 172, 92, 85, 165, 213, 37, 44, 220,
> 221, 45, 36, 212, 164, 84, 93, 173]
> assert_equal xpct, fold(16, 16, "TLBLRRTB")
> end
>
> def test_invalid
> assert_raise(RuntimeError) { fold(2, 2, "LR") } # too many horz folds
> assert_raise(RuntimeError) { fold(2, 2, "TRB") } # too many folds
> assert_raise(RuntimeError) { fold(3, 2, "LR") } # bad input dimensions
> end
>
> end
>
> Test::Unit::UI::Console::TestRunner.run(FoldTest)