Wymyśliłem dwa, które pobierają swoje wartości ze STDIN, które są oparte na odpowiedzi Perla 5.
lines~~/(.*).*' '$0/;say ~$0
lines~~/:s(.*).* $0/;say ~$0
Pierwszy wymaga dokładnie jednej spacji między wejściami, podczas gdy drugi wymaga co najmniej jednej spacji między wejściami.
To jest nieco krótsze niż pierwsza rzecz, której spróbowałem, która pobiera wartości z wiersza poleceń.
say [~] map ->($a,$b){$a eq$b&&$a||last},[Z] @*ARGS».comb # 58 bytes
lub nawet jego wersja lambda:
{[~] map ->($a,$b){$a eq$b&&$a||last},[Z] @_».comb} # 52 bytes
Chociaż jest to o wiele łatwiejsze do dostosowania, tak że akceptuje dowolną liczbę ciągów wejściowych, kosztem tylko jednego pociągnięcia.
{[~] 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"
.