Giriş
Dört sanatçiden ( bazıları küratöre sıfır sanat eseri, genç alçaklar verebilir) modern sanattan zevk almakta olan bir sanat müzesi küratörünün arkadaşısınız . Bu modern sanat olduğundan, herhangi bir sanatçının eserleri tamamen aynı görünüyor. Arkadaşınız bu parçaları hangi sırayla yerleştireceğinize karar vermek için bir bilgisayar kullanmak istiyor.
Program Gereksinimleri
Programınız beş tamsayı almalıdır (bir işleve geçirilir veya stdin (veya başka bir yolla girilir)). İlk dördü, dört sanatçının her biri tarafından sağlanan tablo sayısıdır. Son değer bir permütasyon endeksidir i
(0'dan değil 1'den sayarak). Küratör i
resimlerin sözlükbilimsel düzeniyle inci permütasyonu görmek istiyor .
Programınız bu permütasyonu makul bir formatta vermelidir: örn. abbccd
Veya [0 1 1 2 2 3]
. Toplam on resimden daha az girdi için çalışma zamanı bir saatten az sürmelidir (bu umarım sorun olmamalıdır).
Permütasyonları çözmek için yerleşik işlevleri kullanmanıza izin verilmez
Örnekler
Giriş: 0 1 2 0 2
Sanatçı B tarafından bir resim ve sanatçı C tarafından iki resimimiz var (ve hepsi aynı görünüyor), sözlükbilimsel düzendeki permütasyonlar şunlardır:
['bcc', ' cbc ', 'ccb']
Vurgulanan permütasyon doğru çıktı olacaktır, çünkü sözlükbilimsel sıralamada ikincisidir.
Giriş: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
Test yapmak
İşte doğru olması gereken bazı testler.
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'te rastgele giriş ve çıkışlar oluşturması gereken kısa bir kod parçası burada mevcuttur (giriş için geçerli değildir, bu Python permütasyonları içe aktarmayı kullanır):
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]))
sayı tahtası
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
geçerli J ve çalışıyor, ancak A.
işin çoğu için kullanıyor , bu yüzden geçerli değil. Bu işlevde onun yerini alan A.
ve yerine geçen bir işlev yazabilseydiniz, geçerli bir yanıtınız olurdu.
{:A.[:I.}:
... Şey şu ki, ama hala A.
geçerli olacağını düşünmüyorum : jsoftware.com/help/dictionary/dacapdot.htm