คดเคี้ยวไปมาสตริงนี้โดยการยุบซ้ำ


16

รับสายงานของคุณคือการยุบลงในโครงสร้างเหมือนซิกแซกตามที่อธิบายไว้ด้านล่าง

พับเป็นซิกแซก

เราจะนำสตริง"Mississippi"เป็นตัวอย่าง:

  1. ก่อนอื่นให้ส่งคำนำหน้าที่ยาวที่สุดซึ่งประกอบด้วยอักขระที่ไม่ซ้ำกันเท่านั้น:

    Mis
    
  2. เมื่อคุณไปถึงอักขระที่ซ้ำกันตัวแรกCให้ละเว้นมันและนำหน้าคำนำหน้าที่ยาวที่สุดซึ่งประกอบด้วยอักขระที่ไม่ซ้ำกันของสตริงที่เหลือ ( issippi) ในแนวตั้งภายใต้การเกิดครั้งแรกของC :

    Mis
      i
      s
    
  3. ทำซ้ำกระบวนการสลับระหว่างความต่อเนื่องในแนวนอนและแนวตั้ง แต่ตอนนี้ต้องระวัง (ในขั้นตอนที่ 1) เพื่อดำเนินการแสดงผลในแนวนอนต่อจากการเกิดซ้ำของอักขระที่ซ้ำกันล่าสุดซึ่งไม่จำเป็นต้องเป็นอักขระสุดท้ายเช่นในกรณีนี้:

    Mis
      i
      sip
    -----
    Mis
      i
      sip
        i
    

กฎระเบียบ

  • สตริงจะมีอักขระ ASCII ที่พิมพ์ได้เท่านั้น แต่จะไม่มีช่องว่างใด ๆ
  • คุณสามารถแข่งขันในภาษาการเขียนโปรแกรมใด ๆและสามารถรับอินพุตและให้ผลลัพธ์ผ่านวิธีมาตรฐานใด ๆและในรูปแบบที่สมเหตุสมผล1ในขณะที่การจดบันทึกว่าช่องโหว่เหล่านี้ถูกห้ามโดยค่าเริ่มต้น นี่คือดังนั้นการส่งที่สั้นที่สุด (เป็นไบต์) สำหรับทุกภาษาที่ชนะ
  • 1อินพุต: สตริง / รายการอักขระ / ภาษาอื่นที่คุณใช้เพื่อแสดงสตริง เอาต์พุต: สตริงหลายบรรทัด, รายการของสตริงที่แทนบรรทัดหรือรายการของอักขระ / ความยาว -1 สตริง แต่โปรดรวมเวอร์ชันที่พิมพ์สวยของรหัสของคุณในคำตอบของคุณถ้าเป็นไปได้
  • เกี่ยวกับช่องว่างเพิ่มเติมผลลัพธ์อาจประกอบด้วย:
    • ขึ้นบรรทัดใหม่ / นำหน้า
    • ช่องว่างต่อท้ายในแต่ละบรรทัด / ท้าย
    • สอดคล้องจำนวนของช่องว่างชั้นนำในแต่ละบรรทัด
  • คุณต้องเริ่มส่งออกในแนวนอนคุณอาจไม่เริ่มในแนวตั้ง

กรณีทดสอบ

ปัจจัยการผลิต:

"สมบูรณ์แบบ"
"มิสซิสซิปปี้"
"แปลกประหลาด"
"เรื่องเล็ก"
"คธูลู"
"PPCG"
"pOpOpOpOpOpOp"
"ABCCCE"
"ABCCCECCEEEEC"
"abcdcebffg"
"ABCA"
"aaaaaaaa"

ผลลัพธ์ที่สอดคล้องกัน:

perf
 ค
 เสื้อ
mis
  ผม
  จิบ
    ผม
od
 โอบอุ้ม
 เสื้อ
Triv
  
  ล.
  โอบอุ้ม
  เสื้อ
Cthul
  ยู
