#6 - Обзор Codingame


THE LAST CRUSADE - EPISODE 1

Последний крестовый поход - Эпизод 1

В эпизоде 1, наша задача заключается в том, чтобы предсказать маршрут по которому будет следовать Индиана Джонс. Цель этого эпизода ознакомительная, как я полагаю, чтобы в эпизоде 2, мы уже имели некий опыт работы с этими тоннелями, так как решение первого эпизода достаточно простое. 

Правила:
Тоннель состоит из комнат различного типа. Всего есть 14 типов комнат (6 базовых, расширенных с помощью поворота до 14-ти). Войти в комнату Индиана может с трех сторон (TOP, LEFT, RIGHT), из которой он может либо выйти, либо разбиться. Возможности мешкать нет, или идешь без остановок или умираешь.
Ниже представлены все типы комнат:

Type 0
По факту, типом комнаты не является, так как двигаться по ней нельзя. 

Type 1
Зеленые стрелки, показывают возможные пути следования Индианы через эту комнату.

Type 2

Type 3
Комната 3 подобна комнате 2, только перевернута.

Type 4

Type 5
Красными стрелками показаны пути которые Индиана не может использовать.

Type 6

Type 7

Type 8

Type 9

Type 10

Type 11

Type 12

Type 13

Индиана постоянно движется вниз, если это позволяет комната, или же вправо или влево, но никак не вверх.
В начале игры, нам дается карта, в ввиде прямоугольной таблицы, в каждой ячейке которой указан номер типа комнаты. Как было уже сказано, в эпизоде 1 мы знакомимся с картой, все комнаты в этом эпизоде устроены так что Индиана имеет безопасный, непрерывный путь между начальной точкой(верхняя часть храма) и конечной точкой, выходом (нижняя часть храма).
На каждой итерации игры:
  • Мы получаем текущую позицию Индианы
  • Затем мы указываем следующую позицию Индианы
  • Затем Индиана перемещается в следующую комнату, в соответствии с правилами.
Пример:
Индиана начинает с комнаты (1,0),
затем, он падает вниз, в комнату (1,1) и двигается в (0,1).
После этого, он  падает в (0,2) и двигается в (1,2).
Наконец то он попадает в комнату (1,3) от куда можно безопасно убежать.

Ограничения:
0 <  Ширина сетки <= 20 (W)
0 <  Высота сетки <= 20   (H)
0 <= Типов комнат <=13  (T)
0 <= Координата вдоль оси Х < W (EX) (в первом эпизоде не используется)
0 <= Координата по оси X < W (XI, X)
0 <= Координата по оси Y < H (YI, Y)

Набор тестовых данных (размеры сетки, и типы комнат):

01 - Well
3 3
0 3 0 
0 3 0 
0 3 0 

02 - Sewer
8 4
0 3 0 0 0 0 0 0 
0 11 2 2 2 2 13 0 
0 0 0 0 0 0 3 0 
0 12 2 2 2 2 10 0

03 - Secret Pathways
6 8
0 0 0 0 0 3 
8 2 2 2 2 10 
3 0 0 0 12 13 
11 2 2 2 1 10 
2 13 0 0 3 0 
0 7 2 2 4 13 
0 3 0 12 4 10 
0 11 2 5 10 0

04 - Labyrinth
13 10
3 12 8 6 2 2 8 2 9 0 0 0 0
11 5 10 0 0 0 3 0 3 0 0 0 0 
0 11 2 2 2 2 6 2 1 2 2 13 0 
0 0 0 0 0 12 8 2 1 2 2 9 0 
0 0 12 2 2 1 4 2 10 0 0 11 13 
0 0 3 0 0 7 9 0 0 0 0 0 3 
0 0 11 2 2 10 11 2 2 2 2 2 9 
0 12 8 2 2 2 2 8 2 2 2 2 10 
0 11 4 2 2 2 2 10 12 13 12 13 0 
0 0 3 12 8 8 13 12 4 5 5 10 0 

05 - Mausoleum
9 15
0 0 0 0 3 0 0 0 0 
0 12 2 2 10 12 2 13 0 
12 10 0 0 0 11 2 9 0 
11 2 2 2 2 2 13 3 0 
0 12 8 8 8 13 3 3 0 
12 4 5 1 10 3 3 3 0 
3 7 1 4 13 7 5 6 13 
11 10 3 7 10 11 4 8 4 
0 12 6 10 12 2 6 10 3 
12 1 2 2 10 12 8 8 10 
7 10 0 0 0 7 1 4 2 
3 0 0 12 13 7 9 3 0 
11 2 2 5 6 4 5 10 0 
0 0 12 5 13 3 3 0 0 
0 0 11 10 3 11 10 0 0 




MAYAN CALCULATION



Суть задачи в том чтобы произвести простые арифметические операции над двумя числами Майя. Система счисления у народа Майя предствалена двадцатеричной системой. То есть в одном символе может быть представлено 20 вариантов. 
Для начала давайте посмотрим на то, какие популярные системы счисления используются.

