Если мы заранее знаем размеры лабиринта (или можем их прочитать), то нужно просто записывать по адресу matrix[n – i – 1][j] (можно прибавить к каждому индексу по единице, чтобы нумерация шла с 1, но тогда и памяти нужно выделять больше — (n + 1) * (m + 1)).
Если размеры матрицы заранее неизвестны, а определить ее размерность мы должны в процессе чтения, то лучше, думаю, прочитать матрицу как обычно, а потом завернуть в класс с методами get и set (или, если позволяет язык, установить геттеры и сеттеры), в которых уже производить необходимые смещения, исходя из размеров матрицы, которые будут храниться в том же классе.
Сомневаюсь, что что-либо получится. Сроки сжаты, а опыта работы в команде (не той, что сидит в офисе, а той, которая соберется здесь) у хабравчан нет (опять же имеется в виду опыт работы хабром, а не какой-нибудь другой командой). Ну и банальное координирование проекта займет время.
Про Python 3 рассказывает Саммерфилд, но сказать, насколько подробно и полно — не могу.
«Марк Саммерфилд — Программирование на Python 3. Подробное руководство». В книге ~600 страниц.
Искать родительский документ (смотреть на window.parent.location.url, нужно чтобы он соответствовал адресу страницы с фреймсетом). Если он не найден, редиректить на страницу с фреймсетом.