Inspirowany tym linkiem znalazłem na Reddit .
FuzzyFinder to funkcja wielu edytorów tekstu. Gdy zaczynasz wpisywać ścieżkę pliku S
, FuzzyFinder uruchamia się i wyświetla wszystkie pliki w bieżącym katalogu zawierające wprowadzony ciąg, posortowane według pozycjiS
w pliku.
Twoim zadaniem jest zaimplementować rozmytą wyszukiwarkę. Powinien to być program lub funkcja, która pobiera (za pomocą stdin, argumentu funkcji lub wiersza poleceń) ciąg znaków S
i listę ciągów L
, sformatowanych w dowolny sposób i zwraca lub drukuje wynik działania wyszukiwarki rozmytej. W wyszukiwaniu rozróżniana jest wielkość liter. Wyniki gdzieS
jest w tej samej pozycji w wielu ciągach, mogą być sortowane według własnego uznania.
Przykład:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]
To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie.
Odpowiedzi:
Pyth, 9 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
Python 2, 65
Wyrażenie
x.find(s)
zwraca pozycję pierwszego wystąpienias
inx
, dając-1
brak dopasowania. Dodajemy1
do wyniku, że nie odpowiada mecz0
, pozwalając namfilter
je wyrzucić. Następnie sortujemy według pozycji dopasowania, na którą nie ma wpływu przesunięcie o 1.źródło
CJam,
1815 bajtówWypróbuj online w interpretatorze CJam .
I / O
Wejście:
Wynik:
Jak to działa
źródło
GolfScript, 13 bajtów
Jest to jedna z tych rzadkich sytuacji, w których GolfScript może pokonać CJam, wykorzystując konkatenację bloków i biorąc kilka swobód z danymi wejściowymi, które można dowolnie sformatować .
Wypróbuj online w Web GolfScript .
I / O
Wejście
Wynik
Jak to działa
źródło
JavaScript ES6, 68 bajtów
Jest to anonimowa funkcja, która pobiera parametry
s
(ciąg ścieżki pliku) il
(tablica ciągów). Poniższy fragment kodu zawiera niezgolfowany kod przekonwertowany na ES5, aby więcej osób mogło go łatwo przetestować. (Jeśli masz Firefox, możesz użyć ładniejszego pakietu testowego edc65 znalezionego w jego odpowiedzi.)źródło
[Przytrzymaj] Pyth, 24 bajty
Spróbuj jest tutaj
Jestem całkiem nowy w Code Golfing / Pyth, więc nie jestem pewien, czy to optymalne, ale pracuję nad tym!
Aktualizacja: Nie sądzę, że właściwie sortuję i wydaje mi się, że nie mogę go uruchomić. Wiem, że
o
jest to kolejność i muszę sortować według pozycji S, więc używam.:GlJ
, aby znaleźć wszystkie podłańcuchy długości S dla bieżącego elementu,G
a następniex
w celu znalezienia indeksu pierwszego wystąpienia S, ale nie mogę poprawnie ustawić lambdy.źródło
z
iQ
. Korzystanie z nich daje natychmiast 18 bajtów. I możesz usunąćl
inVlK
=> 17 bajtów ( link )imig mig migd do Mig imig
JavaScript ( ES6 ), 68
To prawie taka sama odpowiedź @NBM (nawet jeśli nie została skopiowana), więc nie oczekuję pozytywnych opinii. W każdym razie ciesz się fragmentem
Funkcja z ciągiem i argumentami tablicy ciągów zwraca tablicę ciągów. Filtruj, a następnie sortuj.
Testuj runnign poniżej (tylko EcmaScript 6, tylko Firefox)
źródło
ORACLE, 60
Czy to się liczy?
select * from t where a like '%mig%' order by instr(a,'mig')
źródło
Haskell,
129116116 (Dzięki Franky):
129:
Cóż, jest dość długi, może znajdę jak to trochę skrócić ...
źródło
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 bajtówWłaśnie stworzyłem funkcję, która bierze
s
jako ciąg znaków, aby dopasować na liście ciągówn
Edycja 1: Podziękowania dla Jakube za grę w bajt.
Sprawdź to tutaj.
źródło
Ruby, 63
Biegać
Notatki
find_all
Edytuj (autor danychiro)
Ruby, 49
źródło
p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
select
jest aliasemfind_all,
isort
isort_by
są zasadniczo te same rzeczy w nieco różnych opakowaniach. Zamiast tego będę cię głosować za myślenie o tym samym rozwiązaniu co ja;)Rakieta 46 bajtów
Stosowanie:
Testowanie:
Wynik:
źródło
Groovy, 32 bajty
źródło
Pip , 15 bajtów
14 bajtów kodu, +1 dla
-p
flagi.Pobiera listę jako argumenty wiersza polecenia i ciąg ze standardowego wejścia. Wypróbuj online!
Wyjaśnienie
źródło