Вам дают кучу весов, и ваша задача - создать небольшой сбалансированный мобильный телефон, используя эти веса.
Входные данные представляют собой список целых весов в диапазоне от 1 до 9 включительно. Там могут быть дубликаты.
Вывод представляет собой изображение ASCII мобильного телефона, который при зависании будет сбалансирован. Возможно, лучше всего показать на примере:
вход
3 8 9 7 5
возможный вывод
|
+-----+---------+
| |
+--+-+ +----+------+
| | | |
8 ++--+ 7 5
| |
9 3
Вы должны использовать символы ascii, как показано на рисунке. Горизонтальные и вертикальные сегменты могут быть любой длины. Никакая часть мобильного телефона не может касаться (по горизонтали или вертикали) другой неподключенной части мобильного телефона. Все веса должны быть подвешены на вертикальном отрезке длиной не менее 1, и должен быть вертикальный отрезок, на котором подвешен весь мобильный телефон.
Размер мобильного телефона является общим количеством +
, -
и |
символами , необходимым для создания его. Чем меньше размеры, тем лучше.
Вы можете разместить столько соединений в сегменте, сколько захотите. Например:
вход
2 3 3 5 3 9
возможный вывод
|
+---+---+-----------+
| | |
+--+-+ 5 9
| | |
2 | 3
|
+++
| |
3 3
Победившая программа - та, которая может генерировать наименьшее среднее число мобильных размеров для тестового набора входных данных. Настоящий тест является суперсекретным, чтобы предотвратить жесткое кодирование, но это будет что-то вроде этого:
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 7 7
3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7
total_weight_hung_from_point * distance_of_point_from_pivot
должна быть одинаковой с обеих сторон от точки поворота.