レストランの略記


8

ゴール

ディナーメニューには長い名前が付けられていることがあります。ウェイターが料理を明確に識別する略語を書く方がはるかに簡単です。

たとえば、次のリストがあるとします。

beef burger
chicken burger
chicken nuggets

略語がc n一致しchicken nuggetsます。
省略形はとbur一致beef burgerchicken burgerます。

略語に一致する1つ以上の項目を識別する機能のプログラムを作成します。

入力

  1. 検索する省略された文字列。
  2. 検索するアイテムのリスト。

この順序を変更して、適切なデータ型を使用できます。

出力

  • 略語がどの項目とも一致しない場合: Not found
  • 略語がアイテムと明確に一致する場合:省略されていないアイテムを出力します。
  • 省略形があいまいに複数の項目に一致する場合:選択を明確にする単語のコンマ区切りのリストを出力し、その後に疑問符を付けます。順序は重要ではありません。追加のスペースが許可されています。

マッチングルール

略語の各単語と項目は個別に考慮されます。略語がアイテムの単語の先頭と一致する場合、そのアイテムは一致する可能性があります。省略された単語のいずれかで始まるアイテムの単語がない場合、そのアイテムは一致しません。

省略語は任意の順序にすることができます。

略語を使用して複数のアイテムの単語を照合したり、その逆を行ったりすることはできません。

略語は単語の始まりにのみ一致します。

別のアイテムのすべての単語を含むアイテムはないと仮定します。たとえば、beef burgerおよびはありませんbeef cheese burger

テストケース

このリストを考えると:

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

これらの省略形は、指定された出力を示します。

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?

得点

これはコードゴルフです。12日間でバイト単位の最も短い回答が承認されます。(私はそれを1週間にしたでしょうが、私はそれのためにありません。)


なぜ私は、あるじゃない省略語は、複数のアイテムの単語を一致させるために使用することができない場合には重要であろうv試合vanilla cone
Dennis


1
@Dennisは、省略された単語が複数の項目の単語と一致した場合、あいまいc bではcrispy chicken burgerなく一致します。「単語」とは、スペースで区切られた文字列を意味し、g c b3つの単語も同様です。
Hand-E-Food

省略形があいまいに複数の項目に一致する場合:選択を明確にする単語のコンマ区切りリストを出力します。それは、それ自体で、一致するオプションから、または略語に加えて選択することを許可する単語を参照していますか?最初の解釈でcrispy,grilled,nuggets,chocolateは、chテストケースに対して有効である必要がありますか?2番目の解釈でchicken,grilledは、c bテストケースに対して有効である必要があります。何が欠けていますか?
Dennis

入力b b beef burger battered baconが与えられると、許容できる出力は何でしょうか?
Peter Taylor、

回答:


1

Python 2-181バイト

省略された文字列を正規表現に変換し、検索リストからグループを照合します。

3項演算ifelsesは14バイトです。私はそれをリストに切り詰めて、の状態に基づいて項目の1つにアクセスしようとしましたrが、これより短いものはまだありません。

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'

で電話する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?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.