Inspiriert von diesem Link, den ich auf Reddit gefunden habe .
Ein FuzzyFinder ist eine Funktion vieler Texteditoren. Wenn Sie mit S
der Eingabe eines Dateipfads beginnen , wird der FuzzyFinder gestartet und zeigt Ihnen alle Dateien im aktuellen Verzeichnis mit der eingegebenen Zeichenfolge, sortiert nach der Position S
in der Datei.
Ihre Aufgabe ist es, einen Fuzzy-Finder zu implementieren. Es sollte sich um ein Programm oder eine Funktion handeln, die (über stdin, ein Funktionsargument oder eine Befehlszeile) eine Zeichenfolge S
und eine Liste von Zeichenfolgen verwendet L
, die wie gewünscht formatiert sind und das Ergebnis der Ausführung des Fuzzy-Finders zurückgibt oder ausgibt. Die Suche sollte zwischen Groß- und Kleinschreibung unterscheiden. Ergebnisse, bei denen S
sich mehrere Zeichenfolgen an derselben Position befinden, können nach Belieben sortiert werden.
Beispiel:
Input: mig, [imig, mig, migd, do, Mig]
Output:
[mig, migd, imig]
OR
[migd, mig, imig]
Das ist Codegolf, also gewinnt die kürzeste Lösung.
Antworten:
Pyth, 9 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Python 2, 65
Der Ausdruck
x.find(s)
gibt die Position des ersten Auftretens vons
in zurückx
und ergibt-1
keine Übereinstimmung. Wir fügen1
dem Ergebnis hinzu, dass keine Übereinstimmung mit entspricht,0
und lassen unsfilter
sie heraus. Wir sortieren dann nach der Match-Position, die durch die Verschiebung um 1 nicht beeinflusst wird.quelle
CJam,
1815 BytesProbieren Sie es online im CJam-Interpreter aus .
I / O
Eingang:
Ausgabe:
Wie es funktioniert
quelle
GolfScript, 13 Bytes
Dies ist eine der seltenen Situationen, in denen GolfScript CJam schlagen kann, indem Blockverkettung verwendet wird und ein paar Freiheiten mit den Eingaben gemacht werden, die nach Belieben formatiert werden können .
Versuchen Sie es online in Web GolfScript .
I / O
Eingang
Ausgabe
Wie es funktioniert
quelle
JavaScript ES6, 68 Byte
Dies ist eine anonyme Funktion, die Parameter
s
(Dateipfadzeichenfolge) undl
(Array von Zeichenfolgen) akzeptiert. Das folgende Stack-Snippet enthält unbenutzten Code, der in ES5 konvertiert wurde, sodass mehr Benutzer ihn problemlos testen können. (Wenn Sie Firefox haben, können Sie die schönere Testsuite von edc65 verwenden, die in seiner Antwort zu finden ist.)quelle
[Gedrückt halten] Pyth, 24 Bytes
Versuch ist hier
Ich bin ziemlich neu bei Code Golfing / Pyth und bin mir nicht sicher, ob es optimal ist, aber ich arbeite daran!
Update: Ich glaube nicht, dass ich richtig sortiere, und ich kann es nicht zum Laufen bringen. Ich weiß, dass
o
es sich um eine Sortierung nach der Position von S handelt, also verwende ich.:GlJ
, um alle Teilzeichenfolgen der Länge von S für das aktuelle ElementG
und anschließendx
den Index des ersten Vorkommens von zu finden S, aber ich kann Lambda nicht richtig einstellen.quelle
z
undQ
. Wenn Sie sie verwenden, erhalten Sie sofort 18 Bytes. Und Sie können diel
inVlK
=> 17 Bytes ( Link )imig mig migd do Mig imig
JavaScript ( ES6 ), 68
Das ist fast dasselbe wie bei der @NBM-Antwort (auch wenn sie nicht kopiert wurde), daher erwarte ich keine Gegenstimmen. Trotzdem viel Spaß mit dem Snippet
Eine Funktion mit einem String und einem String-Array-Argument gibt ein String-Array zurück. Filtern und dann sortieren.
Testlaufe das folgende Snippet (nur in EcmaScript 6, Firefox)
quelle
ORACLE, 60
Zählt das?
select * from t where a like '%mig%' order by instr(a,'mig')
quelle
Haskell,
129116116 (Dank an Franky):
129
Nun, es ist ziemlich lang, vielleicht finde ich heraus, wie ich es ein bisschen verkürzen kann ...
quelle
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 BytesIch habe soeben eine Funktion erstellt, die
s
als Zeichenfolge für die Übereinstimmung in einer Liste von Zeichenfolgen dientn
Edit 1: Danke an Jakube fürs Abschlagen eines Bytes.
Schau es dir hier an.
quelle
Rubin, 63
Lauf
Anmerkungen
find_all
Bearbeiten (von daneiro)
Rubin, 49
quelle
p=->w,l{l.select{|x|x[w]}.sort_by{|e|e.index(w)}}
select
ist ein Alias fürfind_all,
undsort
undsort_by
sind im Grunde die gleichen Dinge in leicht unterschiedlichen Umhüllungen. Ich stimme dir stattdessen zu, weil du über die gleiche Lösung nachgedacht hast wie ich;)Schläger 46 Bytes
Verwendung:
Testen:
Ausgabe:
quelle
Groovy, 32 Bytes
quelle
Pip , 15 Bytes
14 Byte Code, +1 für
-p
Flag.Übernimmt die Liste als Befehlszeilenargumente und die Zeichenfolge aus stdin. Probieren Sie es online!
Erläuterung
quelle