La finalización de tabulación es una característica útil que completa automáticamente los comandos escritos parcialmente. Lo vas a implementar.
Por ejemplo, si los comandos disponibles fueran ['apply','apple','apple pie','eat'], entonces ase completarían en appl, ya que todos los comandos que comienzan con atambién comienzan con appl.
De entrada y salida
Debe ingresar una cadena, A y un conjunto de cadenas, B.
Debe generar el prefijo común más largo de todos los B que comienza con A.
- Si ninguna de las opciones comienza con A, entonces devuelve A
- Puede suponer que B no está vacío, y que todas las cadenas no están vacías
- No puede suponer que ninguna de las opciones comience con A, ni que el prefijo común sea más largo que A
- Puede ser sensible a mayúsculas o minúsculas.
- Solo necesita manejar ASCII imprimible
- Los elementos integrados que realizan esta tarea explícitamente están permitidos
Casos de prueba:
'a' ['apply','apple','apple pie','eat'] => 'appl'
'a' ['apple pie'] => 'apple pie'
'apple' ['eat','dine'] => 'apple'
'program' ['programa','programb'] => 'program'
'*%a(' ['*%a()-T>','*%a()-T<','@Da^n&'] => '*%a()-T'
'a' ['abs','absolute','answer'] => 'a'
'a' ['a','abs'] => 'a'
'one to' ['one to one','one to many'] => 'one to '
Tenga en cuenta el espacio final en el último caso de prueba
Este es un código de golf , ¡así que haga sus respuestas lo más breve posible!

