Tôi đã đưa ra hai cái lấy giá trị của chúng từ STDIN dựa trên câu trả lời Perl 5.
lines~~/(.*).*' '$0/;say ~$0
lines~~/:s(.*).* $0/;say ~$0
Cái đầu tiên yêu cầu chính xác một khoảng trắng giữa các đầu vào, trong khi cái kia yêu cầu ít nhất một ký tự khoảng trắng giữa các đầu vào.
Nó ngắn hơn một chút so với điều đầu tiên tôi đã thử lấy các giá trị từ dòng lệnh.
say [~] map ->($a,$b){$a eq$b&&$a||last},[Z] @*ARGS».comb # 58 bytes
hoặc thậm chí phiên bản lambda của nó:
{[~] map ->($a,$b){$a eq$b&&$a||last},[Z] @_».comb} # 52 bytes
Mặc dù điều này dễ điều chỉnh hơn nhiều để nó chấp nhận bất kỳ số lượng chuỗi đầu vào nào, với chi phí chỉ bằng một nét.
{[~] 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"
.