Вы должны написать программу или функцию, которая получает объем чаши и объем воды в нем в качестве входных данных и выводит или возвращает ASCII-представление чаши с водой в нем с требуемыми объемами.
Чаша имеет следующую структуру:
\ /
\___/
Чаша имеет хотя бы одного _
персонажа. Количество \
's и /
' также положительно, и они равны из-за симметрии.
Объем чаши общее количество _
и space
символы между \
й и /
's плюсом один для каждой пары \
и /
. Это означает, что вышеупомянутая миска имеет объем 10
:
\ / => xxxxx x (the last one is for the \/ pair)
\___/ xxx x (the last one is for the \/ pair)
Обратите внимание, что две разные чаши могут иметь одинаковый объем. Например, обе следующие чаши имеют объем 18:
\ /
\ / \ /
\___/ \_______/
Мы можем налить немного воды в миску. Вода представлена в виде ряда ~
символов вместо пробелов внутри чаши. В нижнем ряду нет пробелов, поэтому он не может содержать ~
символы. Это означает, что наш пример может быть заполнен водой только одним способом:
\~~~~~/
\___/
Другие чаши могут быть заполнены несколькими способами:
\~~~~~/ \ /
\ / \~~~/
\_/ \_/
Объем воды в чаше является объем чаши строк ниже в ~
символы. Вышеприведенные примеры имеют объемы воды 4, 6 and 2
соответственно.
вход
- Два натуральных числа, объем чаши и объем воды.
- Вы можете выбрать порядок двух чисел.
- Два целых числа могут быть введены в любом общем формате списка (список, кортеж, массив и т. Д.) Или в виде двух отдельных целых чисел.
- Для входных значений гарантируется как минимум одна действительная конфигурация воды в чаше.
Выход
- ASCII-представление чаши с водой, где объем чаши и воды соответствуют входным данным.
- Если вы решите вернуть результат вместо печати, он должен быть возвращен в виде одной строки (или ближайшей альтернативы вашего языка).
- Разрешены любые конечные пробелы.
- Никакие ненужные начальные пробелы не допускаются.
- Если имеется несколько правильных конфигураций, вы можете выбрать, какую вы выводите, но вы можете вывести только одну из них.
Примеры
За каждой парой входных целых чисел следуют один или несколько возможных выходов.
6 2
\~~~/
\_/
10 4
\~~~~~/
\___/
24 8
\ /
\~~~~~~/
\ /
\__/
42 12 //either of the two output is correct
\ /
\ /
\~~~~~~~/
\ /
\ /
\_/
\ /
\~~~~~~~~~~~~~/
\___________/
90 68
\~~~~~~~~~~~~~~~~~~~~~/
\ /
\ /
\ /
\_____________/
102 42
\ /
\ /
\~~~~~~~~~~~~~~~~~/
\ /
\ /
\___________/
Это код гольф, поэтому выигрывает самый короткий вход.
источник
At least one valid bowl-water configuration is guaranteed for the input values.
- ОПJavascript ES5, 364 байта
Это то, что я мог бы быстро придумать во время моего ланча, помочь мне сыграть в гольф, когда моя смена заканчивается!
Источник
Golfed:
(побежал через мини-фильтр для сжатия, обеденная смена закончилась)
источник
Perl,
227172 байтаЗапустите с параметром -n:
Спасибо Деннису за помощь в игре в гольф.
Вычисление объема чаши , как высота * (ширина + высота), где ширина количество
_
символов и высота есть число\
символов.Каждая комбинация высоты и ширины проверяется в паре вложенных петель, пока не будет найден правильный объем чаши, затем выполняется другая петля над возможными уровнями высоты воды, чтобы определить, возможен ли правильный объем воды с этой шириной.
Можно удалить третий цикл, только вычисление уровня воды с использованием квадратичной формулы с, как 1, B в качестве ширины и с в качестве отрицательного требуемого объема воды, и проверок, если это целое число, но это занимает больше байт чем просто делает петлю. Здесь в любом случае (183 байт):
источник
Python 2, 162 байт
Немного грязно, но вот моя первая попытка. Он пробует все возможные номера строк
r
, устанавливая число базового подчеркивания бытьa = V/r-r
. Тогда он пробует все возможные высоты уровня водыk
и проверяет , если чаша действительно, печать, если так.источник
Python 2.7,
284270260 байтЭто в основном вычисляет высоту и ширину ковша и воды и печатает их.
Пытался изо всех сил удалить некрасивую часть цикла while в начале (где я вычисляю высоту ведра и высоту, с которой должна вытягиваться вода. Сейчас все строки в коде, кроме последней, предназначены для вычисления ширины и высота). Все еще пытаюсь: P
Тестирование для разных случаев -
источник