суббота, 12 февраля 2011 г.

Еще одно тестовое задание - собери плитки

Необходимо написать функцию link_tiles($tiles), которая сложит переданные в виде списка плитки последовательно и выведет на экран каждый шаг выкладывания плиток. Плитка - кварат, который поделен на 4 части, пронумерованные от 0 до 9. Плитка может быть приложена в том случае если хотя бы 2 числа подходят к соседним плиткам, но и остальные номера, если они прикладываются, тоже должны совпадать. Плитки можно поворачивать. Входные данные заданы таким образом, что всегда есть только 1 вариант расположения плиток.

Не надо думать о неккоретных данных или огромных наборах данных.

З.Ы. Хочу похвастаться, что сделал я его за 3 часа 50 минут. Дополнительно отправил еще и юнит-тесты. На сколько успешно - напишу позже.

Например:

$tiles1 = array(
 "11",     // 1
 "23",
 "",
 "44",     // 2
 "11",
 "",
 "16",     // 3
 "36",
 "",
 "51",     // 4
 "71",
 "",
 "46",     // 5
 "26",
 "",
 "14",     // 6
 "68",
 0);

link_tiles($tiles1) выведет:

6 tiles
link 1
11
23
 
link 2
44
11
11
23
 
link 3
44
11
1116
2336
 
link 4
  44
5111
711116
  2336
 
link 5 // note this tile had to be rotated 180 degrees clockwise
  44
5111
71111662
  233664
 
link 6 // note this tile had to be rotated 270 degrees clockwise
  4448
511116
71111662
  233664


$tiles2 = array(
 "12", // 1
 "34",
 "",
 "36", // 2
 "15",
 "",
 "56", // 3
 "78",
 "",
 "78", // 4
 "90",
 "",
 "46", // 5
 "26",
 "",
 "88", // 6
 "01",
 "",
 "93", // 7
 "54",
 0);


link_tiles($tiles2) выведет:

7 tiles
link 1
12
34

link 2 // note this tile had to be rotated 180 degrees clockwise
5112
6334

link 3 // note this tile had to be rotated 90 degrees clockwise
755112
866334

link 4 // note this tile had to be rotated 90 degrees clockwise
97755112
08866334

link 5 // note this tile had to be rotated 270 degrees clockwise
97755112
08866334
   66
   42

link 6 // note this tile had to be rotated 90 degrees clockwise
97755112
08866334
08 66
18 42

link 7 // note this tile had to be rotated 270 degrees clockwise
97755112
08866334
08 66 34
18 42 95

$tiles3 = array(
 "11",     // 1
 "12",
 "",
 "12",     // 2
 "93",
 "",
 "93",     // 3
 "99",
 "",
 "39",     // 4
 "98",
 "",
 "95",     // 5
 "86",
 "",
 "57",     // 6
 "66",
 "",
 "77",     // 7
 "57",
 "",
 "13",     // 8
 "24",
 "",
 "45",     // 9
 "47",
 "",
 "24",     // 10
 "39",
 0);

link_tiles(tiles3) выведет:

10 tiles
link 1
11
12
 
link 2
11
12
12
93
 
link 3
11
12
12
93
93
99
 
link 4
11
12
12
93
9339
9998
 
link 5
11
12
12
93
933995
999886
 
link 6
11
12
12
93
93399557
99988666
 
link 7
11
12
12    77
93    57
93399557
99988666
 
link 8
1113
1224
12    77
93    57
93399557
99988666
 
link 9
1113
122445
12  4777
93    57
93399557
99988666
 
link 10
1113
122445
12244777
9339  57
93399557
99988666

Комментариев нет:

Отправить комментарий