Saya datang dengan dua yang mengambil nilai-nilai mereka dari STDIN yang didasarkan pada jawaban Perl 5.
lines~~/(.*).*' '$0/;say ~$0
lines~~/:s(.*).* $0/;say ~$0
Yang pertama membutuhkan tepat satu ruang di antara input, sementara yang lain membutuhkan setidaknya satu karakter spasi putih di antara input.
Itu sedikit lebih pendek daripada hal pertama yang saya coba yang mengambil nilai dari baris perintah.
say [~] map ->($a,$b){$a eq$b&&$a||last},[Z] @*ARGS».comb # 58 bytes
atau bahkan versi lambda:
{[~] map ->($a,$b){$a eq$b&&$a||last},[Z] @_».comb} # 52 bytes
Meskipun ini jauh lebih mudah untuk disesuaikan sehingga menerima sejumlah string input, dengan biaya hanya satu pukulan.
{[~] map ->@b {([eq] @b)&&@b[0]||last},[Z] @_».comb} # 53 bytes
# ┗━┛ ┗━━━━━━━┛ ┗━━━┛
my &common-prefix = {[~] map ->@b {([eq] @b)&&@b[0]||last},[Z] @_».comb}
say common-prefix <department depart>; # "depart"
say common-prefix; # ""
say common-prefix <department depart depot deprecated dependant>; # "dep"
# This code does not work directly with a single argument, so you have
# to give it an itemized List or Array, containing a single element.
say common-prefix $('department',); # "department"
# another option would be to replace `@_` with `(@_,)`
"aca", "aba"
.