воскресенье, 3 июля 2016 г.

Pathfinder 80 lvl или наш бюджетный полет в Мюнхен


Летом 2011 года выпало нам с коллегами лететь в Мюнхен к партнерам по одному замечательному проекту. Таких командировок за пол-года было много, но эта - самая запоминающаяся :)

Мы летели вчетвером: Виталик, его жена Леся (за компанию), Максим и я. На этот раз решили протестировать перелет low-cost компанией WizzAir, которая летала из Жулян в Мемминген (100 км западнее Мюнхена). Обычно мы летали Lufthansa: утренним рейсом вылетел, вечерним вернулся - разве что не выспался. При необходимости, можно было слетать на день и не брать отель. Но, даже с отелем и арендой машины вчетвером было дешевле слетать WizzAir.

За несколько дней до перелета мы купили билеты, зарезервировали отель на booking.com и сняли машину. Мы даже потратились на priority pass, что позволило первыми зайти в самолет и выбирать места.

Полет и посадка в Меммингене прошли замечательно. Виталик забрал машину со стоянки, мы погрузились в нее и тронулись в путь. Был уже поздний вечер и мы, резонно посчитав, что в Мюнхене вряд ли что-то будет открыто, заехали на заправку поужинать. Успели как раз перед закрытием. Подкрепившись, поехали дальше.

Я увидел на трассе съезд Munchen-West и спросил Виталика:
 А с какой стороны нам въезжать в Мюнхен?
 Не знаю,  как-то буднично сказал Виталик.

Повисло неловкое молчание. 
 Виталик, что ты имеешь в виду?
 Я не смотрел,  Виталик продолжал вглядываться в ночую трассу.

Промелькнул еще один съезд в Мюнхен. Напряжение нарастало.
 Виталик, а у тебя есть карта, адрес?
 Адрес есть в документах по отелю. Карты нет.
 Гм, у меня была карта центра, но она в багажнике.
 Да, бронь отеля  тоже в багажнике.

Проехали еще один съезд с трассы. Начинаем обдумывать ситуацию. Ни навигатора, ни мобильного интернета у нас нет. Вечер перестает быть томным.
 Виталик, может остановимся, глянем на карту?
 На трассе нельзя.

Проехали еще один съезд на какую-то улицу. Хайвей начинает сужаться до двух полос в каждом направлении. Через какое-то время мы заехали в город, по сути так и не съехав с трассы. Мюнхен встретил нас светящимися фонарями и витринами автосалонов, но пустыми улицами. 
Ой, Виталик, если бы мы сейчас повернули направо, мы бы хоть в направлении центра поехали бы, там знак был!
Что же ты раньше не сказал?

Мы спустились в какой-то туннель. 
 Виталик, может все-таки встанем где-то сориентируемся на местности?
 Да, сейчас найдем,  сказал Виталик и пропустил отличное место. 

С парковкой было трудно. На ночь на отведенных вдоль дороги местах плотно припарковались немцы и гости Баварии.
 Виталик, Виталик! Вон свободное место!

Подъезжаем, а это не парковочное место, а выезд со двора. Но мы единогласно решаем, что можем туда встать, ведь если что - мы отъедем. Я иду за документами. Отдаю Виталику его сумку, нахожу свою карту. Я помнил, что когда мы с Виталиком выбирали отель, он находился возле парка, на карте вижу подобные очертания и выдвигаю предположение, что отель называется Seibel. 
 Действительно, Seibel,  отвечает Виталик, адрес: Theresienhöhe 9.
 Ой, так вот же Theresienhöhe 9,  сказал Макс.
 А вот Seibel...  сказала Леся.

Мы встали напротив выезда из собственного отеля, загородив его ворота! Несколько десятков секунд мы просто молчали пытаясь проникнуться моментом.
М-да,  сказал Макс, Виталик, ты pathfinder восьмедисятого уровня!


Мысль причастности к какому-то чуду не покидала нас до следующего дня, пока мы не осознали, что отель находится напротив корпусов Oktoberfest-а и Виталика сюда привели какие-то инстинкты. Пусть на дворе и был еще только август...

пятница, 1 июля 2016 г.

Гибралтар, Upper Rock и Обезьяны

Гибралтарский Йети

Гибралтар - это мекка игровой он-лайн индустрии. Компании здесь имеют законодательные преференции, поэтому на небольшой территории расположены сразу несколько ведущих on-line gambling фирм. Дело было в марте 2011 года, когда нас с коллегой (назовем его Сергеем) отправили проведать офис на Гибралтаре. Проникнуться, так сказать. 

Визы

Гибралтар считается overseas territory Британии, поэтому мы отправились в Британское консульство за соответствующей визой. Процесс занял несколько недель, и мы даже начали переживать за то, что успеем все сделать во-время. Маршрут был такой. Перелет Киев-Париж-Малага, а оттуда машиной на полуостров. Соответственно, после получения британской визы на Гибралтар нам необходимо было получить шенгенскую визу для предъявления в аэропорту Шарль де Голь (Париж). Мы обратились в визовый центр Франции. Нас пытались перенаправить в Испанский, мотивируя это тем, что мы там будем "дольше". Но мы сослались на то, что это все транзит, что первый въезд в шенгенскую зону во Францию, да и нет у нас времени уже, чтобы переоформлять документы и записываться туда. Помогло, и документы у нас приняли. 

