Restaurant Kurzschrift


8

Tor

Manchmal können Abendmenüs lange Namen haben. Für den Kellner ist es viel einfacher, eine Abkürzung zu schreiben, die das Gericht eindeutig identifiziert.

Zum Beispiel angesichts dieser Liste:

beef burger
chicken burger
chicken nuggets

Die Abkürzung c nstimmt überein chicken nuggets.
Die Abkürzung burstimmt mit beef burgerund überein chicken burger.

Schreiben Sie ein Funktionsprogramm, das ein oder mehrere Elemente identifiziert, die einer Abkürzung entsprechen.

Eingang

  1. Die abgekürzte Zeichenfolge, die gefunden werden soll.
  2. Eine Liste der zu durchsuchenden Elemente.

Sie können diese Reihenfolge ändern und geeignete Datentypen verwenden.

Ausgabe

  • Wenn die Abkürzung nicht mit Elementen übereinstimmt: Not found
  • Wenn die Abkürzung eindeutig mit einem Element übereinstimmt, geben Sie das nicht abgekürzte Element aus.
  • Wenn die Abkürzung nicht eindeutig mit mehreren Elementen übereinstimmt: Geben Sie eine durch Kommas getrennte Liste von Wörtern aus, die die Auswahl eindeutig machen würden, gefolgt von einem Fragezeichen. Die Reihenfolge ist nicht wichtig. Zusätzliche Plätze sind erlaubt.

Übereinstimmende Regeln

Jedes Wort in der Abkürzung und die Elemente werden separat betrachtet. Wenn ein abgekürztes Wort mit dem Anfang eines Elementworts übereinstimmt, ist das Element eine potenzielle Übereinstimmung. Wenn keines der Wörter eines Elements mit einem der abgekürzten Wörter beginnt, stimmt dieses Element nicht überein.

Abgekürzte Wörter können in beliebiger Reihenfolge sein.

Ein abgekürztes Wort kann nicht verwendet werden, um mehrere Artikelwörter zuzuordnen, und umgekehrt.

Abkürzungen stimmen nur mit dem Wortanfang überein.

Angenommen, kein Element enthält alle Wörter eines anderen Elements. Zum Beispiel werden Sie nie beef burgerund haben beef cheese burger.

Testfälle

Angesichts dieser Liste:

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

Diese Abkürzung ergibt die angegebene Ausgabe:

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?

Wertung

Das ist Code Golf. Die kürzeste Antwort in Bytes in 12 Tagen wird akzeptiert. (Ich hätte es eine Woche geschafft, aber dafür werde ich nicht da sein.)


Ich bin mir nicht sicher , warum ein abgekürztes Wort nicht verwendet werden , kann mehrere Artikel Worte Übereinstimmen wäre wichtig , wenn vStreichhölzer vanilla cone.
Dennis


1
@Dennis, wenn ein abgekürztes Wort mit mehreren Elementwörtern übereinstimmt, c bwürde übereinstimmen, crispy chicken burgeranstatt mehrdeutig zu sein. Wenn ich "Wort" sage, meine ich eine Zeichenfolge, die durch ein Leerzeichen begrenzt ist, also g c bdrei Wörter.
Hand-E-Food

Wenn die Abkürzung mehrdeutig mit mehreren Elementen übereinstimmt: Geben Sie eine durch Kommas getrennte Liste von Wörtern aus, die die Auswahl eindeutig machen würden. Bezieht sich das auf ein Wort, das es sich allein erlauben würde, aus den passenden Optionen oder zusätzlich zu den Abkürzungen zu wählen? Sollte bei der ersten Interpretation crispy,grilled,nuggets,chocolatefür den chTestfall gültig sein ? Mit der zweiten Interpretation chicken,grilledsollte für den c bTestfall gültig sein . Was vermisse ich?
Dennis

b b beef burger battered baconWas wäre bei gegebener Eingabe eine akzeptable Ausgabe?
Peter Taylor

Antworten:


1

Python 2 - 181 Bytes

Es verwandelt die abgekürzte Zeichenfolge in einen regulären Ausdruck und versucht, Gruppen aus der Suchliste zuzuordnen.

Die ternäre Operation ifund elses sind 14 Bytes. Ich habe versucht, es in eine Liste zu zerschneiden und dann basierend auf dem Status von auf eines der Elemente zuzugreifen r, habe aber noch nichts kürzeres als dieses.

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'

Rufen Sie an mit 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?
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.