Chỉ số chuỗi con ngắn nhất


9

Tôi là một người lười biếng nhưng hiệu quả, như nhiều bạn có lẽ cũng vậy. Vì vậy, bất cứ khi nào tôi đang làm một cái gì đó tôi muốn làm nó với nỗ lực tối thiểu. Đó là lý do tại sao tôi yêu cầu bạn giải quyết vấn đề này cho tôi.

Những gì tôi có ở đây là một tài liệu của các loại. Trên mỗi dòng của tài liệu này là một từ đơn hoặc cụm từ ngắn. Tài liệu không được sắp xếp, nhưng tôi biết mọi thứ ở đâu. Tôi có thể sử dụng một số trợ giúp để tìm kiếm mọi thứ nhanh hơn và vì thế tôi cần một danh sách thứ hai. Đây là nơi bạn đến. Đối với mỗi dòng văn bản trong tài liệu này, tôi cần một số định danh. Một cái gì đó tôi có thể CTRL+ F, nhưng nó không thể dài hơn hoàn toàn cần thiết để có được một kết quả đó.

Ví dụ đầu vào:

(blank)
an apple
spiderman 3
7pm pick up laundry
tequila
fake mustache
dishes on wednesday
banana
biscuits
(blank)

Ví dụ đầu ra:

ap,3,7,q,f,w,ba,bi

Tôi sẽ lặp lại chính mình ở đây, để đảm bảo chúng ta trên cùng một trang:

  • Đầu vào là một tệp văn bản chưa được định dạng có chứa một danh sách các mục, được phân tách bằng dấu ngắt dòng. Tôi có nó ở đây ở định dạng .txt, nó được gọi là "STUFF.TXT"
  • Dòng đầu tiên và cuối cùng của tài liệu trống. Mỗi dòng khác chứa một mục có độ dài> 0.
  • Tệp chỉ chứa các ký tự alfanumeric (tất cả chữ thường), dấu cách và dấu ngắt dòng.
  • Đầu ra mong muốn là một danh sách các định danh, theo cùng thứ tự với danh sách ban đầu của tôi.
  • Tôi không muốn nhiều hơn một từ tìm kiếm cho mỗi mục danh sách. Nếu có nhiều câu trả lời, hãy chọn một câu, tôi không quan tâm. Trong ví dụ trên tôi đã chọn 'ap' cho an apple, nhưng bạn có thể đã chọn 'n', 'a', 'pp', 'pl' hoặc 'le'. Không phải "an", bởi vì đó là trong banana.
  • Tôi có thể đảm bảo với bạn, tập tin không bao giờ trống và nó không bao giờ chứa các bản sao.
  • Nếu cần thiết , bạn có thể kết hợp trên dòng kết thúc. Nhưng đó là biện pháp cuối cùng chỉ được sử dụng khi không có cách nào khác để phân biệt giữa các mục trong danh sách (ví dụ: 'táo' và 'táo').

Sơ hở tiêu chuẩn không được phép. Ngoài ra, đây là mã golf nên mã ngắn nhất sẽ thắng.

Một ví dụ nữa:

(blank)
ban
any
king
bean
yen
rake
raki
bar
(blank)

Và đầu ra của nó:

ban,ny,g,be,ye,ke,aki,ar

1
@CarpetPython nó phải ngắn nhất có thể. Dấu cách có thể ở đầu vào và đầu ra, thêm vào câu hỏi.
freekvd

Chúng ta cũng có thể sử dụng các dòng mới ở đầu cụm từ tìm kiếm, nếu một chuỗi là hậu tố của một chuỗi khác?
Martin Ender

@ MartinBüttner có. Đó là lý do tại sao tài liệu bắt đầu và kết thúc bằng một dòng trống, vì vậy bạn có những dòng mới đó ở đầu và cuối của mỗi mục danh sách.
freekvd

4
Tôi khá chắc chắn rằng vấn đề này là NP-đầy đủ. Tôi nghĩ rằng tôi có thể xây dựng một vấn đề bao gồm chính xác cho vấn đề này.
FUZxxl 30/03/2015

4
Nhiều hơn là bạn sẽ không thấy bất kỳ giải pháp sáng tạo nào vì không có giải pháp nào tốt hơn vũ lực.
FUZxxl 30/03/2015

Câu trả lời:


3

Bình thường, 39 byte

Lsm.:bdtUbKfT.zj\,mhf!}Yjb-Kk+yky++bkbK

Bruteforces tất cả các tập hợp con của mỗi chuỗi có độ dài tăng dần và kiểm tra xem chuỗi đó có xảy ra bên trong bất kỳ chuỗi nào khác không. Nếu điều đó không làm việc, nó sẽ làm tương tự ngoại trừ tất cả các tập hợp con của \nstring\n.


Tôi nhận được một lỗi kết hợp loại xấu khi tôi kiểm tra này. pyth.herokuapp.com/ từ
freekvd

@faletvd Heroku phải có phiên bản lỗi thời của Pyth, vì gọi .:bằng chuỗi loại thứ nhất và int loại thứ hai không phải là một lỗi. Hãy thử sử dụng Pyth từ repo: github.com/isaacg1/pyth
orlp
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.