介绍
您是一家美术馆策展人的朋友,他最近很高兴能从四位艺术家那里获得现代艺术(其中有些人会为策展人提供零艺术品,年轻的流氓)。由于这是现代艺术,因此任何给定艺术家的作品都看起来完全一样。您的朋友想使用计算机来帮助确定这些零件的放置顺序。
课程要求
您的程序必须使用五个整数(传递给函数或通过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.}:
是有效的J并且可以工作,但是A.
用于大多数工作,因此无效。如果您可以编写一个替换A.
该函数并将其替换为该函数的函数,那么您将得到一个有效的答案。
{:A.[:I.}:
......的事情是,但我仍然不认为A.
是有效的:jsoftware.com/help/dictionary/dacapdot.htm