Задача A. Earth VR

Автор:Dmitriy Merzlyakov   Ограничение времени:1 сек
Входной файл:input.txt   Ограничение памяти:512 Мб
Выходной файл:output.txt  
Максимальный балл:100  

Условие

Юный программист Вася работает над своим новым проектом в виртуальной реальности на Unity – он создаёт виртуальную копию нашей планеты в масштабе 1:1. Пока готово несколько небольших отдельных локаций, на которых он разметил схематичные здания, дороги, а также спроецировал изображение со спутника на поверхность. Поверхность каждой локации плоская, и направление севера совпадает с направлением оси Z в координатах Unity.

Вася планирует сделать проект многопользовательским и уже тестирует систему подключения игроков к виртуальному миру. Он хочет, чтобы пользователь сначала выбрал на карте своё местоположение, которое соответствует географическим координатам (φ,ψ), после чего тот появится на игровой сцене в координатах (x,0,z), которые соответствуют выбранному местоположению.

Допустим, первый игрок уже подключился и находится на сцене в координатах (x1, 0, z1), Положению первого игрока на сцене соответствует географическим координатам 1, ψ1). Второй пользователь выбрал на карте географические координаты 22). Помогите Васе разместить игрока на позиции в локации, которая бы соответствовала его географическим координатам.

Вася подготовил сцену и написал несколько вспомогательных скриптов, вам осталось лишь реализовать функцию SpawnCoordinates() типа Vector2 в классе Solution. Эта функция будет вызываться на старте программы, возвращать значение (x2,z2), и с её помощью Вася присвоит модели второго игрока его игровые координаты (x2, 0,z2).

Весь ваш код должен находится в классе Solution. Другие изменения в сцене учитываться не будут. Объект manager предоставляет следующие функции для работы с входными данными:

Проект доступен по этой ссылке: https://github.com/Collider24/Earth-VR, Вам осталось реализовать класс Solution. Доступно две локации для отладки вашего решения – кампус ДВФУ на острове Русский и Красная площадь в Москве. Модели локаций были получены с помощью OpenStreetMap. Решение будет проверяться на бóльшем количестве локаций, расположенных в разных частях мира.

Для тестирования своего решения вы можете изменять данные, находящиеся в файле input.txt в корне папки с проектом.

Процедура тестирования осуществляется следующим образом: выберете сцену с одной из двух локаций и откройте её. Разместите объект Test Player в произвольной точке на игровой модели, и запишите в input.txt два числа через пробел x1, z1 - компоненты позиции игрока. Далее, с помощью любого картографического сервиса найдите выбранную вами точку на карте и скопируйте её географические координаты – запишите их во вторую строку через пробел без запятой (сначала широту, затем долготу). Выберете на карте любую другую точку и запишите её координаты на третьей строке в том же формате. Запустите сцену в Unity и найдите объект Second Player. Оцените его расположение в игре с той точкой, которую вы отметили на карте – он должен попасть в радиус 5 метров от неё.

Примечания

Формат входного файла

В первой строке находится 2 числа x1 и z1 – координаты первого игрока на сцене в Unity. Во второй строке находится 2 числа φ1 и ψ1 – географические координаты первого игрока. В третьей строке находится 2 числа φ2 и ψ2 – географические координаты второго игрока.

Формат выходного файла

Выходной файл содержит два числа x2 и z2 – координаты второго игрока на сцене в Unity. Допускается любой ответ с погрешностью не более 5 метров. Реализовывать вывод в файл output.txt не нужно.

Ограничения

 − 2000 ≤ xi, zi ≤ 2000,
 − 90 ≤ φi ≤ 90, − 180 ≤ ψi ≤ 180, i ∈ {1,2}.

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
-587.68 135.34
43.03001773493322 131.89306628571381
43.029822179162174 131.8905516024877
-793.07 113.5914
2
99.26 -223.59
55.750001559564495 37.620949724754674
55.75005787416843 37.62208777500932
170.4828 -217.3285

Задача B. Чёрная дыра

Автор:Sergei Kiselev   Ограничение времени:15 сек
Входной файл:input.txt   Ограничение памяти:512 Мб
Выходной файл:output.txt  
Максимальный балл:100  

Условие

В далёкой, далёкой галактике существует Чёрная дыра, которая поглощает звёзды, чтобы увеличить свою массу. Однако, для увеличения массы подходят только новые синие звёзды, а красные массу наоборот уменьшают.

