Terinspirasi oleh tautan ini yang saya temukan di Reddit .
FuzzyFinder adalah fitur dari banyak editor teks. Ketika Anda mulai mengetikkan path file S
, FuzzyFinder menendang masuk dan memperlihatkan kepada Anda semua file dalam direktori saat ini yang berisi string yang Anda masukkan, diurutkan berdasarkan posisi S
dalam file.
Tugas Anda adalah mengimplementasikan pencari fuzzy. Seharusnya program atau fungsi yang mengambil (melalui stdin, argumen fungsi, atau baris perintah) string S
dan daftar string L
, diformat sesuai keinginan Anda, dan mengembalikan atau mencetak hasil menjalankan fuzzy finder. Pencarian harus case-sensitive. Hasil di mana S
berada di posisi yang sama di banyak string dapat diurutkan sesuai keinginan Anda.
Contoh:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]
Ini kode golf, jadi solusi terpendek menang.
Jawaban:
Pyth, 9 byte
Cobalah online: Peragaan
Penjelasan:
sumber
Python 2, 65
Ekspresi
x.find(s)
mengembalikan posisi kemunculan pertamas
inx
, memberi-1
tanpa kecocokan. Kami menambahkan1
hasilnya ke yang tidak cocok sesuai dengan0
, membiarkan kamifilter
keluar. Kami kemudian mengurutkan berdasarkan posisi pertandingan, yang tidak terpengaruh oleh perubahan oleh 1.sumber
CJam,
1815 byteCobalah online di penerjemah CJam .
I / O
Memasukkan:
Keluaran:
Bagaimana itu bekerja
sumber
GolfScript, 13 byte
Ini adalah salah satu kesempatan langka di mana GolfScript dapat mengalahkan CJam, dengan menggunakan blok concatenation dan mengambil beberapa kebebasan dengan input yang dapat diformat sesuai keinginan Anda .
Cobalah online di Web GolfScript .
I / O
Memasukkan
Keluaran
Bagaimana itu bekerja
sumber
JavaScript ES6, 68 byte
Ini adalah fungsi anonim yang mengambil parameter
s
(string jalur file) danl
(array string). Cuplikan Stack di bawah ini berisi kode yang tidak diubah yang dikonversi menjadi ES5 sehingga lebih banyak orang dapat mengujinya dengan mudah. (Jika Anda memiliki Firefox, Anda dapat menggunakan test suite edc65 yang lebih cantik yang ditemukan dalam jawabannya.)sumber
[Tahan] Pyth, 24 Bytes
Coba di sini
Saya cukup baru di Code Golfing / Pyth jadi saya tidak yakin itu optimal, tapi saya sedang mengusahakannya!
Pembaruan: Saya tidak berpikir saya benar-benar menyortir dengan benar, dan sepertinya saya tidak bisa membuatnya berfungsi. Saya tahu itu
o
adalah urutan-oleh, dan saya perlu mengurutkan berdasarkan posisi S jadi saya menggunakan.:GlJ
untuk menemukan semua substring dari panjang S untuk elemen saat iniG
dan kemudianx
untuk menemukan indeks kemunculan pertama dari S, tapi sepertinya saya tidak bisa mengatur lambda dengan benar.sumber
z
danQ
. Menggunakannya memberi Anda segera 18 byte. Dan Anda dapat menghapusl
inVlK
=> 17 byte ( tautan )imig mig migd do Mig imig
JavaScript ( ES6 ), 68
Itu hampir sama dengan jawaban @NBM (bahkan jika itu tidak disalin), jadi saya tidak mengharapkan upvotes. Nikmati potongannya
Fungsi dengan argumen string dan array string, mengembalikan array string. Saring lalu urutkan.
Uji runnign snippet di bawah ini (menjadi EcmaScript 6, hanya Firefox)
sumber
ORACLE, 60
Apakah ini masuk hitungan?
select * from t where a like '%mig%' order by instr(a,'mig')
sumber
Haskell,
129116116 (Terima kasih kepada Franky):
129:
Yah, ini cukup panjang, mungkin saya akan menemukan cara untuk mempersingkatnya sedikit ...
sumber
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 BytesSaya baru saja membuat fungsi yang mengambil
s
sebagai string untuk mencocokkan dalam daftar stringn
Sunting 1: Terima kasih kepada Jakube untuk bermain golf satu byte.
Lihat disini.
sumber
Ruby, 63
Lari
Catatan
find_all
Edit (oleh daneiro)
Ruby, 49
sumber
p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
select
adalah alias untukfind_all,
dansort
dansort_by
pada dasarnya adalah hal yang sama dalam bungkus yang sedikit berbeda. Saya akan mendukung Anda, karena memikirkan solusi yang sama dengan saya;)Racket 46 byte
Pemakaian:
Pengujian:
Keluaran:
sumber
Groovy, 32 byte
sumber
Pip , 15 byte
14 byte kode, +1 untuk
-p
bendera.Mengambil daftar sebagai argumen baris perintah dan string dari stdin. Cobalah online!
Penjelasan
sumber