Zigzag chuỗi này bằng cách thu gọn các bản sao


16

Đưa ra một chuỗi, nhiệm vụ của bạn là thu gọn nó thành một cấu trúc giống như ngoằn ngoèo như được mô tả dưới đây.

Gấp lại thành hình Zigzag

Chúng tôi sẽ lấy chuỗi "Mississippi"làm ví dụ:

  1. Đầu tiên, xuất tiền tố dài nhất chỉ bao gồm các ký tự duy nhất:

    Mis
    
  2. Khi bạn đạt đến ký tự trùng lặp C đầu tiên , hãy bỏ qua nó và xuất tiền tố dài nhất bao gồm các ký tự duy nhất của chuỗi còn lại ( issippi) theo chiều dọc, bên dưới lần xuất hiện đầu tiên của C :

    Mis
      i
      s
    
  3. Lặp lại quá trình, xen kẽ giữa tiếp tục ngang và dọc. Nhưng bây giờ hãy cẩn thận (ở bước 1) để tiếp tục xuất ra theo chiều ngang từ lần xuất hiện mới nhất của ký tự trùng lặp, không nhất thiết là lần cuối cùng, như trong trường hợp này:

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

Quy tắc

  • Chuỗi sẽ chỉ chứa các ký tự ASCII có thể in, nhưng sẽ không chứa bất kỳ loại khoảng trắng nào.
  • Bạn có thể cạnh tranh trong bất kỳ ngôn ngữ lập trình nào và có thể nhận đầu vào và cung cấp đầu ra thông qua bất kỳ phương thức tiêu chuẩn nào và ở bất kỳ định dạng hợp lý 1 nào , trong khi lưu ý rằng các lỗ hổng này bị cấm theo mặc định. Đây là , vì vậy bài nộp ngắn nhất (tính bằng byte) cho mọi ngôn ngữ sẽ thắng.
  • 1 Đầu vào: Chuỗi / Danh sách các ký tự / bất cứ thứ gì khác mà ngôn ngữ của bạn sử dụng để thể hiện các chuỗi. Đầu ra: Chuỗi nhiều dòng, danh sách các chuỗi biểu thị các dòng hoặc danh sách các danh sách các ký tự / chuỗi có độ dài-1, nhưng vui lòng bao gồm một phiên bản in mã đẹp của câu trả lời của bạn, nếu có thể.
  • Về không gian bổ sung, đầu ra có thể chứa:
    • Dòng mới hàng đầu / dấu
    • Trailing space trên mỗi dòng / ở cuối
    • Một số lượng nhất quán các không gian hàng đầu trên mỗi dòng
  • Bạn phải bắt đầu xuất theo chiều ngang, bạn không thể bắt đầu theo chiều dọc.

Các trường hợp thử nghiệm

Đầu vào:

"Hoàn hảo"
"Mississippi"
"Điều lạ"
"Sự tầm thường"
"Cthulhu"
"PPCG"
"pOpOpOpOpOpOp"
"ABCCCE"
"ABCCCECCEEEEC"
"abcdcebffg"
"abca"
"AAAAAAAA"

Đầu ra tương ứng:

Hoàn hảo
 c
 t
Mis
  Tôi
  một hớp
    Tôi
Od
 ies
 t
Triv
  một
  tôi
  ies
  t
Cthul
  bạn
P
C
G
pO 
Opo
pp
 p
ABC
  C
  E
ABC
  CCE
  E EC
A B C D
  e
  b
  fg
abc
Một
Ôi
 Một

@JungHwanMin Bởi vì bạn không nên quay lại đầu tiên b, vì bạn chỉ nên xem xét các bản sao trong chuỗi còn lại , nghĩa là, sau khi "phân nhánh". Khi bạn đạt đến lần thứ hai c, bạn xuất ra tiền tố dài nhất của các ký tự duy nhất của chuỗi còn lại , ebffgdo đó (xuất ra ebftheo chiều dọc và tiếp tục theo chiều ngang sau đó), vì vậy bạn không phải lo lắng về các ký tự từ một phần của chuỗi. đã được xuất ra trước khi chuyển hướng. Nếu bạn vẫn cảm thấy không rõ ràng với bạn, tôi sẽ làm một ví dụ từng bước khác với trường hợp thử nghiệm này.
Ông Xcoder

Làm thế nào chúng ta nên xử lý chữ thường / chữ hoa? Ví dụABCcde
Rod

Bạn nên coi họ như những nhân vật khác nhau. Ví dụ "A" ≠ "a". Đầu ra cho ABCcdesẽ chỉ làABCcde
Ông Xcoder

Đề nghị trường hợp thử nghiệm:AAAAAAAA
JungHwan Min

5
@JungHwanMin AAAAAAAThêm cái đó nữa.
Ông Xcoder

Câu trả lời:


2

Ngôn ngữ Wolfram (Mathicala) , 143 byte

{#}//.{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->" "&

Hãy thử trực tuyến!

Chứa 0xF8FF, tương ứng với các \[Transpose]nhà điều hành.

Phew, thật khó khăn khi biến kết quả thành một chuỗi. Bắt từng chi nhánh không quá khó:#//.{q___,a_,r___,a_,Longest@s___}:>{q,a,{r},{s}}&



1

Python 2 , 184 176 175 168 byte

-5 byte nhờ ông 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,]

Hãy thử trực tuyến!


Tôi không nghĩ rằng tiết kiệm mới nhất là hợp lệ; Nếu đầu vào chứa \thì sao? Ngoài ra, bạn có thể xuất dưới dạng danh sách các danh sách các chuỗi có độ dài 1, như tôi làm trong giải pháp của mình, theo OP.
Erik the Outgolfer

@EriktheOutgolfer cùng số byte: c
Rod

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.