В установленный срок, за пару дней до планируемого вылеты мы с Сергеем забрали документы в визовом центре. Ему дали мульти-визу на несколько дней, как раз на промежуток пребывания. Мне дали визу на один въезд, но на пару месяцев. Один въезд! Я обратился к консультанту:

— Как же так? Мы одинаково заполнили документы, а мне выдали визу всего на один въезд.
— Это решение Посольства.
— Т.е. там решили, что я не должен возвращаться?
— В смысле?
— Ну смотрите! Я лечу в Париж, использую свой один въезд, затем лечу в Малагу, локально по шенгену, потом еду на Гибралтар. И... при пересечении границы покидаю пределы шенгенской зоны! Соответственно, когда я буду возвращаться, меня просто не пустят в шенген!
— Ой! А что же делать?
— Это я вас хочу спросить...
— Ожидайте, я свяжусь с Посольством!

Мне пришлось побродить вокруг визового центра несколько часов, пока вопрос был решен и мне предложено на следующий день подойти в Посольство Франции. Там меня спросили какую визу я хочу, устраивает ли меня то, что дали Сергею, аннулировали старую и впечатали новую. Успел!

Дорога

На стыковку в Париже отводилось всего минут 50. А бежать пришлось с одного конца аэропорта в другой, попутно проходя всякого рода контроли. Где-то в середине наш путь преградила уборщица, которая жестами объяснила, что дальше "дороги нет". Мы совместно с другими пассажирами возражали, что нам нужно именно туда, но она и подоспевший охранник были непреклонны. Всем предложили присесть в зале ожидания. Какое-то время мы подождали, но напряжение возрастало. Мы обнаружили, что заблокированный коридор можно обойти, если спуститься этажом ниже. Успели!

В Малаге нас встретили и по красивой дороге вдоль моря отвезли на Гибралтар. На границе, правда, у нас забрали паспорта и вместо этого выдали какие-то небольшие бумажки. Удивительно, конечно.

Приехали мы ночью. Нам выдали ключи от небольших квартир в доме напротив офиса и мы разобравшись как в него попасть, поселились.

Гостиная на съемной квартире

Свободное время

Работники офиса на Гибралтаре — ребята достаточно пунктуальные, поэтому часов в 6 все разбегались. Да и нам не было большого смысла сидеть. У нас начиналось Свободное Время. Всего таких вечеров было четыре. Три из них мы посвятили походам на Upper Rock — красивую гору, занимающую большую часть полуострова, и прогулкам по городской части. Дня вполне достаточно, чтобы обойти практически всю территорию. Мы так ни разу и не воспользовались транспортом.

Кроме красивых видов, которые открываются с Гибралтарской горы (Upper Rock), ее достопримечательностью являются свободно разгуливающие обезьяны. Оказаться поздним вечером одному в их окружении — достаточно страшно.

Один вечер мы "по работе" сходили в местное казино. В казино, мы попали на розыгрыш Бинго. То, что выпадает объявляется на английском и на испанском. Сидит целый зал бабушек и мы :)

Питание

Мы с Сергеем расходимся во вкусах к еде, поэтому часто питались отдельно. Сергей очень любит острое. У него даже есть своя трехуровневая градация:

  1. Когда течет из носа.
  2. Когда течет из носа и глаз (предпочтителен для Сергея)
  3. Когда еда прошла весь путь в организме, но напоследок опять печет.

Если обедали мы обычно в фудкорте единственного Гибралтарского шоппинг-молла, то ужинал Сергей часто в индийской кафешке недалеко от офиса. Уровень остроты им удавалось выдерживать и в еде и в подаче — один раз Сергею принесли котлету в руке.

Также один раз мы посетили китайский ресторан. Хозяину удалось удивить нас дважды. Сергею, вопреки ожиданиям и просьбам, сделали недостаточно острое блюдо. Хозяин обещал следующий раз использовать секретный перец, который точно сработает. Мол, в этот раз не стал, пожалел :)

Во-вторых, он сразу определил, что мы не просто так, а работаем на компанию в игровой индустрии. Более того, когда мы сказали какую, он выдал нам некий инсайд по поводу планировавшихся на тот момент сделок на уровне высшего руководства. На наш немой (или прямой?) вопрос он ответил, что тоже приехал сюда работать в гемблинг, но затем решил сменить специализацию.

Путь домой

Ранним утром выехали. На границе попытался пошутить, мол, теперь-то вы поняли, что украинцы законопослушные, и можно нам паспорта оставлять. На что британский пограничник достаточно отстраненно ответил, мол, как забирали так и будем забирать. Служба - тут не до шуток.

