前書き
あなたは、美術館のキュレーターの友人です。美術館のキュレーターは、最近4人のアーティストから現代美術を手に入れることに喜びを感じています(そのうちの何人かは、キュレーターに芸術作品がないこともあります)。これはモダンアートであるため、アーティストの作品はすべてまったく同じに見えます。あなたの友達は、コンピュータを使用して、これらのピースをどの順序で配置するかを決定したいと考えています。
プログラムの要件
プログラムは5つの整数を受け取る必要があります(関数に渡されるか、stdinを介して入力されます(または何らかの方法で))。最初の4つは、4人のアーティストのそれぞれが提供した絵画の数です。最後の値は順列インデックスですi
(0ではなく1から数えます)。キュレーターi
は、絵画の辞書式順序による順列を見たいと考えています。
プログラムは、この順列を適切な形式で出力する必要があります。例:abbccd
または[0 1 1 2 2 3]
。合計で10枚に満たない入力の実行時間は1時間未満でなければなりません(これは問題ないはずです)。
組み込み関数を使用して順列を計算することはできません
例
入力:0 1 2 0 2
アーティストBの絵が1つ、アーティストCの絵が2つある(そしてそれらはすべて同じに見える)とすると、辞書式順序の順列は次のようになります。
['bcc'、 ' cbc '、 'ccb']
強調表示された順列は、辞書式順序の2番目であるため、正しい出力になります。
入力: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は