L'achèvement des tabulations est une fonctionnalité utile qui complète automatiquement les commandes partiellement écrites. Vous allez le mettre en œuvre.
Par exemple, si les commandes disponibles étaient ['apply','apple','apple pie','eat']
, elles a
se termineraient par appl
, car toutes les commandes commençant par a
commencent également par appl
.
Entrée sortie
Vous devez entrer une chaîne, A et un ensemble de chaînes, B.
Vous devez sortir le préfixe commun le plus long de tous les B commençant par A.
- Si aucune des options ne commence par A, retournez A
- Vous pouvez supposer que B n'est pas vide et que toutes les chaînes sont non vides
- Vous ne pouvez pas supposer que l'une des options commence par A, ni que le préfixe commun sera plus long que A
- Vous pouvez être sensible à la casse ou insensible à la casse.
- Vous avez seulement besoin de gérer l'ASCII imprimable
- Les éléments intégrés qui effectuent explicitement cette tâche sont autorisés
Cas de test:
'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 '
Notez l'espace de fin sur le dernier cas de test
Ceci est un code-golf , alors faites vos réponses aussi courtes que possible!
\
ou'
.'
dans un exemple. Si j'utilise"
pour les chaînes, les chaînes sont différentes des autres exemples.Réponses:
JavaScript (ES6), 75 octets
Explication: Filtre tous les préfixes correspondants, puis se joint aux nouvelles lignes et correspond à une expression régulière qui trouve le préfixe commun le plus long de toutes les lignes. S'il n'y a pas de préfixe, l'expression régulière renvoie une chaîne vide, auquel cas nous renvoyons simplement la chaîne d'origine.
la source
e.startsWith(s)
pare.match("^"+s)
pour un octet hors Currying en sauvera un autrematch
avec ASCII imprimable arbitraire.(s,a)=>
às=>a=>
Gelée ,
1412 octetsEssayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
Pyth,
1413 octetsMerci à @isaacg pour -1 octet
Un programme qui prend la liste des chaînes, puis la chaîne, sur STDIN et imprime le résultat.
Vérifier tous les cas de test
Comment ça marche
la source
f}zT
=>/#z
PowerShell v3 +, 112 octets
Prend l'entrée en tant que chaîne
$a
et tableau de chaînes$b
. Utilise l'-like
opérateur pour extraire ces éléments à partir desquels$b
(insensible à la casse) commence par$a
, les transforme explicitement en tableau@(...)
(car le résultat peut être une correspondance en tant que scalaire, auquel cas l'indexation échoue plus tard) et stocke ce tableau dans$c
.Cela constitue la
if
clause. S'il n'y a rien$c
(c'est- à -dire que rien ne commence par$a
, donc le tableau est vide), alors sortez$a
avec leelse
. Autrement ...Nous convertissons le premier élément
$c
en unchar
tableau et parcourons chaque élément, en concaténant$i
les chaînes avec le précédent et en plaçant les chaînes sur le pipeline via l'encapsulation des parenthèses. Celles-ci sont filtrées à travers|?{...}
(laWhere-Object
clause) pour vérifier que le.count
of$c
est-eq
ual aux.count
choses dans$c
lesquelles se trouve-like
la sous-chaîne (c'est-à-dire que la sous-chaîne correspond à tout dans $ c). Puisque nous construisons nos sous-chaînes dans l'ordre le plus court au plus long, nous avons besoin de la dernière[-1]
des chaînes résultantes.Cas de test
la source
Python 2, 122 octets
Programme complet; prend la chaîne et la liste de stdin exactement comme indiqué dans les exemples, sauf que les entrées doivent être sur des lignes distinctes.
Vérifier tous les cas de test
la source
l.pop()
au lieu del[-1]
?l
c'est généralement unset
à ce moment-là, ce qui ne permet pas l'indexation (non ordonné). (Heureusement, les ensembles et les listes sont pris en chargepop()
.)Perl, 54 octets
Comprend +2 pour
-Xp
(peut être combiné avec-e
) et +3 pour-i
(ne peut pas être combiné)Donnez le dictionnaire sur STDIN et le mot après l'
-i
option, par exemple:Juste le code:
la source
Perl, 61 octets
Comprend +2 pour
-0p
Exécutez avec le premier mot suivi des mots du dictionnaire sur STDIN:
tabcompletion.pl
:la source
Python 2, 112 octets
la source
Haskell, 67 octets
La fonction auxiliaire
?
trouve le préfixe commun le plus long de deux chaînes en prenant récursivement le premier caractère tant qu'il est le même pour les deux chaînes et que les chaînes ne sont pas vides.La fonction principale ne
%
conserve d'abord que les chaînes de la liste qui commencent par celle données
, vérifiée par le préfixe commun le plus long avec l's
êtres
. Pour gérer l'absence de compétitions valides, cela ajoutes
un résultat vide viamax
. Ensuite, il trouve le préfixe commun le plus long de ceux-ci en repliant la fonction binaire?
.la source
Python 2, 75 octets
Merci à @xnor d'avoir suggéré le intégré, initialement utilisé par @BetaDecay dans cette réponse .
À des fins de notation,
ÿ
peut être remplacé par un octet DEL. Testez-le sur Ideone .la source
D, 88 octets
Usage:
Le code supprime simplement tous les éléments
q
qui ne commencent pasp
, puis calcule la plus grande sous-séquence initiale commune des éléments restants.Les paramètres du modèle nous permettent d'économiser deux répétitions de
string
et une deauto
. L'abus d'exception nous permet d'éviter la variable temporaire et le conditionnel qui seraient autrement nécessaires pour gérer le cas où aucun élément deq
commencer parp
.la source
Python 2,
107102 octetsÀ des fins de notation,
ÿ
peut être remplacé par un octet DEL. Testez-le sur Ideone .Merci à @xnor pour avoir économisé 5 octets!
la source
os.path.commonprefix
Beta Decay , vous pouvez le faire faire le travail pour vous.for c in ...
directement et de se terminer avec une erreur après l'impressionif len(set(c))>1:print r or s;_
.PHP,
167160157152 octetsJe pourrais économiser 3 octets de plus en attribuant des variables avec
preg_grep
etpreg_quote
, mais eh.panne
la source
PHP, 156 octets
avec beaucoup d'aide de Titus Merci
PHP, 199 octets
32 octets enregistrés par Titus avec array_unique
Je sais que la solution Regex de Titus était plus courte jusqu'à ce que Titus m'aide à améliorer mon chemin. Peut-être que la façon dont j'ai trouvé est intéressante pour toi
la source
$z
par$s
pour fixer leapple, [eat,dine]
boîtier. 2)$l=
est obsolète; Vous n'utilisez pas cette variable. (-2) 3)$i++<$m
est plus court que++$i<=$m
. (-1) 4)substr($x,0,$i);
est plus court questr_split($x,$i)[0]
. (-3) 5) Vous pouvez mettre$r[]=$v
à l'intérieur du strlen. (-5)<2
est plus court que==1
. (-1) 7) Vous pouvez utiliserstrstr
dans la première boucle:strstr($v,$s)==$v
. (-3)$r[]=$v;$m=max($m,strlen($v));
à$m=max($m,strlen($r[]=$v));
déposer les Curlys. Cela ne touche pas la condition.$m
. Tout ce dont vous avez besoin est quelque chose qui est> = la longueur minimale des remplacements. Le nouveau 5) Remplacer{$r[]=$v;$m=max($m,strlen($v));}
par$r[]=$v;}
et<$m
avec<strlen($r[0])
(-13)$r[]=$z=$v;
dans la première boucle et{$s=substr($z,0,$i);foreach($r as$x)if($x[$i]!=$z[$i])break 2;}
pour la seconde (-3)Rétine, 60 octets
La nouvelle ligne de fuite est importante. Prend l'entrée en tant que chaîne sur une ligne, puis chaque mot sur une ligne distincte (mais pas de saut de ligne!). Fonctionne de manière similaire à ma réponse JavaScript en faisant correspondre le préfixe commun le plus long de toutes les lignes commençant par la chaîne de la première ligne. S'il n'en trouve pas, il supprime simplement tous les mots.
la source
Scala, 119 octets
Ungolfed:
Explication:
la source
PowerShell , 101 octets
Basé sur l'excellente expression régulière de Nail .
Essayez-le en ligne!
la source
05AB1E , 14 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Gaia , 12 octets
Essayez-le en ligne!
Prend l'entrée comme B, puis A.
la source