shCoc/NhN/zhNm>o_/zZSzdUz
ใช้อัลกอริทึมใหม่ทั้งหมดโดยได้แรงบันดาลใจจากคำตอบนี้
(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))
เป็นขั้นเป็นตอน:
ก่อนอื่นเราจัดเรียงตัวละครตามความธรรมดาของพวกเขา o_/zZSz
นี่คือ o
เหมือนกับ Python sorted(<stuff>,key=<stuff>)
โดยมีการแสดงออกแลมบ์ดาสำหรับคีย์ยกเว้นมันจะเก็บไว้เป็นสตริง
จากนั้นเราสร้างรายการคำนำหน้าของสตริงว่าจากความยาวlen(z)
ความยาว 1. เทียบเท่ากับของงูหลาม>
<stuff>[<int>:]
จากนั้นเราเรียงลำดับรายการของสายอักขระนำหน้าอีกครั้งโดยตำแหน่งที่เป็นเศษส่วน 0 เป็นขอบซ้ายและ 1 เป็นอักขระทางขวาของอักขระตัวแรกของคำนำหน้าบนเค้าโครงสี่เหลี่ยมที่เห็นในคำถาม /NhN
นับว่าอักขระตัวแรกในคำนำหน้าเกิดขึ้นกี่ครั้งในส่วนนำหน้าในขณะที่/zhN
ให้จำนวนการปรากฏตัวของอักขระตัวแรกในคำนำหน้าในสตริงเป็นรู สิ่งนี้จะกำหนดคำนำหน้าแต่ละตัวที่นำโดยตัวละครแต่ละตัวในกลุ่มที่แตกต่างกันออกไป1/k
สำหรับการเกิดส่วนใหญ่ของตัวละครนั้นไปk/k
ทางซ้ายสุด การเรียงลำดับรายการคำนำหน้าด้วยหมายเลขนี้จะให้ตำแหน่งที่เหมาะสมในโครงร่าง ความสัมพันธ์จะถูกทำลายโดยใช้การสั่งซื้อก่อนซึ่งเป็นครั้งแรกโดยนับแล้วตามตัวอักษรตามที่ต้องการ
สุดท้ายเราต้องแยกอักขระตัวแรกจากแต่ละคำนำหน้าสตริงรวมมันเป็นสตริงเดียวแล้วพิมพ์ออกมา hC
การแยกตัวอักษรตัวแรกเป็น C
ดำเนินการแปลงเมทริกซ์ในรายการจริงzip(*x)
ใน Python 3 h
แยกแถวแรกของเมทริกซ์ผลลัพธ์ นี่เป็นแถวเดียวเท่านั้นเนื่องจากการมีคำนำหน้าอักขระ 1 ตัวจะป้องกันไม่ให้เกิดแถวที่สมบูรณ์อื่น ๆ s
ผลรวมตัวละครใน tuple นี้เป็นสตริงเดียว การพิมพ์โดยปริยาย
ทดสอบ:
$ pyth -c 'shCoc/NhN/zhNm>o_/zZSzdUz' <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg
โปรแกรมส่วนเพิ่มเมื่อ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
คำตอบเก่า:
ssCm*+t*u*G/zHS{-zd1]kd/zdo_/zNS{z
โปรแกรมนี้ทำงานโดยการคำนวณจำนวนครั้งในการทำซ้ำรายการย่อยที่แน่นอน ['', '', '', '', ... , 'r']
ย่อยรายการลักษณะเช่น ความยาวทั้งหมดของย่อยนี้รายการเป็นผลิตภัณฑ์ของจำนวนของการเกิดขึ้นทั้งหมดของลูกอมอื่น ๆ u*G/zHS{-zd1
ซึ่งเป็น รายการย่อยเต็มรูปแบบที่สร้างขึ้นโดยจำลองรายชื่อของสตริงที่ว่างเปล่าที่]k
ว่าหลายต่อหลายครั้งแล้วถอดและองค์ประกอบที่มีและเพิ่มชื่อขนมที่จะจบลงด้วยการt
+d
จากนั้นรายการย่อยนี้จะถูกทำซ้ำหลาย ๆ ครั้งเท่าที่พบใน/zd
ลูกอมเพื่อให้แน่ใจว่ารายการขนมแต่ละรายการมีความยาวเท่ากัน
ตอนนี้ฟังก์ชั่นนี้แมปกับลูกอมที่ไม่ซ้ำกันทั้งหมดในการเรียงลำดับที่เหมาะสม ( o_/zNS{z
) เรามีรูปสี่เหลี่ยมผืนผ้าคล้ายกับที่อยู่ในคำสั่งคำถาม แต่มีสตริงว่างแทนที่จะเป็นจุด การทำเมทริกซ์ทรานสโพเรน ( C
) ตามด้วยการสรุปสองครั้ง ( ss
) จะให้สตริงสุดท้าย
ยืนยัน:
$ pyth programs/candy.pyth <<< 'oroybgrbbyrorypoprr'
rorbyroprbyorrobypg