shCoc/NhN/zhNm>o_/zZSzdUz
Bu cevaptan ilham alan tamamen yeni bir algoritma kullanır .
(implicit) z = input()
(implicit) print
s combine list of strings into one string
h first list in
C matrix transpose of (e.g. first characters in first list, etc.)
o order_by(lambda N:
c float_div(
/NhN N.count(N[0]),
/zhN z.count(N[0])),
m map(lambda d:
> slice_head(
o order_by(lambda Z:
_/zZ -1*z.count(Z),
Sz sorted(z)),
d d),
Uz range(len(z))
Adım adım:
İlk önce karakterleri ortaklıklarına göre sıraladık, bağları alfabetik olarak kırdık. Bu o_/zZSz
. o
Python sorted(<stuff>,key=<stuff>)
ile aynıdır , tuş için lambda ifadesi bulunur, ancak onu bir dize olarak tutar.
Uzunluk dan Sonra o tellerden önekleri bir listesini oluşturmak len(z)
1. uzunluğa >
piton en eşdeğerdir <stuff>[<int>:]
.
Ardından, bu önek dizeleri listesini, 0'da sol kenar ve 1'i sağ olan kesirli konuma göre soruyu görülen dikdörtgen düzenindeki ilk karakterin ilk sırasına göre yeniden sıralıyoruz. /NhN
Önek içindeki ilk karakterin kaç kere önyargıda bulunduğunu sayarken, önek içindeki ilk karakterin kaç /zhN
sayısını bir delik olarak gösterir. Bu, bir gruptaki her karakterin önderlik ettiği her öneki 1/k
, bu karakterin en sağındaki en k/k
solundan en soluna kadar farklı bir kesir atar . Önek listesinin bu numaraya göre sıralanması, düzende uygun konumu verir. Bağlar, önceden sayma işlemine tabi tutulur; bunlar ilk önce sayma, sonra alfabetik olarak istenir.
Son olarak, her önek dizgisinden ilk karakteri çıkarmamız, bunları tek bir dizgede birleştirmemiz ve yazdırmamız gerekiyor. İlk karakterleri çıkarmak hC
. C
Listede, aslında zip(*x)
Python 3'te bir matris transpoze gerçekleştirir h
. Sonuç matrisinin ilk satırını çıkarır. Bu aslında tek satırdır, çünkü 1 karakterlik ön ekin varlığı, diğer tüm tam satırların oluşmasını engeller. s
bu dizideki karakterleri tek bir dizgede toplar. Baskı çok açık.
Ölçek:
$ pyth -c 'shCoc/NhN/zhNm>o_/zZSzdUz' <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg
Artımlı program parçaları oroybgrbbyrorypoprr
:
Sub-Piece Output
Sz bbbgoooopprrrrrryyy
o_/zNSz rrrrrroooobbbyyyppg (uses N because o uses N on first use.)
m>o_/zNSzdUz ['rrrrrroooobbbyyyppg', 'rrrrroooobbbyyyppg', 'rrrroooobbbyyyppg', 'rrroooobbbyyyppg', 'rroooobbbyyyppg', 'roooobbbyyyppg', 'oooobbbyyyppg', 'ooobbbyyyppg', 'oobbbyyyppg', 'obbbyyyppg', 'bbbyyyppg', 'bbyyyppg', 'byyyppg', 'yyyppg', 'yyppg', 'yppg', 'ppg', 'pg', 'g']
oc/NhN/zhNm>o_/zZSzdUz ['roooobbbyyyppg', 'obbbyyyppg', 'rroooobbbyyyppg', 'byyyppg', 'yppg', 'rrroooobbbyyyppg', 'oobbbyyyppg', 'pg', 'rrrroooobbbyyyppg', 'bbyyyppg', 'yyppg', 'ooobbbyyyppg', 'rrrrroooobbbyyyppg', 'rrrrrroooobbbyyyppg', 'oooobbbyyyppg', 'bbbyyyppg', 'yyyppg', 'ppg', 'g']
Coc/NhN/zhNm>o_/zZSzdUz [('r', 'o', 'r', 'b', 'y', 'r', 'o', 'p', 'r', 'b', 'y', 'o', 'r', 'r', 'o', 'b', 'y', 'p', 'g')]
shCoc/NhN/zhNm>o_/zZSzdUz rorbyroprbyorrobypg
Eski cevap:
ssCm*+t*u*G/zHS{-zd1]kd/zdo_/zNS{z
Bu program, belirli bir alt listeyi kaç kez çoğaltacağınızı hesaplayarak çalışır. Alt liste benziyor ['', '', '', '', ... , 'r']
. Bu alt listenin toplam uzunluğu, diğer tüm şekerlerin oluşum sayısının ürünüdür u*G/zHS{-zd1
. Tam alt liste, boş dizgenin listesinin çoğaltılmasıyla yapılır, ]k
çoğu kez, ardından çıkartma ve eleman ile t
şeker ismini sonuna kadar ekler +d
.
Daha sonra, bu alt liste, girişte şekerin bulunduğu kadar çoğaltılır ve /zd
her şekerin listesinin eşit uzunlukta olmasını sağlar.
Şimdi, bu fonksiyonun tüm benzersiz şekerler üzerinde uygun sıralama düzeninde ( o_/zNS{z
) eşleştirilmesiyle , soru ifadesindekine benzer bir dikdörtgene sahibiz, ancak periyotlar yerine boş dizelerimiz var. Bir matris transpose ( C
) yapmak ve ardından iki toplama ( ss
) yapmak son dizgiyi verir.
Doğrulama:
$ pyth programs/candy.pyth <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg