(Надеюсь, это еще День благодарения для вас)
У тебя есть индейка на ужин в День благодарения, но ты не знаешь, как ее равномерно распределить. Проблема в том, что некоторые люди едят больше, чем другие, поэтому вам нужно найти решение
вход
Там будет два входа. Первым будет ascii art разных людей.
o
o \|/
\|/ |
| |
/ \ / \
спецификации ascii-art
Каждый человек занимает 3 колонки шириной. Каждый человек отделен одним столбцом пробелов. Самая вершина каждого человека - это o
. Ниже o
, смещение на 1
и -1
в x, и \
и /
, соответственно. От o
второго до последнего ряда во входных данных |
количество их на человека является их «ростом». Единственные данные, которые вам нужно будет извлечь из каждого человека, это их «рост».
Всегда будет хотя бы один человек. У каждого человека всегда есть как минимум 2 роста. Максимальная высота, которую должна обработать ваша программа, - это высота не менее 64.
Если вы хотите, чтобы ввод, дополненный пробелами, образовывал прямоугольник, укажите это в своем ответе.
Второй вход - индейка. Индейка на самом деле не индейка, больше NxM
размеров индейки. Если второй ввод 3x2
, то индейка имеет размеры 3 * 2, с общей площадью 6.
Вывод
Вывод может быть списком или ближайшей альтернативой вашего языка (например, Array). Вы также можете вывести строку со значениями, разделенными пробелами.
Значения для каждого человека должны быть выведены в том порядке, в котором они были введены.
Вызов
Ваша цель состоит в том, чтобы разделить область индейки среди людей.
Пример сценария:
Предположим, что они два человека, с высотой 3
и 6
, соответственно. Если есть индейка 5x3
. Общая площадь индейки, которую нужно будет распределить, равна 15
.
Теперь, как бы вы распределили его среди всех? Вот как:
the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
sum_of_all_heights
Это означает, что для первого человека с ростом 3
они получат 3/9*15
индейку, или 5
, для второго человека с ростом 6
они получат 6/9*15
или 10
индейку.
Вывод
Вывод должен состоять исключительно из цифр, и .
, если вы не решите пойти на бонус. В этом случае он может состоять только из цифр, пробелов ( ) и косой черты (
/
).
Полный пример
Входные данные:
6x5
o
|
o \|/
\|/ |
| |
| |
/ \ / \
Вывод:
11.25 18.75
Бонусы
Бонус -20%: вы выводите дробь (должна быть упрощена), не имеет значения, смешанная или неправильная дробь.
счет
Это код-гольф, поэтому выигрывает самый короткий код в байтах!
Ответы:
Pyth, 23 байта
Это не работает в онлайн-версии, потому что он использует
eval
для определения размера индейки.Объяснение:
источник
LabVIEW, 67 байт
Я считаю после того, что я предложил в мета-пост, так что это не исправлено, но да, здесь идет.
ожидается ввод с пробелами.
Я считаю головы и получаю размер людей от линии, в которой находятся головы.
источник
Japt ,
4946 байтJapt - это сокращенная версия Ja vaScri pt . переводчик
Выходы в виде массива. (Обратите внимание, что вам нужно будет заключить каждый из двух входных данных в кавычки.)
Как это работает
источник
MATLAB 109 * 80% = 87,2 байта
Так что это функция MATLAB, которая принимает два ввода, первая - строка для размера индейки (например
'8x4'
, а вторая - строка, содержащая людей. Она возвращает строку, содержащую неправильные дроби для каждого человека.Это могло бы быть намного меньше, но новые линии стали хитрыми. MATLAB мог легко преобразовать строку с
;
разделителем для каждой строки, но попытка использовать новую строку оказалась трудной, стоив 25 символов:Получить размер людей на самом деле довольно просто:
Это занимает каждый четвертый столбец, начиная со второго (это будут все столбцы, где будут находиться тела людей), а затем преобразует его в массив, содержащий 1, где есть биты тела, и 0, где их нет. Наконец, он суммирует по столбцам, что приводит к массиву,
a
который представляет собой одномерный массив, содержащий размер каждого человека.Затем мы извлекаем размер индейки из входной строки в форме
%dx%d
, то есть одно число, затем «x», а затем другое число. Получившийся массив из двух чисел умножают вместе, чтобы получить область индейки.Это умножается на рост каждого человека, а также делится на общий рост всех людей, чтобы получить долю индейки для каждого человека в виде десятичного числа.
Последний шаг для определения бонуса - этот бит делает код на 6 символов длиннее, но бонус сбивает ~ 22, так что оно того стоит.
rats()
хорошая функция, которая преобразует десятичное число в упрощенную неправильную дробь (с точностью до 13 dp). Передавая массив десятичных чисел (т. Е. Сумму на каждого человека), вы получите одну строку, содержащую дроби для каждого человека, разделенные пробелами.Допустим, вывод
rats()
добавляет больше одного пробела, но вопрос не говорит, что не может - просто говорит, что строка должна содержать только цифры, '' и '/'.Это вывод из примера (кавычки, добавленные мной для предотвращения удаления пробелов, а не в реальном выводе):
Пример использования:
вывод:
Он также работает (хотя и с предупреждениями) на онлайн- переводчике Octave . Вы можете попробовать это здесь . Ссылка на рабочую область с
f
функцией, уже определенной в файле. Таким образом, вы можете просто ввести пример использования выше в командной строке.источник
Pyth - 25 байт
Определенно может сыграть пару байт от него. Довольно простой подход.
Попробуйте это онлайн здесь .
источник
Haskell 119 байт
Пример использования:
"6x5" # " o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\\n"
->[11.25,18.75]
.источник
JavaScript (ES6), 131 байт
Возвращает массив порций.
объяснение
Тестовое задание
Показать фрагмент кода
источник
Python 99 байт
Входные данные:
' o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\','6*5'
Вывод:
['11.25', '18.75']
источник