Inspirado por este link que encontrei no Reddit .
Um FuzzyFinder é um recurso de muitos editores de texto. Quando você começa a digitar o caminho de um arquivo S
, o FuzzyFinder entra em ação e mostra todos os arquivos no diretório atual que contém a sequência digitada, classificada pela posição S
no arquivo.
Sua tarefa é implementar um localizador nebuloso. Deve ser um programa ou função que recebe (via stdin, argumento da função ou linha de comando) uma string S
e uma lista de strings L
, formatadas da maneira que desejar, e retorna ou imprime o resultado da execução do finder difuso. A pesquisa deve fazer distinção entre maiúsculas e minúsculas. Os resultados S
em que a mesma posição está em várias seqüências podem ser classificados da maneira que você desejar.
Exemplo:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]
Isso é código de golfe, então a solução mais curta vence.
Respostas:
Pitão, 9 bytes
Experimente online: Demonstração
Explicação:
fonte
Python 2, 65
A expressão
x.find(s)
retorna a posição da primeira ocorrência des
inx
, não fornecendo-1
correspondência. Acrescentamos1
ao resultado a que não corresponde0
, deixando-filter
os sair. Em seguida, classificamos a posição da partida, que não é afetada pela troca de 1.fonte
CJam,
1815 bytesExperimente on-line no intérprete CJam .
I / O
Entrada:
Resultado:
Como funciona
fonte
GolfScript, 13 bytes
Essa é uma daquelas raras ocasiões em que o GolfScript pode vencer o CJam, usando a concatenação de blocos e obtendo algumas liberdades com a entrada que pode ser formatada da maneira que você desejar .
Experimente online no Web GolfScript .
I / O
Entrada
Resultado
Como funciona
fonte
JavaScript ES6, 68 bytes
Esta é uma função anônima que aceita parâmetros
s
(sequência do caminho do arquivo) el
(matriz de sequências). O snippet de pilha abaixo contém código não-convertido convertido para ES5 para que mais pessoas possam testá-lo facilmente. (Se você possui o Firefox, pode usar o conjunto de testes mais bonito do edc65 encontrado em sua resposta.)fonte
[Hold] Pyth, 24 bytes
A tentativa está aqui
Eu sou bastante novo no Code Golfing / Pyth, então não tenho certeza de que é o ideal, mas estou trabalhando nisso!
Atualização: Eu não acho que estou classificando corretamente e não consigo fazê-lo funcionar. Eu sei que isso
o
é ordenado por, e eu preciso classificar pela posição de S, então eu estou usando.:GlJ
para encontrar todas as substrings do comprimento de S para o elemento atualG
e,x
em seguida , para encontrar o índice da primeira ocorrência de S, mas não consigo definir o lambda corretamente.fonte
z
eQ
. Usá-los fornece imediatamente 18 bytes. E você pode remover ol
VlK
imig mig migd do Mig imig
JavaScript ( ES6 ), 68
Isso é quase o mesmo da resposta do @NBM (mesmo que não seja copiado), então não espero votos positivos. Aproveite o snippet de qualquer maneira
Uma função com argumentos de seqüência de caracteres e matriz de seqüência de caracteres, retorna uma matriz de seqüência de caracteres. Filtrar e classificar.
Teste a execução do fragmento abaixo (sendo apenas EcmaScript 6, Firefox)
fonte
ORACLE, 60
Isso conta?
select * from t where a like '%mig%' order by instr(a,'mig')
fonte
Haskell,
129116116 (Graças a Franky):
129:
Bem, é muito longo, talvez eu descubra como diminuir um pouco ...
fonte
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 bytesAcabei de criar uma função que leva
s
como string para combinar em uma lista de stringsn
Edit 1: Agradecimentos a Jakube por jogar fora um byte.
Confira aqui.
fonte
Ruby, 63
Corre
Notas
find_all
Editar (de daneiro)
Ruby, 49
fonte
p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
select
é um apelido parafind_all,
esort
esort_by
são basicamente as mesmas coisas em um pouco diferentes envolvimentos. Em vez disso, votarei em você, por pensar na mesma solução que eu;) #Raquete 46 bytes
Uso:
Teste:
Resultado:
fonte
Groovy, 32 bytes
fonte
Pip , 15 bytes
14 bytes de código, +1 para
-p
sinalizador.Leva a lista como argumentos da linha de comando e a string de stdin. Experimente online!
Explicação
fonte