shCoc/NhN/zhNm>o_/zZSzdUz
Sử dụng một thuật toán hoàn toàn mới, lấy cảm hứng từ câu trả lời này .
(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))
Từng bước một:
Đầu tiên, chúng tôi sắp xếp các ký tự theo mức độ phổ biến của chúng, các mối quan hệ bị phá vỡ theo thứ tự abc. Đây là o_/zZSz
. o
giống như của Pythonsorted(<stuff>,key=<stuff>)
, với biểu thức lambda cho khóa, ngoại trừ nó giữ nó như một chuỗi.
Sau đó, chúng tôi tạo ra một danh sách các tiền tố của chuỗi đó, từ chiều dài len(z)
đến chiều dài 1. >
tương đương với python <stuff>[<int>:]
.
Sau đó, chúng tôi sắp xếp lại danh sách các chuỗi tiền tố này theo vị trí phân số, 0 là cạnh trái và 1 là bên phải, ký tự đầu tiên của tiền tố trên bố cục hình chữ nhật nhìn thấy trong câu hỏi. /NhN
đếm số lần ký tự đầu tiên trong tiền tố xảy ra trong tiền tố, trong khi /zhN
đưa ra số lần xuất hiện của ký tự đầu tiên trong tiền tố trong chuỗi là một lỗ. Điều này gán cho mỗi tiền tố được dẫn dắt bởi mỗi ký tự trong một nhóm một phân số khác nhau, từ 1/k
lần xuất hiện bên phải nhất của ký tự đó k/k
cho hầu hết bên trái. Sắp xếp lại danh sách tiền tố theo số này sẽ cho vị trí thích hợp trong bố cục. Các mối quan hệ bị phá vỡ bằng cách sử dụng thứ tự trước, lần đầu tiên bằng cách đếm sau đó theo bảng chữ cái, như mong muốn.
Cuối cùng, chúng ta cần trích xuất ký tự đầu tiên từ mỗi chuỗi tiền tố, kết hợp chúng thành một chuỗi và in chúng ra. Trích xuất các ký tự đầu tiên là hC
. C
thực hiện một ma trận hoán vị trong danh sách, thực sự zip(*x)
trong Python 3. h
trích xuất hàng đầu tiên của ma trận kết quả. Đây thực sự là hàng duy nhất, bởi vì sự hiện diện của tiền tố 1 ký tự ngăn không cho bất kỳ hàng hoàn chỉnh nào khác được hình thành. s
tổng hợp các ký tự trong bộ dữ liệu này thành một chuỗi duy nhất. In ấn là ngầm.
Kiểm tra:
$ pyth -c 'shCoc/NhN/zhNm>o_/zZSzdUz' <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg
Phần chương trình tăng dần trên 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
Câu trả lời cũ:
ssCm*+t*u*G/zHS{-zd1]kd/zdo_/zNS{z
Chương trình này hoạt động bằng cách tính toán bao nhiêu lần để sao chép một danh sách con nhất định. Danh sách phụ trông như thế ['', '', '', '', ... , 'r']
. Tổng chiều dài của danh sách phụ này là sản phẩm của số lần xuất hiện của tất cả các loại kẹo khác u*G/zHS{-zd1
. Danh sách con đầy đủ được xây dựng bằng cách sao chép danh sách chuỗi rỗng ]k
, nhiều lần, sau đó loại bỏ và phần tử với t
và thêm tên kẹo vào cuối +d
.
Sau đó, danh sách phụ này được sao chép nhiều lần số kẹo đó được tìm thấy trong đầu vào /zd
, đảm bảo mỗi danh sách của kẹo có độ dài bằng nhau.
Bây giờ, với chức năng này được ánh xạ trên tất cả các loại kẹo duy nhất theo thứ tự được sắp xếp thích hợp ( o_/zNS{z
), chúng ta có một hình chữ nhật tương tự như trong câu hỏi, nhưng với các chuỗi trống thay vì dấu chấm. Thực hiện một ma trận hoán vị ( C
) theo sau là hai phép tính tổng ( ss
) sẽ cho chuỗi cuối cùng.
Xác minh:
$ pyth programs/candy.pyth <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg