Планета Торус
Планета Торус имеет тороидальную поверхность. Если эту поверхность развернуть (спроецировать) на плоскость в координатах Меркадота, то страны на этой карте будут выглядеть как ячейки “таблицы” с числом столбцов равным 7. Согласно 28-ричной системе исчисления, принятой на планете, страны именуются следующим образом:
T00 | T01 | … | T06 |
T10 | T11 | … | T16 |
… | |||
TA0 | TA1 | … | TA6 |
… | |||
TR0 | TR1 | … | TR6 |
Меркадот – знаменитый путешественник и картограф, живший в стране T00 и разработавший карты планеты, наименее искажающие углы и расстояния. Все страны на Торусе примерно равноправны с точки зрения топологии, поэтому Меркадот разработал единую систему карт для планеты Торус. В этой системе схема карты для страны TR6, например, выглядит следующим образом:
TR6 | TR0 | … | TR5 |
T06 | T00 | … | T05 |
… | |||
TQ6 | TQ0 | … | TQ5 |
В силу особенностей тороидальной поверхности оказывается, что страна T00, как и всякая другая страна на планете, граничит с 8-ю другими странами, а вовсе не с тремя.
На Торусе для обозначения соседних стран используются единообразные аббревиатуры. Так, например, в стране T00 о стране TR0 всегда говорили как о северном (NN) соседе, о TR6 как о северо-западном (NW) соседе и так далее (следуя против хода часовой стрелки). Подобным образом (NN, NW, WW, SW, SS, SE, EE, NE) обозначают своих соседей и другие страны. Возможно, это связано с направлением магнитных полей планеты.
В результате развития цивилизации в торусианской галактике было обнаружено немало тороидальных планет, названия которых имеют следующие обозначения в астрономическом каталоге: Torus MxN, M - число областей по вертикали (широте), а N - число областей по горизонтали (долготе), т.е. общее число областей на такой планете равно MxN. При этом области не всегда представляют собой страны, как это имеет место на планете Торус, которая в данной классификации обозначается как Torus 28x7.
До последнего времени самой большой (по числу областей) из обнаруженных планет являлся Torus 36x36. Для описания ее топологии торусианцы придумали 36-ричную математическую систему исчисления BASE 36. Согласно этой системе, области на Торус 36x36 имеют аббревиатуры от T00 до TZZ.
С тех пор как среди участников соревнований на сайте sql-ex.ru появились торусианцы, стала доступной новая информация об их галактике Лорус (Lorus). Например, оказалось, что Torus 36x36 - не самая большая планета этой системы. В целях культурного обмена, немало фактологических данных из исторических хроник Torus было занесено в основные и проверочные базы сайта (Painting, Ships и прочих).
Из условий задач на sql-ex становится известным, что единицей длины на Торусе является торометр, а единой валютой – торобакс. Основой жизни там является вода и ее разновидность – лед. В условиях задач приводятся основные сведения о физико-химических характеристиках, экономических и политических системах планет Torus MxN.
Рассмотрим задачу про Торус, в которой мы вообще не будем привязываться ни к одной из “обычных” баз, и предложим следующее “универсальное” условие.
Соседние страны на Торусе 3x7
Для каждой из стран планеты Торус 3x7:
T00 T01 … T06
T10 T11 … T16
T20 T21 … T26
найти список всех соседних стран, с которыми она имеет границу ненулевой длины. Решение привести в виде таблицы из пяти колонок: [State] [NN] [WW] [SS] [EE].
Подсказка. Вот как выглядит ответ для обычного (нетороидального) случая.
State | NN | WW | SS | EE |
---|---|---|---|---|
T00 | NULL | NULL | T10 | T01 |
T01 | NULL | T00 | T11 | T02 |
T02 | NULL | T01 | T12 | T03 |
T03 | NULL | T02 | T13 | T04 |
T04 | NULL | T03 | T14 | T05 |
T05 | NULL | T04 | T15 | T06 |
T06 | NULL | T05 | T16 | NULL |
T10 | T00 | NULL | T20 | T11 |
T11 | T01 | T10 | T21 | T12 |
T12 | T02 | T11 | T22 | T13 |
T13 | T03 | T12 | T23 | T14 |
T14 | T04 | T13 | T24 | T15 |
T15 | T05 | T14 | T25 | T16 |
T16 | T06 | T15 | T26 | NULL |
T20 | T10 | NULL | NULL | T21 |
T21 | T11 | T20 | NULL | T22 |
T22 | T12 | T21 | NULL | T23 |
T23 | T13 | T22 | NULL | T24 |
T24 | T14 | T23 | NULL | T25 |
T25 | T15 | T24 | NULL | T26 |
T26 | T16 | T25 | NULL | NULL |
Решение для тороидального случая.
select
'T'+cast(i as varchar)+cast(j as varchar) [State]
,'T'+cast(k1 as varchar)+cast(j1 as varchar) [NN]
,'T'+cast(i2 as varchar)+cast(k2 as varchar) [WW]
,'T'+cast(k4 as varchar)+cast(j4 as varchar) [SS]
,'T'+cast(i3 as varchar)+cast(k3 as varchar) [EE]
from (select j=0 union all select 1 union all select 2 union all select 3 union all
select 4 union all select 5 union all select 6)J
cross join (select i=0 union all select 1 union all select 2)I
cross apply(select i1=i-1,j1=j,i2=i,j2=j-1,i3=i,j3=j+1,i4=i+1,j4=j)D
cross apply(select
k1=case when i1<0 then 2 else i1 end
,k2=case when j2<0 then 6 else j2 end
,k3=case when j3>6 then 0 else j3 end
,k4=case when i4>2 then 0 else i4 end
)E;
[[ column ]] |
---|
[[ value ]] |
Правильный ответ:
State | NN | WW | SS | EE |
---|---|---|---|---|
T00 | T20 | T06 | T10 | T01 |
T01 | T21 | T00 | T11 | T02 |
T02 | T22 | T01 | T12 | T03 |
T03 | T23 | T02 | T13 | T04 |
T04 | T24 | T03 | T14 | T05 |
T05 | T25 | T04 | T15 | T06 |
T06 | T26 | T05 | T16 | T00 |
T10 | T00 | T16 | T20 | T11 |
T11 | T01 | T10 | T21 | T12 |
T12 | T02 | T11 | T22 | T13 |
T13 | T03 | T12 | T23 | T14 |
T14 | T04 | T13 | T24 | T15 |
T15 | T05 | T14 | T25 | T16 |
T16 | T06 | T15 | T26 | T10 |
T20 | T10 | T26 | T00 | T21 |
T21 | T11 | T20 | T01 | T22 |
T22 | T12 | T21 | T02 | T23 |
T23 | T13 | T22 | T03 | T24 |
T24 | T14 | T23 | T04 | T25 |
T25 | T15 | T24 | T05 | T26 |
T26 | T16 | T25 | T06 | T20 |