2 - двоичная. Используется в информатике, дискретной математике, программировании. Система счисления с основанием 2. В одном разряде может быть один из двух возможных вариантов. 0 или 1, правда или ложь, плюс или минус. В 8 разрядах можно представить 256 вариантов. 2^8 = 256.
3 - троичная. Система с основанием 3. В одном разряде может быть один из трех вариантов. В 8 разрядах можно представить 6561 вариантов. 3^8 = 6561
8 - восьмеричная. Чаще всего используется в областях связанных с цифровыми устройствами, в силу того что легко перевести восмеричное представление в двоичное и обратно. Однако, позже была вытеснена шеснадцатиричной системой, числа из которых легко перевести в двоичное предстваление и обратно. В восьми разрадах можно представить 8^8 = 16777216 вариантов.
10 - десятичная. Используется повсеместно. Предполагается, что основание 10 связано с тем что у человека 10 пальцев на руках.В восьми разрядах можно представить 10^8 = 100000000 вариантов.
12 - двенадцатеричная. (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B.) или (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, T, D.) Счет дюжинами. Предполагается, что такая система возникла, исходя из количества фаланг четырёх пальцев руки (исключая большой) при подсчёте их большим пальцем той же руки. На практике используется в часах(в смешанном виде). В восьми разрядах можно представить 12^8 = 429981696 вариантов.
16 - шеснадцатиричная. (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Используется в программировании, в компьютерах в которых минимальной адресуемой единицей памяти является 8-битный байт. В восьми разрядах можно представить 16^8 = 4294967296 вариантов.
20 - двадцатеричная. Двадцатеричная система используется во многих языках, в частности в языке йоруба, у тлинкитов, в системе записи чисел майя, некоторых кавказских и азиатских языках. Во многих (в основном европейских) языках используется основание 20, по крайней мере в лингвистической структуре. В восьми разрядах можно представить 
20^8 = 25600000000 вариантов.
60 — шестидесятеричная. Изобретена шумерами в III тысячелетии до н. э., использовалась в древние времена на Ближнем Востоке. В современном мире это единицы измерения времени, измерение углов и, в частности, координат, долготы и широты. В восьми разрядах можно представить 
60^8 = 167961600000000 вариантов.

Думаю тем кому были не знакомы системы счисления, уже имеют представление о том что это такое.
Система счисления Майя содержит числа 20 цифр, от 0 до 19, ASCII представление этих чисел смотрите ниже:
0123456789
.oo.
o..o
.oo.
....
o...
....
....
....
oo..
....
....
....
ooo.
....
....
....
oooo
....
....
....
....
----
....
....
o...
----
....
....
oo..
----
....
....
ooo.
----
....
....
oooo
----
....
....
10111213141516171819
....
----
----
....
o...
----
----
....
oo..
----
----
....
ooo.
----
----
....
oooo
----
----
....
....
----
----
----
o...
----
----
----
oo..
----
----
----
ooo.
----
----
----
oooo
----
----
----
Ниже, в системе счисления Майя представлено число 4805.
Берем первый символ(самый верхний), и находим его соответствие в таблице, получаем 12.
так как разряда 3, считаем его номер, начиная с нуля, справа налево, получаем номер разряда 2. Значит 12*20^2
Берем второй символ(средина),  и находим его соответствие в таблице, получаем 0. Считаем его номер, начиная с нуля, справа налево, получаем номер разряда 1. Значит 0*20^1
Берем третий символ(нижний),  и находим его соответствие в таблице, получаем 5. Считаем его номер, начиная с нуля, справа налево, получаем номер разряда 0. Значит 5*20^0.
Итого - 12*20^2 + 0*20^1 + 5*20^0 = 4800 + 0 + 5 = 4805

Рассмотрим второй пример:
oooo  oooo  o...  o...
----  ....  ....  ----
----  ....  ....  ....
----  ....  ....  ....

19*20^3 + 4*20^2 + 1*20^1 + 6*20^0 = 153626

Ваша задача прочитать 2 числа в этой системе, выполнить над ними одну из арифметических операций (*, /, +, -) и выдать результат в той-же системе.

Ограничения.
0 < Ширина и Высота представления одного разряда (L, H) < 100
0 < Колличество строк для одного числа и второго(S1, S2) < 1000

К примеру, ширина и высота одного символа 4. Далее мы считываем информацию по первому числу, к примеру S1 равен 20. Это значит что далее идет 20 строк с первым числом, 20 / 4 = 5 разрядов. Значит первое число состоит из 5 символов. Аналогично для второго числа.






Комментарии

  1. Спасибо, весьма познавательно, но если честно то хотелось бы увидеть реализацию паттернов :)

    ОтветитьУдалить
    Ответы
    1. Понял, в ближайшее время что-то сделаю по парочке паттернов.

      Удалить

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