shCoc/NhN/zhNm>o_/zZSzdUz
Gunakan algoritme baru, yang terinspirasi oleh jawaban ini .
(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))
Selangkah demi selangkah:
Pertama, kami mengurutkan karakter berdasarkan kesamaan mereka, ikatan rusak berdasarkan abjad. Ini o_/zZSz
. o
sama dengan Python sorted(<stuff>,key=<stuff>)
, dengan ekspresi lambda untuk kunci, kecuali itu menyimpannya sebagai string.
Kemudian kami membuat daftar awalan string itu, dari panjang len(z)
ke panjang 1. >
sama dengan python <stuff>[<int>:]
.
Kemudian, kami menyusun ulang daftar string awalan ini dengan lokasi fraksional, 0 menjadi tepi kiri dan 1 menjadi kanan, dari karakter pertama dari awalan pada tata letak persegi panjang yang terlihat pada pertanyaan. /NhN
menghitung berapa kali karakter pertama dalam awalan terjadi di awalan, sementara /zhN
memberikan jumlah kemunculan karakter pertama dalam awalan dalam string sebagai lubang. Ini memberikan setiap awalan yang dipimpin oleh masing-masing karakter dalam suatu grup fraksi yang berbeda, dari 1/k
untuk yang paling sering terjadi dari karakter itu ke k/k
untuk yang paling kiri. Menyusun ulang daftar awalan dengan nomor ini memberikan posisi yang sesuai dalam tata letak. Ikatan rusak menggunakan pemesanan sebelumnya, yang pertama dengan hitungan kemudian alfabet, seperti yang diinginkan.
Akhirnya, kita perlu mengekstraksi karakter pertama dari setiap string awalan, menggabungkannya menjadi string tunggal, dan mencetaknya. Mengekstrak karakter pertama adalah hC
. C
melakukan matriks transpos pada daftar, sebenarnya zip(*x)
dalam Python 3. h
mengekstrak baris pertama dari matriks yang dihasilkan. Ini sebenarnya satu-satunya baris, karena keberadaan awalan 1 karakter mencegah baris lengkap lainnya terbentuk. s
menjumlahkan karakter dalam tuple ini menjadi satu string. Pencetakan tersirat.
Uji:
$ pyth -c 'shCoc/NhN/zhNm>o_/zZSzdUz' <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg
Potongan program tambahan tentang 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
Jawaban lama:
ssCm*+t*u*G/zHS{-zd1]kd/zdo_/zNS{z
Program ini berfungsi dengan menghitung berapa kali mereplikasi sublist tertentu. Sub-daftar terlihat seperti ['', '', '', '', ... , 'r']
. Panjang total dari sub-daftar ini adalah produk dari jumlah kemunculan semua permen lainnya, yaitu u*G/zHS{-zd1
. Sublist lengkap dibuat dengan mereplikasi daftar string kosong ]k
,, yang berkali-kali, kemudian menghapus dan elemen dengan t
dan menambahkan nama permen ke akhir +d
.
Kemudian, sub-daftar ini direplikasi sebanyak permen yang ditemukan di input /zd
, memastikan setiap daftar permen memiliki panjang yang sama.
Sekarang, dengan fungsi ini dipetakan di atas semua permen unik dalam urutan yang tepat ( o_/zNS{z
), kami memiliki persegi panjang yang mirip dengan yang ada di pernyataan pertanyaan, tetapi dengan string kosong sebagai ganti titik. Melakukan matriks transpos ( C
) diikuti oleh dua penjumlahan ( ss
) memberikan string terakhir.
Verifikasi:
$ pyth programs/candy.pyth <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg