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. oPython 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ç /zhNsayı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/ksolundan 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. CListede, 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. sbu 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 /zdher ş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