Inspirado en este enlace que encontré en Reddit .
Un FuzzyFinder es una característica de muchos editores de texto. A medida que comienza a escribir una ruta de archivo S
, FuzzyFinder se activa y le muestra todos los archivos en el directorio actual que contiene la cadena que ingresó, ordenados por la posición del S
archivo.
Su tarea es implementar un buscador difuso. Debe ser un programa o función que tome (a través de stdin, argumento de función o línea de comando) una cadena S
y una lista de cadenas L
, formateadas como desee, y devuelva o imprima el resultado de ejecutar el buscador difuso. La búsqueda debe ser sensible a mayúsculas y minúsculas. Los resultados en los que se S
encuentra en la misma posición en varias cadenas se pueden ordenar como desee.
Ejemplo:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]
Este es el código de golf, por lo que gana la solución más corta.
Respuestas:
Pyth, 9 bytes
Pruébelo en línea: demostración
Explicación:
fuente
Pitón 2, 65
La expresión
x.find(s)
devuelve la posición de la primera aparición des
inx
, que-1
no da lugar a coincidencias. Agregamos1
al resultado que esa no coincidencia corresponde0
, dejándonosfilter
salir. Luego ordenamos por la posición del partido, que no se ve afectada al cambiar por 1.fuente
CJam,
1815 bytesPruébelo en línea en el intérprete de CJam .
I / O
Entrada:
Salida:
Cómo funciona
fuente
GolfScript, 13 bytes
Esta es una de esas raras ocasiones en las que GolfScript puede vencer a CJam, utilizando la concatenación de bloques y tomándose algunas libertades con la entrada que puede formatearse como desee .
Pruébelo en línea en Web GolfScript .
I / O
Entrada
Salida
Cómo funciona
fuente
JavaScript ES6, 68 bytes
Esta es una función anónima que toma parámetros
s
(cadena de ruta de archivo) yl
(matriz de cadenas). El Fragmento de pila a continuación contiene un código no codificado convertido a ES5 para que más personas puedan probarlo fácilmente. (Si tiene Firefox, puede usar el conjunto de pruebas más bonito de edc65 que se encuentra en su respuesta).fuente
[Sostener] Pyth, 24 bytes
Intenta está aquí
Soy bastante nuevo en Code Golfing / Pyth, así que no estoy seguro de que sea óptimo, ¡pero estoy trabajando en ello!
Actualización: No creo que realmente esté ordenando correctamente, y parece que no puedo hacer que funcione. Sé que
o
es ordenar por, y necesito ordenar por posición de S, así que estoy usando.:GlJ
para encontrar todas las subcadenas de la longitud de S para el elemento actualG
y luegox
para encontrar el índice de la primera aparición de S, pero parece que no puedo configurar lambda correctamente.fuente
z
yQ
. Usarlos te da inmediatamente 18 bytes. Y puede eliminar ell
inVlK
=> 17 bytes ( enlace )imig mig migd do Mig imig
JavaScript ( ES6 ), 68
Eso es casi lo mismo de la respuesta @NBM (incluso si no está copiada), por lo que no espero votos positivos. Disfruta el fragmento de todos modos
Una función con una cadena y una serie de argumentos de cadena, devuelve una matriz de cadena. Filtrar luego ordenar.
Pruebe ejecutar el fragmento a continuación (siendo EcmaScript 6, solo Firefox)
fuente
ORACLE, 60
¿Esto cuenta?
select * from t where a like '%mig%' order by instr(a,'mig')
fuente
Haskell,
129116116 (Gracias a Franky):
129:
Bueno, es bastante largo, tal vez encontraré cómo acortarlo un poco ...
fuente
h s=map snd.sort.map(\x->((head[c|c<-[0..length x],isPrefixOf s(drop c x)]),x)).filter(isInfixOf s)
Python 2,
696866 BytesAcabo de crear una función que toma
s
la cadena para que coincida en una lista de cadenasn
Edición 1: Gracias a Jakube por jugar golf en un byte.
Compruébalo aquí.
fuente
Rubí, 63
correr
Notas
find_all
Editar (por daneiro)
Rubí, 49
fuente
p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
select
es un alias parafind_all,
esort
ysort_by
son básicamente las mismas cosas en ligeramente diferentes envoltorios. En cambio, te votaré por pensar en la misma solución que yo;)Raqueta 46 bytes
Uso:
Pruebas:
Salida:
fuente
Groovy, 32 bytes
fuente
Pip , 15 bytes
14 bytes de código, +1 para
-p
bandera.Toma la lista como argumentos de línea de comando y la cadena de stdin. Pruébalo en línea!
Explicación
fuente