\o'.'en un ejemplo. Si uso"para las cadenas, entonces las cadenas son diferentes a otros ejemplos.Respuestas:
JavaScript (ES6), 75 bytes
Explicación: Filtra en todos los prefijos coincidentes, luego se une con nuevas líneas y coincidencias contra una expresión regular que encuentra el prefijo común más largo de todas las líneas. Si no hay prefijos, la expresión regular devuelve una cadena vacía, en cuyo caso simplemente devolvemos la cadena original.
fuente
e.startsWith(s)cone.match("^"+s)un byte de Curry salvará otromatchcon ASCII imprimible arbitrario.(s,a)=>as=>a=>Jalea ,
1412 bytesPruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Pyth,
1413 bytesGracias a @isaacg por -1 byte
Un programa que toma la lista de cadenas, y luego la cadena, en STDIN e imprime el resultado.
Verificar todos los casos de prueba
Cómo funciona
fuente
f}zT=>/#zPowerShell v3 +, 112 bytes
Toma la entrada como una cadena
$ay una matriz de cadenas$b. Utiliza el-likeoperador para extraer esos elementos de los$bque comienza (sin distinción entre mayúsculas y minúsculas)$a, explícitamente convertirlos como una matriz@(...)(ya que el resultado podría ser una coincidencia como escalar, en cuyo caso la indexación falla más tarde) y almacenar esa matriz en$c.Eso forma la
ifcláusula. Si no hay nada en$c(es decir, nada comienza con$a, por lo que la matriz está vacía), entonces la salida$acon elelse. De lo contrario ...Emitimos el primer elemento de
$ccomo unacharmatriz y recorremos cada elemento, concatenando cadenas con el anterior$iy colocando las cadenas en la tubería a través de paréntesis encapsulantes. Esos se filtran|?{...}(laWhere-Objectcláusula) para verificar que el valor.countde ual$ces-eqel.countde las cosas$cque son-likela subcadena (es decir, la subcadena coincide con todo en $ c). Como estamos construyendo nuestras subcadenas en orden más corto a más largo, necesitamos la última[-1]de las cadenas resultantes.Casos de prueba
fuente
Python 2, 122 bytes
Programa completo; toma una cadena y una lista de stdin exactamente como se indica en los ejemplos, excepto que las entradas deben estar en líneas separadas.
Verificar todos los casos de prueba
fuente
l.pop()lugar del[-1]?lgeneralmente es unsetpunto en ese punto, que no permite la indexación (estar desordenado). (Afortunadamente, ambos conjuntos y listas admitenpop().)Perl, 54 bytes
Incluye +2 para
-Xp(se puede combinar con-e) y +3 para-i(no se puede combinar)Dé el diccionario en STDIN y la palabra después de la
-iopción, por ejemplo:Solo el código:
fuente
Perl, 61 bytes
Incluye +2 para
-0pEjecute con la primera palabra seguida de las palabras del diccionario en STDIN:
tabcompletion.pl:fuente
Python 2, 112 bytes
fuente
Haskell, 67 bytes
La función auxiliar
?encuentra el prefijo común más largo de dos cadenas al tomar recursivamente el primer carácter siempre que sea el mismo para ambas cadenas y las cadenas no estén vacías.La función principal
%primero mantiene solo las cadenas en la lista que comienzan con la dadas, marcada por el prefijo común más largo consbeings. Para manejar que no haya competiciones válidas, se agregasa un resultado vacío a través demax. Luego, encuentra el prefijo común más largo de esos al plegar la función binaria?.fuente
Python 2, 75 bytes
Gracias a @xnor por sugerir el incorporado, utilizado originalmente por @BetaDecay en esta respuesta .
Para fines de puntuación,
ÿse puede reemplazar con un byte DEL. Pruébalo en Ideone .fuente
D, 88 bytes
Uso:
El código simplemente elimina todos los elementos
qque no comienzanp, luego calcula la subsecuencia inicial común más grande de los elementos restantes.Los parámetros de plantilla nos ahorran dos repeticiones de
stringy una deauto. El mal uso de la excepción nos permite evitar la variable temporal y condicional que de otro modo sería necesaria para manejar el caso en el que no hay elementos deqiniciop.fuente
Python 2,
107102 bytesPara fines de puntuación,
ÿse puede reemplazar con un byte DEL. Pruébalo en Ideone .¡Gracias a @xnor por guardar 5 bytes!
fuente
os.path.commonprefixque encontró Beta Decay , puede hacer que haga el trabajo por usted.for c in ...directamente y terminar con un error después de imprimir comoif len(set(c))>1:print r or s;_.PHP,
167160157152 bytesPodría ahorrar 3 bytes más asignando variables con
preg_grepypreg_quote, pero eh.Descompostura
fuente
PHP, 156 bytes
con mucha ayuda de Titus Gracias
PHP, 199 bytes
32 Bytes guardados por Titus con array_unique
Sé que la Solución Regex de Titus fue más corta hasta que Titus me ayudó a mejorar mi camino. Tal vez la forma que encontré es interesante para ti
fuente
$zcon$spara arreglar elapple, [eat,dine]caso. 2)$l=es obsoleto; No usas esa variable. (-2) 3)$i++<$mes más corto que++$i<=$m. (-1) 4)substr($x,0,$i);es más corto questr_split($x,$i)[0]. (-3) 5) Puedes poner$r[]=$vdentro del strlen. (-5)<2es más corto que==1. (-1) 7) Se podría utilizarstrstren el primer bucle:strstr($v,$s)==$v. (-3)$r[]=$v;$m=max($m,strlen($v));con$m=max($m,strlen($r[]=$v));y soltar los curlys. Esto no toca la condición.$mnada. Todo lo que necesita es algo que sea> = la longitud mínima de los reemplazos. El nuevo 5) Reemplazar{$r[]=$v;$m=max($m,strlen($v));}con$r[]=$v;}y<$mcon<strlen($r[0])(-13)$r[]=$z=$v;en el primer bucle y{$s=substr($z,0,$i);foreach($r as$x)if($x[$i]!=$z[$i])break 2;}para el segundo (-3)Retina, 60 bytes
La nueva línea final es significativa. Toma la entrada como la cadena en una línea y luego cada palabra en una línea separada (¡pero sin nueva línea final!). Funciona de manera similar a mi respuesta de JavaScript haciendo coincidir el prefijo común más largo de todas las líneas que comienzan con la cadena en la primera línea. Si no encuentra uno, simplemente borra todas las palabras.
fuente
Scala, 119 bytes
Sin golf:
Explicación:
fuente
Potencia Shell , 101 bytes
Basado en la increíble expresión regular de Nail .
Pruébalo en línea!
fuente
05AB1E , 14 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Gaia , 12 bytes
Pruébalo en línea!
Toma la entrada como B, luego A.
fuente