P
ค
G
Po 
opo
ป๊อป
 พี
เอบีซี
  ค
  E
เอบีซี
  CCE
  E EC
เอบีซีดี
  อี
  ข
  FG
abc
A
AA
 

@JungHwanMin เพราะคุณไม่ควรข้ามกลับไปเป็นอันดับแรกbเนื่องจากคุณควรพิจารณาซ้ำกันในสตริงที่เหลือนั่นคือหลังจาก "แยก" เมื่อคุณถึงที่สองcคุณจะใส่คำนำหน้าที่ยาวที่สุดของอักขระที่ไม่ซ้ำกันของสตริงที่เหลือซึ่งคือebffg(ดังนั้นจะแสดงผลในebfแนวตั้งและต่อเนื่องในแนวนอนหลังจากนั้น) ดังนั้นคุณจึงไม่ต้องกังวลเกี่ยวกับอักขระจากส่วนของสตริงที่ ถูกเอาท์พุทแล้วก่อนที่จะเปลี่ยนทิศทาง หากยังรู้สึกไม่ชัดเจนกับคุณฉันจะทำตัวอย่างทีละขั้นตอนกับกรณีทดสอบนี้
Mr. Xcoder

เราควรจัดการกับตัวพิมพ์เล็ก / ใหญ่ได้อย่างไร ตัวอย่างเช่นABCcde
Rod

คุณควรปฏิบัติต่อพวกเขาเป็นตัวละครที่แตกต่างกัน "A" ≠ "a"เช่น ผลลัพธ์สำหรับABCcdeจะเป็นABCcde
นาย Xcoder

ข้อเสนอแนะกรณีทดสอบ:AAAAAAAA
JungHwan Min

5
@JungHwanMin AAAAAAA เพิ่มอีกอันหนึ่งด้วย
นาย Xcoder

คำตอบ:


2

ภาษา Wolfram (Mathematica) , 143 ไบต์

{#}//.{q___,a_,r___,a_,Longest@s___}:>{q}~f@{a,r}~{{s}}//.{q_~f@a_~s_}/;s~FreeQ~f:>(PadLeft@{q~Join~#,##2}&)@@PadRight@Join[{a},s]/. 0->" "&

ลองออนไลน์!

มี0xF8FFซึ่งสอดคล้องกับ\[Transpose]ผู้ประกอบการ

ว้ามันเป็นเรื่องยากที่จะสร้างผลลัพธ์ให้เป็นสตริง การได้รับแต่ละสาขานั้นไม่ยากมาก:#//.{q___,a_,r___,a_,Longest@s___}:>{q,a,{r},{s}}&


2

Python 2 , 131 ไบต์

X=Y=y=0
s=input()
o=()
l={}
for i in s:o+=[' ']*len(s),;exec('l[i]=X,Y','y^=1;X,Y=l[i];l={}')[i in l];o[Y][X]=i;X+=y<1;Y+=y
print o

ลองออนไลน์!

-1 ขอบคุณที่ลินน์

พิมพ์เป็น tuple ของรายการของสายยาว -1 เอาท์พุทพริตตี้พิมพ์


1

Python 2 , 184 176 175 168 ไบต์

-5 ไบต์ขอบคุณ Mr. Xcoder

def f(x):i,k=[p for p in enumerate(map(x.find,x+"z"))if cmp(*p)][0];return[x[:i]+' '*len(x)]+[' '*k+''.join(d)+i*' 'for d in zip(*f(x[i+1:]))]if x[len(set(x)):]else[x,]

ลองออนไลน์!


ฉันไม่คิดว่าการบันทึกล่าสุดจะถูกต้อง เกิดอะไรขึ้นถ้าอินพุตมี\? นอกจากนี้คุณสามารถส่งออกเป็นรายการของรายการของความยาว 1 สายเช่นเดียวกับที่ฉันทำในการแก้ปัญหาของฉันต่อ OP
Erik the Outgolfer


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.