Objetivo
Às vezes, os menus do jantar podem ter nomes longos. É muito mais fácil para o garçom escrever uma abreviação que identifica inequivocamente o prato.
Por exemplo, dada esta lista:
beef burger
chicken burger
chicken nuggets
A abreviação c n
corresponde chicken nuggets
.
A abreviação bur
corresponde a beef burger
e chicken burger
.
Escreva um programa de função que identifique um ou mais itens que correspondam a uma abreviação.
Entrada
- A sequência abreviada para encontrar.
- Uma lista de itens para pesquisar.
Você pode alterar essa ordem e usar qualquer tipo de dados adequado.
Resultado
- Se a abreviação não corresponder a nenhum item:
Not found
- Se a abreviação corresponder inequivocamente a um item: produza o item não abreviado.
- Se a abreviação corresponder ambiguamente a vários itens: produza uma lista de palavras separadas por vírgula que tornariam a seleção inequívoca, seguida por um ponto de interrogação. A ordem não é importante. Espaços extras são permitidos.
Regras de correspondência
Cada palavra na abreviação e os itens são considerados separadamente. Se uma palavra abreviada corresponder ao início de uma palavra do item, o item será uma correspondência potencial. Se nenhuma das palavras de um item começar com nenhuma das palavras abreviadas, esse item não corresponderá.
Palavras abreviadas podem estar em qualquer ordem.
Uma palavra abreviada não pode ser usada para corresponder a várias palavras de itens e vice-versa.
As abreviações correspondem apenas ao início das palavras.
Suponha que nenhum item contenha todas as palavras de outro item. Por exemplo, você nunca terá beef burger
e beef cheese burger
.
Casos de teste
Dada esta lista:
beef burger
crispy chicken burger
grilled chicken burger
chicken nuggets
chocolate cone
strawberry cone
vanilla cone
Essas abreviações fornecem a saída especificada:
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?
Pontuação
Isso é código de golfe. A resposta mais curta em bytes em 12 dias ganha aceitação. (Eu teria conseguido uma semana, mas não estarei por perto.)
v
correspondervanilla cone
.c b
corresponderia aocrispy chicken burger
invés de ser ambígua. Quando digo "palavra", quero dizer uma sequência de caracteres delimitada por um espaço,g c b
três palavras também.crispy,grilled,nuggets,chocolate
deve ser válido para och
caso de teste? Com a segunda interpretação,chicken,grilled
deve ser válida para oc b
caso de teste. o que estou perdendo?b b
beef burger
battered bacon
qual seria a saída aceitável?Respostas:
Python 2 - 181 bytes
Ele transforma a sequência abreviada em uma expressão regular e tenta corresponder grupos da lista de pesquisa.
A operação ternário
if
eelse
s é de 14 bytes. Tentei recortá-lo em uma lista e acessar um dos itens com base no estado der
, mas ainda não há nada mais curto que isso.Ligue para
s(str, list)
:fonte