Nhà hàng tốc ký


8

Mục tiêu

Đôi khi thực đơn bữa tối có thể có tên dài ngoằn ngoèo. Người phục vụ dễ dàng hơn nhiều để viết một từ viết tắt mà rõ ràng xác định món ăn.

Ví dụ, đưa ra danh sách này:

beef burger
chicken burger
chicken nuggets

Các chữ viết tắt c nphù hợp chicken nuggets.
Các chữ viết tắt burphù hợp beef burgerchicken burger.

Viết chương trình hàm xác định một hoặc nhiều mục khớp với chữ viết tắt.

Đầu vào

  1. Chuỗi viết tắt để tìm.
  2. Một danh sách các mục để tìm kiếm.

Bạn có thể thay đổi thứ tự này và sử dụng bất kỳ loại dữ liệu phù hợp.

Đầu ra

  • Nếu chữ viết tắt không khớp với bất kỳ mục nào: Not found
  • Nếu chữ viết tắt rõ ràng khớp với một mục: xuất ra mục không viết tắt.
  • Nếu chữ viết tắt mơ hồ khớp với một số mục: xuất ra một danh sách các từ được phân tách bằng dấu phẩy sẽ làm cho lựa chọn không rõ ràng, theo sau là một dấu hỏi. Thứ tự không quan trọng. Không gian thêm được cho phép.

Quy tắc phù hợp

Mỗi từ trong chữ viết tắt và các mục được xem xét riêng. Nếu một từ viết tắt khớp với bắt đầu của một từ mục, thì mục đó là một từ phù hợp tiềm năng. Nếu không có từ nào của một mục bắt đầu bằng bất kỳ từ nào nếu các từ viết tắt, thì mục đó không khớp.

Các từ viết tắt có thể theo thứ tự bất kỳ.

Một từ viết tắt không thể được sử dụng để khớp với nhiều từ mục và ngược lại.

Chữ viết tắt chỉ phù hợp với sự bắt đầu của từ.

Giả sử không có mục nào chứa tất cả các từ của mục khác. Ví dụ, bạn sẽ không bao giờ có beef burgerbeef cheese burger.

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

Đưa ra danh sách này:

beef burger
crispy chicken burger
grilled chicken burger
chicken nuggets
chocolate cone
strawberry cone
vanilla cone

Những từ viết tắt này cho đầu ra được chỉ định:

fish           Not found
cones          Not found
chicken cone   Not found
nilla          Not found
v              vanilla cone
be             beef burger
c n            chicken nuggets
b b            beef burger
c b c          crispy chicken burger
c b            crispy,grilled?
bu             beef,crispy,grilled?
            or beef,crispy chicken,grilled chicken?
ch             crispy,grilled,nuggets,cone?
            or crispy chicken,grilled chicken,nuggets,cone?

Chấm điểm

Đây là mã golf. Câu trả lời ngắn nhất tính bằng byte trong 12 ngày sẽ được chấp nhận. (Tôi sẽ thực hiện nó một tuần, nhưng tôi sẽ không ở đó vì điều đó.)


Tôi không chắc chắn tại sao Một từ viết tắt không thể được sử dụng để khớp với nhiều từ mục sẽ rất quan trọng nếu vkhớp vanilla cone.
Dennis


1
@Dennis, nếu một từ viết tắt khớp với nhiều từ mục, c bsẽ khớp crispy chicken burgerthay vì mơ hồ. Khi tôi nói "từ", tôi có nghĩa là một chuỗi các ký tự được phân cách bởi một khoảng trắng, g c bba từ cũng vậy.
Thực phẩm điện tử

Nếu chữ viết tắt mơ hồ khớp với một số mục: xuất ra một danh sách các từ được phân tách bằng dấu phẩy sẽ làm cho lựa chọn không rõ ràng. Điều đó có đề cập đến một từ mà, chính nó, sẽ cho phép chọn từ các tùy chọn phù hợp, hoặc ngoài các chữ viết tắt? Với cách hiểu đầu tiên, crispy,grilled,nuggets,chocolatecó nên hợp lệ cho chtrường hợp thử nghiệm? Với cách hiểu thứ hai, chicken,grillednên có giá trị cho c btrường hợp thử nghiệm. Tôi đang thiếu gì?
Dennis

Cho đầu vào b b beef burger battered baconnhững gì sẽ được chấp nhận đầu ra?
Peter Taylor

Câu trả lời:


1

Python 2 - 181 byte

Nó biến chuỗi viết tắt thành regex và cố gắng khớp các nhóm từ danh sách tìm kiếm.

Các hoạt động ternary ifelses là 14 byte. Tôi đã cố gắng cắt nó thành một danh sách và sau đó truy cập vào một trong các mục dựa trên trạng thái r, nhưng chưa có gì ngắn hơn thế này.

import re
def s(a,l):
 r=[m.group(1)for e in l for m in[re.compile('^('+a.replace(' ','\w+ ')+'\w+)$').search(e)]if m]
 print','.join(r)+'?'if len(r)>1 else r[0]if r else'Not found'

Gọi với s(str, list):

s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger'])
>>> chicken nuggets
s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger', 'chicken nuggets with sauce', 'foobar'])
>>> chicken nuggets
s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger', 'chicken nuggets with sauce', 'foobar', 'cfoo nbar'])
>>> chicken nuggets,cfoo nbar?
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.