Penyelesaian tab adalah fitur yang berguna yang secara otomatis melengkapi perintah yang ditulis sebagian. Anda akan mengimplementasikannya.
Misalnya, jika perintah yang tersedia adalah ['apply','apple','apple pie','eat']
, maka a
akan lengkap untuk appl
, karena semua perintah yang dimulai dengan a
juga dimulai dengan appl
.
Input output
Anda perlu memasukkan string, A, dan satu set string, B.
Anda perlu menampilkan awalan umum terpanjang dari semua B yang dimulai dengan A.
- Jika tidak ada opsi yang dimulai dengan A, maka kembalikan A
- Anda dapat mengasumsikan bahwa B adalah kosong, dan bahwa semua string adalah kosong
- Anda tidak dapat berasumsi bahwa salah satu opsi mulai dengan A, atau awalan umum akan lebih lama dari A
- Anda bisa menjadi case sensitif atau case sensitif.
- Anda hanya perlu menangani ASCII yang dapat dicetak
- Built-in yang secara eksplisit melakukan tugas ini diizinkan
Kasus uji:
'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 '
Perhatikan ruang tambahan pada test case terakhir
Ini adalah kode-golf , jadi buat jawaban Anda sesingkat mungkin!
\
atau'
.'
dalam contoh. Jika saya gunakan"
untuk string, maka string berbeda dari contoh lainnya.Jawaban:
JavaScript (ES6), 75 byte
Penjelasan: Menyaring semua awalan yang cocok, lalu bergabung dengan baris baru dan yang cocok dengan regex yang menemukan awalan umum terpanjang dari semua baris. Jika tidak ada awalan maka regex mengembalikan string kosong dalam hal ini kami hanya mengembalikan string asli.
sumber
e.startsWith(s)
dengane.match("^"+s)
untuk byte off Currying akan menghemat yang lainmatch
ASCII yang dapat dicetak dengan sewenang-wenang.(s,a)=>
kes=>a=>
Jelly ,
1412 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Pyth,
1413 byteTerima kasih kepada @isaacg untuk -1 byte
Suatu program yang mengambil daftar string, dan kemudian string, pada STDIN dan mencetak hasilnya.
Verifikasi semua kasus uji
Bagaimana itu bekerja
sumber
f}zT
=>/#z
PowerShell v3 +, 112 byte
Mengambil input sebagai string
$a
dan array string$b
. Menggunakan-like
operator untuk mengeluarkan elemen-elemen dari$b
itu (case-insensitive) dimulai dengan$a
, secara eksplisit melemparkan mereka sebagai array@(...)
(karena hasilnya bisa satu pertandingan sebagai skalar, di mana pengindeksan kasus kemudian gagal), dan menyimpan array yang ke dalam$c
.Itu membentuk
if
klausa. Jika tidak ada apa-apa di$c
(yaitu, tidak ada yang dimulai dengan$a
, maka array kosong), kemudian output$a
denganelse
. Jika tidak ...Kami melemparkan elemen pertama
$c
sebagaichar
-array dan loop melalui masing-masing elemen, merangkai-string dengan yang sebelumnya$i
dan menempatkan string pada pipa melalui parens enkapsulasi. Mereka disaring melalui|?{...}
(Where-Object
klausa) untuk memverifikasi bahwa.count
of$c
adalah-eq
ual untuk.count
hal-hal$c
yang merupakan-like
substring (yaitu, substring cocok dengan semuanya dalam $ c). Karena kami sedang membangun substring kami dalam urutan terpendek hingga terpanjang, kami membutuhkan[-1]
string hasil terakhir .Uji Kasus
sumber
Python 2, 122 bytes
Full program; takes string and list from stdin exactly as given in the examples, except the inputs must be on separate lines.
Verify all test cases
sumber
l.pop()
instead ofl[-1]
?l
is usually aset
at that point, which doesn't allow indexing (being unordered). (Fortunately, both sets and lists supportpop()
.)Perl, 54 bytes
Includes +2 for
-Xp
(can be combined with-e
) and +3 for-i
(cannot be combined)Give dictionary on STDIN and the word after the
-i
option, e.g.:Just the code:
sumber
Perl, 61 bytes
Includes +2 for
-0p
Run with the first word followed by the dictionary words on STDIN:
tabcompletion.pl
:sumber
Python 2, 112 bytes
sumber
Haskell, 67 bytes
The auxiliary function
?
finds the longest common prefix of two strings by recursively taking the first character as long as it's the same for both strings and the strings are non-empty.The main function
%
first keeps only the strings in the list that start with the given ones
, checked by the longest common prefix withs
beings
. To handle there being no valid competitions, it addss
to an empty result viamax
. Then, it finds the longest common prefix of those by folding the binary function?
.sumber
Python 2, 75 bytes
Thanks to @xnor for suggesting the built-in, originally used by @BetaDecay in this answer.
For scoring purposes,
ÿ
can be replaced with a DEL byte. Test it on Ideone.sumber
D, 88 bytes
Usage:
The code simply removes all elements from
q
that don't start withp
, then computes the largest common initial subsequence of the remaining elements.The templated parameters save us two repetitions of
string
and one ofauto
. The exception misuse lets us avoid the temporary variable and conditional that would otherwise be necessary to handle the case where no elements ofq
start withp
.sumber
Python 2,
107102 bytesFor scoring purposes,
ÿ
can be replaced with a DEL byte. Test it on Ideone.Thanks to @xnor for saving 5 bytes!
sumber
os.path.commonprefix
as Beta Decay found, you can have it do the work for you.for c in ...
directly and terminate with error after printing likeif len(set(c))>1:print r or s;_
.PHP,
167160157152 bytesI could save 3 more bytes by assigning variables with
preg_grep
andpreg_quote
, but eh.breakdown
sumber
PHP, 156 Bytes
with much Help from Titus Thank You
PHP, 199 Bytes
32 Bytes saves by Titus with array_unique
I know that the Regex Solution by Titus was shorter till Titus help me to improve my way. Maybe the way I found is interesting for you
sumber
$z
with$s
to fix theapple, [eat,dine]
case. 2)$l=
is obsolete; You don´t use that variable. (-2) 3)$i++<$m
is shorter than++$i<=$m
. (-1) 4)substr($x,0,$i);
is shorter thanstr_split($x,$i)[0]
. (-3) 5) You can put$r[]=$v
inside the strlen. (-5)<2
is shorter than==1
. (-1) 7) You could usestrstr
in the first loop:strstr($v,$s)==$v
. (-3)$r[]=$v;$m=max($m,strlen($v));
to$m=max($m,strlen($r[]=$v));
and drop the curlys. This doesn´t touch the condition.$m
at all. All you need is something that is >= the minimum length of the replacements. The new 5) Replace{$r[]=$v;$m=max($m,strlen($v));}
with$r[]=$v;}
and<$m
with<strlen($r[0])
(-13)$r[]=$z=$v;
in the first loop and{$s=substr($z,0,$i);foreach($r as$x)if($x[$i]!=$z[$i])break 2;}
for the second (-3)Retina, 60 bytes
The trailing new line is significant. Takes input as the string on a line and then each word on a separate line (but no trailing newline!). Works in a similar way to my JavaScript answer by matching the longest common prefix of all lines that begin with the string on the first line. If it doesn't find one then it simply deletes all the words.
sumber
Scala, 119 bytes
Ungolfed:
Explanation:
sumber
PowerShell, 101 bytes
Based on Nail's awesome regexp.
Try it online!
sumber
05AB1E, 14 bytes
Try it online or verify all test cases.
Explanation:
sumber
Gaia, 12 bytes
Try it online!
Takes input as B, then A.
sumber