Введение
Вы - друг куратора художественного музея, который недавно получил удовольствие от получения современного искусства от четырех художников ( некоторые из которых могут дать куратору ноль произведений искусства, молодые негодяи ). Поскольку это современное искусство, все произведения художника выглядят одинаково. Ваш друг хочет использовать компьютер, чтобы решить, в каком порядке разместить эти кусочки.
Требования к программе
Ваша программа должна иметь пять целых чисел (переданных в функцию или введенных через stdin (или как-то еще)). Первые четыре - это количество картин, предоставленных каждым из четырех художников. Последнее значение - это индекс перестановки i
(считая от 1, а не от 0). Куратор желает увидеть i
перестановку по лексикографическому порядку картин.
Ваша программа должна выводить эту перестановку в любом приемлемом формате: например, abbccd
или [0 1 1 2 2 3]
. Время выполнения для ввода менее десяти картин должно занимать менее часа (надеюсь, это не должно быть проблемой).
Вам не разрешается использовать любые встроенные функции для выработки перестановок
Примеры
Вход: 0 1 2 0 2
Учитывая, что у нас есть одна картина художника B и две картины художника C (и все они выглядят одинаково), перестановки в лексикографическом порядке:
['bcc', ' cbc ', 'ccb']
Выделенная перестановка будет правильным выводом, поскольку она является второй в лексикографическом порядке.
Вход: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
тестирование
Вот некоторые тесты, которые должны быть правильными.
1 2 4 1 5 - ABBDCCCC
2 2 3 1 86 - ABBCACDC
4 1 2 0 24 - AACACBA
1 4 3 2 65 - ABBCBBDCDC
Небольшой фрагмент кода в Python3, который должен случайным образом генерировать входные и выходные данные, доступен здесь (недопустимо для ввода, здесь используется импорт перестановок Python):
from itertools import permutations
from random import randint
a,b,c,d,n = randint(1,2),randint(1,2),randint(1,3),randint(1,3),randint(1,15)
print(str(a) + " " + str(b) + " " + str(c) + " " + str(d) + " " + str(n) + " - " + str(sorted(set([''.join(p) for p in permutations(a * "a" + b * "b" + c * "c" + d * "d")]))[n-1]))
Табло
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
она действительна и работает, но использует A.
большую часть работы, поэтому она не действительна. Если бы вы могли написать функцию, которая заменяет A.
и заменяет ее в этой функции, у вас будет правильный ответ.
{:A.[:I.}:
... Дело в том, что, но я все еще не думаю, A.
что будет действительным: jsoftware.com/help/dictionary/dacapdot.htm