Introdução
Você é amigo de um curador de um museu de arte, que teve o prazer recente de receber arte moderna de quatro artistas ( alguns dos quais podem dar ao curador zero peças de arte, jovens patifes ). Como se trata de arte moderna, todas as peças de qualquer artista parecem exatamente iguais. Seu amigo deseja usar um computador para ajudar a decidir em qual ordem colocar essas peças.
Requisitos do programa
Seu programa deve levar cinco números inteiros (passados para uma função ou inseridos através do stdin (ou de outra maneira)). Os quatro primeiros são o número de pinturas fornecidas por cada um dos quatro artistas. O último valor é um índice de permutação i
(contando de 1, não 0). O curador deseja ver a i
permutação por ordem lexicográfica das pinturas.
Seu programa deve gerar esta permutação em qualquer formato razoável: por exemplo, abbccd
ou [0 1 1 2 2 3]
. O tempo de execução da entrada totalizando menos de dez pinturas deve levar menos de uma hora (esperamos que isso não seja problema).
Você não tem permissão para usar nenhuma função embutida para calcular permutações
Exemplos
Entrada: 0 1 2 0 2
Dado que temos uma pintura do artista B e duas do artista C (e todas parecem iguais), as permutações em ordem lexicográfica são:
['cco', ' cbc ', 'ccb']
A permutação destacada seria a saída correta, porque é a segunda em ordem lexicográfica.
Entrada: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
Teste
Aqui estão alguns testes que devem estar corretos.
1 2 4 1 5 - ABBDCCCC
2 2 3 1 86 - ABBCACDC
4 1 2 0 24 - AACACBA
1 4 3 2 65 - ABBCBBDCDC
Um pequeno pedaço de código no Python3 que deve gerar entradas e saídas aleatoriamente está disponível aqui (não é válido para entrada, isso usa a importação de permutações do 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]))
Placar
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
é J válido e funciona, mas é usado A.
na maior parte do trabalho, portanto não é válido. Se você pudesse escrever uma função que a substitua A.
e substitua nessa função, teria uma resposta válida.
{:A.[:I.}:
... O problema é que, mas ainda não acho A.
que seria válido: jsoftware.com/help/dictionary/dacapdot.htm