Вступ
Ви друг друга куратора художнього музею, який нещодавно захопився здобуттям сучасного мистецтва від чотирьох художників ( деякі з яких можуть дати куратору нульові твори мистецтва, молодих негідників ). Оскільки це сучасне мистецтво, всі твори будь-якого художника виглядають абсолютно однаково. Ваш друг хоче використовувати комп’ютер, щоб вирішити, в якому порядку розмістити ці шматки.
Вимоги до програми
Ваша програма повинна приймати п'ять цілих чисел (переданих у функцію або введених через stdin (або ще дещо)). Перші чотири - це кількість картин, наданих кожним із чотирьох художників. Останнє значення - індекс перестановки i
(рахуючи від 1, а не 0). Куратор бажає побачити i
перестановку в лексикографічному порядку на картинах.
Ваша програма повинна виводити цю перестановку в будь-якому розумному форматі: наприклад, abbccd
або [0 1 1 2 2 3]
. Час виконання вводу, що становить менше десяти картин, має займати менше години (це, мабуть, не повинно бути проблемою).
Вам не дозволяється використовувати будь-які вбудовані функції для розробки перестановок
Приклади
Вхід: 0 1 2 0 2
З огляду на те, що у нас є одна картина художника В і дві художниці С (і всі вони однакові), перестановки в лексикографічному порядку:
['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.}:
це дійсний J і працює, але використовується A.
для більшості робіт, тому він недійсний. Якби ви могли написати функцію, яка замінює A.
та замінює її у цій функції, ви отримаєте дійсну відповідь.
{:A.[:I.}:
... Справа в тому, але я все ще не думаю, що це A.
було б дійсно: jsoftware.com/help/dictionary/dacapdot.htm