Помогите чёрной дыре поглотить все новые синие звёзды и ни одной красной.

На сцене появляются красные и синие звёзды, все они лежат на “космической материи”. Если вырезать из “космической материи” часть под звёздами, то образуется чёрная дыра и звёзды провалятся в неё.

Необходимо сделать такой вырез в “космической материи”, чтобы в образовавшуюся чёрную дыру упали только синие звёзды.

Гарантируется, что все синие звёзды лежат внутри минимальной описывающей окружности, а все красные снаружи.

Автоматически подсчитывается результат работы вашего решения - изменение массы чёрной дыры. В начале программы оно равно нулю. Каждая синяя звезда повышает изменение массы на единицу, каждая красная уменьшает на единицу.

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

Родительский класс SolutionWrapper предоставляет вам следующие методы для решения задачи:

Обратите внимание, что разрешен единственный вариант взаимодействия со сценой - добавить один дочерний объект к CSGBox3D полученный из get_matter_csg_node(). Все другие взаимодействия с объектами на сцене, а также доступ к файлам и вызов методов из класса OS не будут засчитаны.

Проект здесь, Вам нужно только реализовать класс Solution. Вы можете тестировать свои решения, изменяя данные, содержащиеся в файле input.txt в репозитории проекта.

Подсказка: Задача о наименьшей окружности (minimal enclosing circle и т.д.) имеет единственное решение. Возможность получения радиуса звёзд не используется в его нахождении.

Формат входного файла

Первая строка входного файла содержит N - количество звёзд. Далее следует список из N строк по пять чисел x, y, z, d, type описывающий звёзды (позиция, диаметр, тип). Реализовывать считывание данных с файла input.txt не нужно. Для получения данных используйте функции, доступные в классе Solution.

Формат выходного файла

Выходной файл содержит одно число - масса чёрной дыры после появления. Файл с решением должен содержать реализацию класса Solution. Реализовывать самостоятельно вывод в файл output.txt не нужно.

Ограничения

10 ≤ N ≤ 100

 − 50 ≤ x, y, z ≤ 50

1 ≤ d ≤ 8

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
10
0.0 1.5 0.0 6.0 1
-3.0 1.5 -8.0 6.0 1
-30.0 1.5 25.0 6.0 0
10.0 1.5 -6.0 6.0 1
-45.0 1.5 -30.0 6.0 0
-19.0 1.5 15.0 6.0 1
-3.0 1.5 10.0 6.0 1
40.0 1.5 30.0 6.0 0
40.0 1.5 40.0 6.0 0
40.0 1.5 -40.0 6.0 0
5
2
11
30.0 1.5 0.0 6.0 1
27.0 1.5 -8.0 6.0 1
40.0 3 -6.0 12.0 1
11.0 1.5 15.0 6.0 1
27.0 1.5 10.0 6.0 1
21.0 1.5 15.0 6.0 1
35.0 1.5 26.0 6.0 0
4.0 1.5 23.0 6.0 0
4.0 1.5 0 6.0 0
50.0 1.5 0 6.0 0
30.0 3 -20.0 12.0 0
6

Задача C. Тор с подвижными частицами

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:input.txt   Ограничение памяти:256 Мб
Выходной файл:output.txt  
Максимальный балл:100  

Условие

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

Известно, что каждая такая частица в течение всей своей жизни совершает непрерывное
прямолинейное движение с некоторой постоянной скоростью.
При столкновении с каким-либо препятствием, она отклоняется от исходной траектории,
а затем продолжает свое движение, как ни в чем не бывало.

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

Будем полагать, что тор задается радиусами направляющей R1 и образующей R2 окружностей.
Его ось вращения совпадает с осью Oz, а центр лежит в начале координат.

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

Рассмотрим поведение указанных частиц на временном интервале от 0 до T.

В процессе своего движения каждая отдельно взятая частица может то и дело сталкиваться с границей тора.
При столкновении с тором частица отражается от вектора нормали в соответствующей точке (см. рисунок).
Модуль ее скорости при этом сохраняется.

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

В качестве ответа выведите координаты положения частиц
в равноотстоящие моменты времени:
tk = k ⋅ Tm, где k = 1, 2, …, m.

Формат входного файла

