Вдохновленный этой ссылкой я нашел на Reddit .
FuzzyFinder является функцией многих текстовых редакторов. Когда вы начинаете вводить путь к файлу S
, запускается FuzzyFinder и показывает вам все файлы в текущем каталоге, содержащие введенную вами строку, отсортированные по позиции S
в файле.
Ваша задача - реализовать нечеткий искатель. Это должна быть программа или функция, которая принимает (через stdin, аргумент функции или командную строку) строку S
и список строк L
, отформатированных по вашему желанию, и возвращает или печатает результат запуска нечеткого искателя. Поиск должен быть чувствительным к регистру. Результаты, где S
в нескольких строках находится в одной позиции, могут быть отсортированы по вашему желанию.
Пример:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]
Это код гольф, поэтому выигрывает самое короткое решение.
Ответы:
Pyth, 9 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Python 2, 65
Выражение
x.find(s)
возвращает позицию первого вхожденияs
inx
, отдавая-1
без совпадения. Мы добавляем1
к результату, которому соответствует0
несоответствие, выпускаяfilter
их. Затем мы сортируем по позиции совпадения, на которую не влияет смещение на 1.источник
CJam,
1815 байтовПопробуйте онлайн в интерпретаторе CJam .
I / O
Входные данные:
Выход:
Как это устроено
источник
GolfScript, 13 байт
Это один из тех редких случаев, когда GolfScript может превзойти CJam, используя конкатенацию блоков и несколько свобод с вводом, который можно отформатировать так, как вы пожелаете .
Попробуйте онлайн в Web GolfScript .
I / O
вход
Выход
Как это устроено
источник
JavaScript ES6, 68 байт
Это анонимная функция, которая принимает параметры
s
(строка пути к файлу) иl
(массив строк). Приведенный ниже фрагмент стека содержит некоголенный код, преобразованный в ES5, чтобы больше людей могли его легко протестировать. (Если у вас есть Firefox, вы можете использовать более симпатичный набор тестов edc65, найденный в его ответе.)источник
[Hold] Pyth, 24 байта
Попробуй здесь
Я довольно новичок в Code Golfing / Pyth, поэтому я не уверен, что это оптимально, но я работаю над этим!
Обновление: я не думаю, что я на самом деле сортирую правильно, и я не могу заставить его работать. Я знаю, что
o
это по порядку, и мне нужно отсортировать по позиции S, поэтому я использую.:GlJ
, чтобы найти все подстроки длины S для текущего элемента,G
а затемx
, чтобы найти индекс первого вхождения С, но я не могу правильно установить лямбду.источник
z
иQ
. Их использование дает вам сразу 18 байтов. И вы можете удалитьl
inVlK
=> 17 байт ( ссылка )imig mig migd do Mig imig
JavaScript ( ES6 ), 68
Это почти то же самое, что и ответ @NBM (даже если он не скопирован), так что я не ожидаю повышенных голосов. Наслаждайся фрагментом в любом случае
Функция со строкой и строковым массивом аргументов, возвращающая строковый массив. Фильтруйте, затем сортируйте.
Выполните тестовый фрагмент кода ниже (это EcmaScript 6, только Firefox)
источник
ОРАКУЛ, 60
Это считается?
select * from t where a like '%mig%' order by instr(a,'mig')
источник
Хаскелл,
129116116 (Спасибо Фрэнки):
129:
Ну, это довольно долго, может быть, я найду, как немного сократить это ...
источник
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 байтЯ только что создал функцию, которая принимает
s
в качестве строки для сравнения в списке строкn
Редактировать 1: Спасибо Якубе за игру в гольф от байта.
Проверьте это здесь.
источник
Руби, 63
Бегать
Примечания
find_all
Изменить (от daneiro)
Руби, 49
источник
p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
select
это псевдоним дляfind_all,
иsort
иsort_by
в основном это одни и те же вещи в несколько разных упаковках. Вместо этого я возбуждаю вас за то, что вы думаете о том же решении, что и я;)Ракетка 46 байт
Использование:
Тестирование:
Выход:
источник
Groovy, 32 байта
источник
зернышко , 15 байт
14 байтов кода, +1 за
-p
флаг.Принимает список как аргументы командной строки и строку из stdin. Попробуйте онлайн!
объяснение
источник