Die Tab-Vervollständigung ist eine nützliche Funktion, mit der teilweise geschriebene Befehle automatisch vervollständigt werden. Sie werden es implementieren.
Wenn beispielsweise die verfügbaren Befehle vorhanden wären ['apply','apple','apple pie','eat']
, a
würde dies abgeschlossen werden appl
, da alle Befehle, die mit a
beginnen, auch mit beginnen appl
.
Input-Output
Sie müssen eine Zeichenfolge A und eine Reihe von Zeichenfolgen B eingeben.
Sie müssen das längste gemeinsame Präfix von B ausgeben, das mit A beginnt.
- Wenn keine der Optionen mit A beginnt, geben Sie A zurück
- Sie können davon ausgehen, dass B nicht leer ist und dass alle Zeichenfolgen nicht leer sind
- Sie können nicht davon ausgehen, dass eine der Optionen mit A beginnt oder dass das gemeinsame Präfix länger als A ist
- Sie können zwischen Groß- und Kleinschreibung unterscheiden.
- Sie müssen nur druckbares ASCII verarbeiten
- Built-Ins, die diese Aufgabe explizit ausführen, sind zulässig
Testfälle:
'a' ['apply','apple','apple pie','eat'] => 'appl'
'a' ['apple pie'] => 'apple pie'
'apple' ['eat','dine'] => 'apple'
'program' ['programa','programb'] => 'program'
'*%a(' ['*%a()-T>','*%a()-T<','@Da^n&'] => '*%a()-T'
'a' ['abs','absolute','answer'] => 'a'
'a' ['a','abs'] => 'a'
'one to' ['one to one','one to many'] => 'one to '
Beachten Sie das Leerzeichen im letzten Testfall
Dies ist ein Code-Golf , also machen Sie Ihre Antworten so kurz wie möglich!
\
oder nicht funktioniert'
.'
in einem Beispiel dargestellt werden soll. Wenn ich"
für die Zeichenfolgen verwende, unterscheiden sich die Zeichenfolgen von anderen Beispielen.Antworten:
JavaScript (ES6), 75 Byte
Erläuterung: Filtert nach allen übereinstimmenden Präfixen und fügt dann Zeilenumbrüche und Übereinstimmungen mit einem regulären Ausdruck ein, der das längste gemeinsame Präfix aller Zeilen findet. Wenn es keine Präfixe gibt, gibt der reguläre Ausdruck eine leere Zeichenfolge zurück. In diesem Fall geben wir einfach die ursprüngliche Zeichenfolge zurück.
quelle
e.startsWith(s)
mite.match("^"+s)
für ein Byte aus Curry ersetzen, wird ein anderes speichernmatch
mit beliebigen druckbaren ASCII- Dateien arbeiten .(s,a)=>
biss=>a=>
Jelly ,
1412 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Pyth,
1413 BytesVielen Dank an @isaacg für -1 Byte
Ein Programm, das die Liste der Zeichenfolgen und anschließend die Zeichenfolge in STDIN aufnimmt und das Ergebnis druckt.
Überprüfen Sie alle Testfälle
Wie es funktioniert
quelle
f}zT
=>/#z
PowerShell v3 +, 112 Byte
Übernimmt die Eingabe als Zeichenfolge
$a
und als Array von Zeichenfolgen$b
. Verwendet den-like
Operator, um diese Elemente aus$b
dem$a
Array@(...)
(ohne Berücksichtigung der Groß- / Kleinschreibung) zu ziehen, und wandelt sie explizit in ein Array um (da das Ergebnis eine Übereinstimmung als Skalar sein könnte, in welchem Fall die Indizierung später fehlschlägt) und speichert dieses Array in$c
.Das bildet die
if
Klausel. Wenn nichts drin ist$c
(dh nichts beginnt mit$a
, das Array ist also leer), dann wird$a
mit ausgegebenelse
. Andernfalls ...Wir setzen das erste Element von
$c
alschar
-array um und durchlaufen jedes Element, verketten die Zeichenfolgen mit dem vorherigen$i
und platzieren die Zeichenfolgen in der Pipeline durch Einkapseln von Parens. Diese wird durch gefiltert|?{...}
(dieWhere-Object
Klausel) zu überprüfen, ob die.count
von$c
ist-eq
ual zu den.count
Dingen in$c
denen sind-like
der Teil (dh entspricht der Teil alles in $ c). Da wir unsere Teilzeichenfolgen in der Reihenfolge von der kürzesten zur längsten erstellen, benötigen wir die letzte[-1]
der resultierenden Zeichenfolgen.Testfälle
quelle
Python 2, 122 Bytes
Volles Programm; Nimmt String und Liste genau wie in den Beispielen angegeben von stdin, mit der Ausnahme, dass die Eingaben in separaten Zeilen erfolgen müssen.
Überprüfen Sie alle Testfälle
quelle
l.pop()
stattl[-1]
?l
ist in der Regel einset
an diesem Punkt, die Indizierung nicht zulässt (ungeordnet). (Zum Glück werden sowohl Sets als auch Listen unterstütztpop()
.)Perl, 54 Bytes
Beinhaltet +2 für
-Xp
(kann kombiniert werden-e
) und +3 für-i
(kann nicht kombiniert werden)Gib das Wörterbuch auf STDIN und das Wort nach der
-i
Option an, zB:Nur der Code:
quelle
Perl, 61 Bytes
Beinhaltet +2 für
-0p
Führen Sie mit dem ersten Wort gefolgt von den Wörterbuchwörtern auf STDIN aus:
tabcompletion.pl
:quelle
Python 2, 112 Bytes
quelle
Haskell, 67 Bytes
Die Hilfsfunktion ermittelt
?
das längste gemeinsame Präfix von zwei Zeichenfolgen, indem sie das erste Zeichen rekursiv verwendet, sofern es für beide Zeichenfolgen gleich ist und die Zeichenfolgen nicht leer sind.Die Hauptfunktion
%
behält zunächst nur die Zeichenfolgen in der Liste bei, die mit der angegebenen beginnens
, die durch das längste gemeinsame Präfix mits
Sein markiert ists
. Um zu verhindern, dass gültige Wettbewerbe stattfinden, wirds
ein leeres Ergebnis über hinzugefügtmax
. Dann findet es das längste gemeinsame Präfix von diesen durch Falten der Binärfunktion?
.quelle
Python 2, 75 Bytes
Vielen Dank an @xnor für den Vorschlag des eingebauten, ursprünglich von @BetaDecay in dieser Antwort verwendeten .
ÿ
Kann zu Bewertungszwecken durch ein DEL-Byte ersetzt werden. Teste es auf Ideone .quelle
D 88 Bytes
Verwendung:
Der Code entfernt einfach alle Elemente
q
, die nicht mit beginnenp
, und berechnet dann die größte gemeinsame Anfangssubsequenz der verbleibenden Elemente.Die angegebenen Parameter ersparen uns zwei Wiederholungen von
string
und eine vonauto
. Durch den Ausnahmefehler können wir die temporäre Variable und die Bedingung vermeiden, die ansonsten erforderlich wären, um den Fall zu behandeln, bei dem keine Elementeq
anfangenp
.quelle
Python 2,
107102 Bytesÿ
Kann zu Bewertungszwecken durch ein DEL-Byte ersetzt werden. Teste es auf Ideone .Vielen Dank an @xnor für das Speichern von 5 Bytes!
quelle
os.path.commonprefix
Beta Decay können Sie die Arbeit für sich erledigen lassen.for c in ...
direkt zu iterieren und mit Fehler nach dem Drucken zu beendenif len(set(c))>1:print r or s;_
.PHP,
167160157152 BytesIch könnte 3 weitere Bytes sparen, indem ich Variablen mit
preg_grep
undpreg_quote
zuordne, aber eh.Nervenzusammenbruch
quelle
PHP, 156 Bytes
mit viel hilfe von titus danke
PHP, 199 Bytes
32 Bytes spart Titus mit array_unique
Ich weiß, dass die Regex-Lösung von Titus kürzer war, bis Titus mir half, meinen Weg zu verbessern. Vielleicht ist der Weg, den ich gefunden habe, interessant für dich
quelle
$z
durch$s
, um dasapple, [eat,dine]
Gehäuse zu reparieren . 2)$l=
veraltet ist; Sie verwenden diese Variable nicht. (-2) 3)$i++<$m
ist kürzer als++$i<=$m
. (-1) 4)substr($x,0,$i);
ist kürzer alsstr_split($x,$i)[0]
. (-3) 5) Sie können$r[]=$v
innerhalb des strlen setzen. (-5)<2
ist kürzer als==1
. (-1) 7) Sie verwenden könntenstrstr
in der ersten Schleife:strstr($v,$s)==$v
. (-3)$r[]=$v;$m=max($m,strlen($v));
zu$m=max($m,strlen($r[]=$v));
und die curlys fallen. Dies berührt den Zustand nicht.$m
überhaupt nicht. Alles, was Sie brauchen, ist etwas, das> = die Mindestlänge der Ersetzungen ist. Die neuen 5) Ersetzen Sie{$r[]=$v;$m=max($m,strlen($v));}
mit$r[]=$v;}
und<$m
mit<strlen($r[0])
(-13)$r[]=$z=$v;
in der ersten Runde und{$s=substr($z,0,$i);foreach($r as$x)if($x[$i]!=$z[$i])break 2;}
für die zweite (-3)Netzhaut, 60 Bytes
Die nachfolgende neue Zeile ist signifikant. Übernimmt die Eingabe als Zeichenfolge in einer Zeile und dann jedes Wort in einer separaten Zeile (aber keine abschließenden Zeilenumbrüche!). Funktioniert ähnlich wie meine JavaScript-Antwort, indem das längste gemeinsame Präfix aller Zeilen abgeglichen wird, die mit der Zeichenfolge in der ersten Zeile beginnen. Wenn es keine findet, werden einfach alle Wörter gelöscht.
quelle
Scala, 119 Bytes
Ungolfed:
Erläuterung:
quelle
PowerShell , 101 Byte
Basierend auf Nagels großartigem Regexp .
Probieren Sie es online!
quelle
05AB1E , 14 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Gaia , 12 Bytes
Probieren Sie es online!
Nimmt die Eingabe als B, dann als A.
quelle