В первой строке входного файла содержатся радиусы направляющей R1 и образующей R2 окружностей тора.

Во второй строке указано значение T, задающее длину временного интервала, и число его подынтервалов m.

Далее следует натуральное число n и последовательность из 6 × n вещественных чисел,
задающих начальные координаты и скорости каждой из частиц:
Xi, Yi, Zi, Ui, Vi, Wi.

Формат выходного файла

Выходной файл должен содержать координаты положения частиц в моменты времени tk,
расположенные в том же порядке, что и во входном файле.

Все значения должны быть указаны с точностью
до 5-го знака после запятой.

Ограничения

Полагается, что начальное расстояние от каждой частицы до поверхности тора ≥ 10 − 2.

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

10 ≥ (R1 − 1) ≥ R2 ≥ 1, 0 < T ≤ 10, 0 < m ≤ 10,
 − 10 ≤ (Xi, Yi, Zi, Ui, Vi, Wi) ≤ 10,
0 < n ≤ 4000

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
5.00000 2.00000
1.00000 4
3
-4.50000  2.00000  0.00000 -3.50000 -4.25000  1.50000
-1.50000  2.00000  2.00000 -0.50000 -3.00000 -4.00000
 1.00000  1.00000  1.00000  3.00000  3.00000  0.80000
-5.37500  0.93750  0.37500
-1.62500  1.25000  1.00000
 1.75000  1.75000  1.20000
-6.25000 -0.12500  0.75000
-1.75000  0.50000  0.00000
 2.50000  2.50000  1.40000
-6.28766 -1.10048  0.66906
-1.87500 -0.25000 -1.00000
 2.66100  2.66100  2.42614
-5.34270 -1.97383  0.05307
-2.00000 -1.00000 -2.00000
 2.79624  2.79624  3.48841

Задача D. Спутник

Автор:Камалов Р.О.   Ограничение времени:5 сек
Входной файл:input.txt   Ограничение памяти:1512 Мб
Выходной файл:output.png  
Максимальный балл:100  

Условие

Вам необходимо разработать 3D модель спутника.

Терминология

Корпус спутника - цилиндр радиусом - 2m, высотой - 6m, с 34 вершинами у окружности этого цилиндра. В самом корпусе находится паз высотой - 1/9 высоты цилиндра и глубиной - 0.5m. Солнечные батареи соединяются с корпусом параллелепипедами высотой - 0.5m, шириной - 0.5m, толщиной - 0.369m. Между параллелепипедами есть расстояние в 1m. Сами же солнечные батареи представляют из себя параллелепипеды высотой - 5m, шириной - 4m, толщиной - 0.5m. Солнечные батареи располагаются параллельно оси Ox. Двигатель - усеченный конус, радиус меньшего основания конуса - 1m, радиус большего основания конуса - 2m, высота - 2m. Спутниковая антенна - полая полусфера радиусом - 2m. Приемник - сфера радиусом - 0.2m. Расстояние между основанием тарелки антенны и приемником - 2.8m. Расположение модели относительно начала центра координат смотри на рис. 6.

Модель проверяется на основе попиксельного сравнения рендеров с указанных во входном файле ракурсов. Используется этот материал. Файл с материалом должен называться solve.mtl. В качестве метрики для сравнения рендеров моделей используется величина dssim по каждому цветовому каналу. Баллы за каждый тест начисляются в зависимости от величины метрики.

Рис. 1
Рис. 2
Рис. 3
Рис. 4
Рис. 5
Рис. 6

Источник света:

TypeSun
Color(255, 255, 255)
Specular1.00
Strength10.0
Angle180
Location(0 m, 0 m, 20 m)
Rotation(0, 0, 0)

Камера:

Focal Length50mm

Render Engine: Eevee

Формат входного файла

Во входном файле содержатся x, y, z — координаты камеры в метрах и rx, ry, rz — углы поворота в радианах.

Формат выходного файла

В качестве решения следует отправлять файл формата OBJ (расширение .obj). Размер файла не должен превышать 999997 Байт.

Примеры тестов

Входной файл (input.txt) Выходной файл (output.png)
1
0 22 6
1.570796 0 3.141593
Смотри рис. 1
2
13 13 6
1.570796 0 2.443461
Смотри рис. 4
3
13 13 17
1.047198 2.408554
Смотри рис. 5

0.517s 0.009s 37