В целом, добрались домой без особых потерь, если не считать сыра "камамбер", который забрала у Сергея из ручной клади французская служба безопасности.

Порт Гибралтара
Вид на Испанию. Граница проходит в районе взлетно-посадочной полосы
Вид с Горы на центр Гибралтара
Еще один взгляд вниз

Гибралтарская чайка на фоне северной вершины Upper Rock

пятница, 18 марта 2016 г.

План подготовки к олимпиадам по информатике

Данный материал был подготовлен мной в начале двухтысячных и сейчас может быть не вполне актуален, но, все же, как некоторый базис может быть использован.


Тема 1. Математические основы программирования

Тема отдельной дискуссии.

Тема 2. Техника программирования

1. Основы языка программирования (Паскаль, Си) Переменные и простейшие типы данных, размеры типов. Линейные программы. Условные операторы. Циклы. Процедуры и функции. Сложные типы данных (массивы, строки, записи, указатели, файлы).
2. Массивы Одномерные массивы. Двумерные массивы (матрицы). Многомерные массивы.
3. Строки. Элементы лексического и синтаксического разбора Операции над строками. Лексемы, подсчет лексем различных типов. Выделение чисел из строки.
4. Работа с файлами Чтение и запись в текстовый файл. Преобразование полученных из файла данных в удобную структуру. Работа с типизированными файлами. Нетипизированные файлы. Буферизация ввода.
5. Рекурсия Математические функции, задаваемые рекурсивно. Примеры рекурсивных подпрограмм. Проблема остановки рекурсии. Замена рекурсии итерацией.
6. "Длинная" арифметика Хранение в программе чисел, которые не вмещаются в стандартные типы. Арифметические операции над "длинными" числами. "Длинные" числа с десятичной частью. Извлечение корня с заданной точностью.
7. Хранение информации в динамической памяти. Хранение набора данных в линейных списках. Вставка в список, удаление из списка, поиск элемента в списке. Двусвязные списки. Понятия структур данных стека, кольца, очереди, дека; реализация их с помощью динамической памяти. Двоичные деревья. Деревья с неопределенным числом потомков. Хранение больших массивов.

Тема 3. Алгоритмы, методы и принципы решения задач

1. Понятие сложности алгоритма. Определение сложности. Классы задач P и NP. NP-полные задачи.
2. Алгоритмы поиска и сортировки Поиск элемента в неупорядоченном массиве. Двоичный поиск по ключу в упорядоченном массиве (дихотомия). Поиск методом Фибоначчи. Поиск в упорядоченном n-мерном массиве. Поиск k-го по величине элемента массива. Простые методы сортировки ("пузырек", "выборка", "вставка", "подсчет"). Быстрые методы ("быстрая", "слиянием", "пирамидальная"), балансировка двоичных деревьев. Сортировка методом черпака.
3. Решение задач методом перебора вариантов. Применение рекурсии для перебора. Генерация сочетаний, размещений, перестановок и булеана множества. Полный перебор. Отсечение вариантов (эвристики). Метод ветвей и границ.
4. Вычислительная геометрия и численные методы. Длина отрезка. Уравнение прямой. Скалярное и векторное произведение. Точка пересечения отрезков. Принадлежность точки фигуре на плоскости (например: треугольнику). Площадь выпуклого многоугольника. Выпуклая оболочка множества точек: алгоритмы Грэхема, Джарвиса, "разделяй и властвуй". Ближайшая пара точек. Метод Гаусса для решения системы линейных уравнений. Нахождение решения уравнения.
5. Принцип динамического программирования. Понятие, применимость. Сравнение с перебором.
6. Жадные алгоритмы. Понятие, применимость. Сравнение с перебором и динамическим программированием.
7. Теория графов. Алгоритмы на графах Понятие графа. Определения теории графов. Структуры данных для представления графа в программе. Алгоритмы обхода графа (поиски в ширину и глубину). Лабиринт (метод волны). Эйлеров цикл. Кратчайший путь во взвешенном графе (алгоритмы Дейкстры и Минти). Транзитивное замыкание графа (алгоритм Флойда-Уоршилла). Минимальное остовное дерево (алгоритмы Прима и Краскала). Топологическая сортировка графа. Потоки в сетях (алгоритм Форда-Фалкерсона). Паросочетания в двудольном графе (метод удлиняющей цепочки, потоковое решение). Задача о назначениях, назначения на узкое место (венгерский алгоритм). Игры на графах. Раскраска графа. Уложение графа на плоскости. Сильная связность и двусвязность графа. Изоморфизм графов. K-клика. Гамильтонов цикл.
8. Лексический и синтаксический анализ Задача "Калькулятор". Синтаксические диаграммы. Формы Бэкуса-Наура. Стековая и рекурсивная модель синтаксического разбора. Конечные автоматы. Грамматики.
9. Задачи с "изюминками".

Тема 4. Олимпиады по информатике

1. Правила проведения олимпиад по программированию
2. Типичные ошибки и отладка программ
3. Приемы олимпиадника