Objetivo
A veces los menús de la cena pueden tener nombres largos y sin aliento. Es mucho más fácil para el camarero escribir una abreviatura que identifique inequívocamente el plato.
Por ejemplo, dada esta lista:
beef burger
chicken burger
chicken nuggets
La abreviatura c n
coincide chicken nuggets
.
La abreviatura bur
coincide beef burger
y chicken burger
.
Escriba un programa de función que identifique uno o más elementos que coincidan con una abreviatura.
Entrada
- La cadena abreviada para encontrar.
- Una lista de elementos para buscar.
Puede cambiar este orden y usar cualquier tipo de datos adecuado.
Salida
- Si la abreviatura no coincide con ningún elemento:
Not found
- Si la abreviatura coincide inequívocamente con un elemento: envíe el elemento sin abreviar.
- Si la abreviatura coincide ambiguamente con varios elementos: genera una lista de palabras separadas por comas que harían que la selección no fuera ambigua, seguida de un signo de interrogación. El orden no es importante. Se permiten espacios adicionales.
Reglas a juego
Cada palabra en la abreviatura y los elementos se consideran por separado. Si una palabra abreviada coincide con el comienzo de una palabra de elemento, el elemento es una coincidencia potencial. Si ninguna de las palabras de un elemento comienza con ninguna de las palabras abreviadas, ese elemento no coincide.
Las palabras abreviadas pueden estar en cualquier orden.
Una palabra abreviada no se puede usar para hacer coincidir varias palabras de artículos y viceversa.
Las abreviaturas solo coinciden con el inicio de las palabras.
Suponga que ningún elemento contendrá todas las palabras de otro elemento. Por ejemplo, nunca tendrás beef burger
y beef cheese burger
.
Casos de prueba
Dada esta lista:
beef burger
crispy chicken burger
grilled chicken burger
chicken nuggets
chocolate cone
strawberry cone
vanilla cone
Estas abreviaturas dan la salida 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?
Puntuación
Este es el código de golf. La respuesta más corta en bytes en 12 días gana aceptación. (Lo habría hecho una semana, pero no voy a estar ahí para eso).
v
coincidevanilla cone
.c b
coincidiría encrispy chicken burger
lugar de ser ambigua. Cuando digo "palabra" me refiero a una cadena de caracteres delimitados por un espacio, también log c b
son tres palabras.crispy,grilled,nuggets,chocolate
debería ser válido para elch
caso de prueba? Con la segunda interpretación,chicken,grilled
debe ser válido para elc b
caso de prueba. ¿Qué me estoy perdiendo?b b
beef burger
battered bacon
¿cuál sería la salida aceptable?Respuestas:
Python 2 - 181 bytes
Convierte la cadena abreviada en una expresión regular e intenta unir grupos de la lista de búsqueda.
La operación ternaria
if
yelse
s son 14 bytes. Intenté reducirlo a una lista y luego acceder a uno de los elementos según el estado der
, pero todavía no tengo nada más corto.Llamar con
s(str, list)
:fuente