Диаграмма Юнга является расположением ящиков в левом выравнивании строк и топ выравниванием столбцов. Для каждого ящика все места над ним и слева от него заняты.
XXXXX
XXX
XXX
X
Длина крючка для ящика - это число ящиков справа от его строки и ниже его в столбце, также считая себя один раз. Например, вторая коробка имеет длину крючка 6:
X****
X*X
X*X
X
Вот все длины крючков:
86521
532
421
1
Ваша цель - вычислить произведение длин крючков здесь 8*6*5*2*1*5*3*2*4*2*1*1 = 115200
.
(Читайте о формуле длины хука, если вам интересно, почему это выражение имеет значение.)
Ввод: набор размеров строк в виде чисел, подобных [5,3,3,1]
или повторяющихся одинарных символов, таких как [[1,1,1,1,1], [1,1,1], [1,1,1], [1]]
или "XXXXX XXX XXX X"
. Вы можете ожидать, что список будет отсортирован по возрастанию или убыванию, как вы пожелаете. Список будет непустым и будет содержать только положительные целые числа.
Вывод: произведение длины крючка, которая является положительным целым числом. Не беспокойтесь о целочисленных переполнениях или времени выполнения.
Встроенные модули, специально предназначенные для диаграмм Юнга или целочисленных разбиений, не допускаются.
Тестовые случаи:
[1] 1
[2] 2
[1, 1] 2
[5] 120
[2, 1] 3
[5, 4, 3, 2, 1] 4465125
[5, 3, 3, 1] 115200
[10, 5] 798336000
{ee::+W%}_q~%z%:+:*
(19 байт) Формат ввода:[[1][1 1 1][1 1 1][1 1 1 1 1]]
%
: PJ, 24 байта
25 байт (с объяснением):
Вводит в виде списка возрастающих списков из одинарных цифр, аналогично примеру
[[1], [1,1,1], [1,1,1], [1,1,1,1,1]]
.Использование:
метод
Промежуточные результаты отображаются на входе
1 1 1 1 1;1 1 1;1 1 1;1 (5,3,3,1 in unary)
( это для предыдущей версии с нисходящей длиной, но с использованием того же метода ):Явная версия той же длины:
Попробуйте это онлайн здесь.
источник
Pyth - 21 байт
Я теряю много байтов при вертикальном расчете. Собираюсь сосредоточиться на игре в гольф.
Принимает участие как
[5, 3, 3, 1]
.Попробуйте здесь онлайн .
источник
Pyth, 18 байт
Принимает ввод в порядке возрастания, как
[1, 3, 3, 5]
.Демонстрация.
Альтернативное решение, 19 байтов
источник
Python 2,
8988 байт(Спасибо @xnor за спасение одного безумного байта путем объединения
p
иj
)d.get
Выглядит немного подозрительно ко мне, но в остальном я относительно доволен этим. Я попробовал некоторые другие подходы, такие как рекурсия и архивирование, но это единственный способ, который мне удалось получить до 100.Принимает ввод из STDIN в виде списка в порядке возрастания, например
[1, 3, 3, 5]
.источник
Haskell, 68 байт
Пример использования:
p [5,4,3,2,1]
->4465125
f
сканирует слева направо путем умножения длины самого внешнего хука на рекурсивный вызов самого себя, где каждый элемент списка ввода уменьшается1
(удаляя его при достижении0
).p
сканирует сверху вниз путем умноженияf
всего спискаp
на хвост.источник
R 174 байта
Итак ... Это решение довольно длинное и может быть более подходящим для игры в гольф. Я подумаю об этом !
Ungolfed:
источник
Python 2,
135128 байтовЭто берет список типов Python из stdin:
Это очень каноническая реализация, но я пока не придумал ничего более умного. У меня такое ощущение, что решения будут намного короче, даже с «настоящими» языками программирования.
Мы получаем количество ячеек в каждом ряду в качестве входных данных. Это решение сначала подсчитывает количество ячеек в каждом столбце, в котором хранится
c
(на самом деле это число минус 1, чтобы упростить его использование в последующих вычислениях). Затем он перебирает все блоки и умножает длины хуков. Сама длина крючка вычисляется тривиально, если у вас есть количество блоков в каждой строке и столбце.источник
m
?JavaScript ( ES6 ) 69
Функция, принимающая массив целых чисел в порядке возрастания .
Запустите фрагмент для проверки (только Firefox)
источник
Питон,
9591 байтЭто реализация Python для ответа Ними на Haskell . Предложения по игре в гольф приветствуются.
источник
z and _ or 1
как,z==[]or _
когдаz
это список, используя тот факт, чтоTrue==1
. Объявления функций Python являются более многословными, чем Haskell, поэтому он часто дает хорошую выгоду для определения одной рекурсивной функции, которая выполняет как внутренние, так и внешние рекурсивные циклы, хотя я не знаю, насколько это возможно.