Có bao nhiêu mesas bắt đầu với một chuỗi nhất định?


11

Chúng ta hãy gọi một danh sách các chuỗi không trống là mesa nếu các điều kiện sau giữ:

  1. Mỗi chuỗi được liệt kê là không trống và chỉ sử dụng các ký tự xảy ra trong chuỗi đầu tiên.
  2. Mỗi chuỗi liên tiếp dài hơn một ký tự so với chuỗi trước.
  3. Không có chuỗi nào trong danh sách là chuỗi con của bất kỳ chuỗi nào khác trong danh sách.

Thuật ngữ "mesa" là từ hình dung như thế này (trong đó xs là các ký tự khác nhau):

    xx..x
    xx..xx
    xx..xxx
    .
    .
    .
    xx..xxx..x 

Lưu ý: Đó là một thực tế toán học chỉ có nhiều mesas mới bắt đầu bằng một chuỗi nhất định. Lưu ý sự khác biệt giữa dãy vs chuỗi ; ví dụ: 'anna' là một chuỗi con (nhưng không phải là chuỗi con) của 'chuối'.

Thử thách:

  • Viết chương trình ngắn nhất có một chuỗi đầu vào chữ và số không trống tùy ý và xuất ra số lượng mesas bắt đầu bằng chuỗi đó.

Đầu vào (stdin):

  • Bất kỳ chuỗi chữ và số không trống.

Đầu ra (thiết bị xuất chuẩn):

  • Số lượng mesas bắt đầu bằng chuỗi đầu vào.

Ghi điểm:

  • Người chiến thắng là chương trình có số byte ít nhất.

Ví dụ

Chỉ một mesa bắt đầu bằng a:

a

Chỉ một mesa bắt đầu bằng aa:

aa

Nhiều mesas bắt đầu với ab:

ab        ab        ab        ab        (and so on)
          baa       aaa       bbb
                    bbba      bbaa
                              baaaa
                              aaaaaa

Làm thế nào là sự độc đáo của một mesa được xác định? Ví dụ, tôi có thể có ab, bbbnhư một mesa chỉ bằng cách dừng lại ở nhiệm kỳ thứ hai. Điều đó có hợp lệ không? Hay họ luôn phải được thực hiện càng lâu càng tốt? Ngoài ra, nếu có nhiều chủ trương sắp xếp có thể có của các nthhạn (ví dụ như baa, aba, aab), làm họ đều được tính là mesas riêng biệt cũng như (cung cấp tất nhiên tất cả họ đều làm theo các quy tắc)?
mellamokb

@mellamokb - Chúng là mesas khác nhau nếu chúng khác nhau về mọi mặt. Ví dụ ab, ab/baa, ab/bbb, ab/bbb/bbaa, ab/bbb/bbaa/baaaa, ab/bbb/bbaa/baaaa/aaaaaalà mesas khác nhau.
res

@mellamokb - Bạn đưa ra những câu hỏi hay khác; ví dụ: có bao nhiêu mesas có độ dài tối đa bắt đầu bằng một chuỗi nhất định và độ dài tối đa đó là bao nhiêu. Các phiên bản khác của những câu hỏi này sẽ sửa một bảng chữ cái có kích thước nhất định (kích thước bảng chữ cái sẽ là đầu vào) và sẽ xem xét tất cả các mesas (được xác định lại không có điều kiện # 1) chỉ sử dụng các chữ cái từ bảng chữ cái đã cho - một lần nữa chỉ có rất nhiều.
res

Câu trả lời:



2

Ruby, 142 ký tự

m=->l{[*l[0].chars].repeated_permutation(l[-1].size+1).reduce(1){|s,x|l.any?{|y|x*''=~/#{[*y.chars]*'.*'}/}?s:s+m[l+[x*'']]}}
p m[[gets.chop]]

Thuật toán này mang tính xây dựng, tức là nó xây dựng tất cả các mesas có thể cho chuỗi đầu vào và đếm chúng. Nó làm cho chương trình thực sự, thực sự chậm - nhưng này, nó là codegolf.

Ví dụ chạy:

> a
1
> aa
1
> ab
43

Tôi đã hy vọng rằng tất cả các mesas bắt đầu bằng một số chuỗi nhị phân không có độ dài 3 (ví dụ aab) có độ dài khả thi, nhưng tôi không chắc chắn - chương trình của bạn đã chạy được khoảng một giờ cho ví dụ đó. Lưu ý: Sẽ không có đầu ra khả thi cho bất kỳ đầu vào nào liên quan đến nhiều hơn hai chữ cái riêng biệt; ví dụ, một số mesas bắt đầu abccó chiều dài lớn hơn số Ackermann thứ 7000 .
res

Tôi đã xây dựng một phiên bản tối ưu hóa trong C # và sau khi tôi tạo 300,000các mục nhập với aabtôi, tôi vẫn thấy 10 thuật ngữ đầu tiên giống nhau. Vì vậy, tôi nghĩ rằng nó có thể không khả thi cho bất cứ điều gì lớn hơn hai nhân vật. Ít nhất, không phải không có một số tính toán thông minh và heuristic.
mellamokb
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.