Маленький Чендлер грустный. Нарисуй ему облако, чтобы подбодрить его.
Примечание: рисование облака на самом деле не поднимет его настроение.
Круг может быть определен как 3-кортеж, (x,y,r)
где x
- это положение x круга на декартовой плоскости, y
это положение y круга на декартовой плоскости и r
радиус этого круга. x
и y
может быть отрицательным. r
всегда позитивно Вход представляет собой список окружностей в виде разделенных пробелами 3-х кортежей. Например:
3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8
В 3,1,1
означает «круг с центральной точкой на 3,1
1 радиус. 3,2,1.5
Означает» круг с центральной точкой на 3,2
1,5 радиуса.
Если мы нарисуем все эти круги ввода на графике, это будет выглядеть так (я добавил линии сетки и метки только для ясности; они не обязательны):
Обратите внимание, как все круги сплочены . То есть все они перекрываются друг с другом, так что он образует одну большую группу без каких-либо маленьких групп кругов, отделенных от остальных. Вход гарантированно будет согласованным.
Предположим теперь, что мы нарисуем линию, которая проходит вокруг «границы», образованной этими кругами, без каких-либо других линий. Это все равно что нарисовать границу силуэта, образованного всеми кругами. Получившееся облако будет выглядеть примерно так:
Таким образом, это облако было сформировано путем рисования только дуг окружностей на входе, которые образуют границу, в результате чего получается единая фигура. Другими словами, облако формируется только путем рисования дуг, которые не находятся внутри другого круга. Ваша программа примет входные данные в форме, описанной выше, и выведет изображение, отображающее полученное облако. Общая форма облака должна быть правильной, но масштаб, цвет, толщина линий и то, как они выглядят на вершинах, зависит от вас. Обратите внимание, что облако должно быть видимым, поэтому вы не можете нарисовать что-то вроде «Эта программа рисует белое облако на белом фоне», «Эта программа рисует облако в бесконечно малом масштабе», «Эта программа рисует облако с 0 толщина линии »и т. д. Также обратите внимание, что цвет рамки должен отличаться от цвета заливки или фона.
Другой пример. Входные данные:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7
Выход:
Если в облаке есть «дыра», вы также должны нарисовать эту дыру. Входные данные:
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
Выход:
Вот важное правило: ваша программа должна рисовать только те линии, которые образуют границу. Это означает, что вы НЕ МОЖЕТЕ просто нарисовать круги полностью, а затем нарисовать круги немного меньшего размера с белой заливкой - потому что этот метод по-прежнему рисует линии, которые не образуют границы, он просто покрывает их впоследствии. Цель правила состояла в том, чтобы предотвратить реализацию «нарисовать круги, а затем снова нарисовать круги с белой заливкой» или что-нибудь подобное. Ожидается, что ответ на самом деле рассчитать, где рисовать вещи, прежде чем рисовать его.
Это код гольф, поэтому выигрывает самое короткое число персонажей.