Ich habe zwei gefunden, deren Werte aus STDIN stammen und auf der Perl 5-Antwort basieren.
lines~~/(.*).*' '$0/;say ~$0
lines~~/:s(.*).* $0/;say ~$0
Das erste erfordert genau ein Leerzeichen zwischen den Eingaben, während das andere mindestens ein Leerzeichen zwischen den Eingaben erfordert.
Das ist ziemlich viel kürzer als das erste, was ich ausprobiert habe und das die Werte von der Kommandozeile übernimmt.
say [~] map ->($a,$b){$a eq$b&&$a||last},[Z] @*ARGS».comb # 58 bytes
oder sogar die Lambda-Version davon:
{[~] map ->($a,$b){$a eq$b&&$a||last},[Z] @_».comb} # 52 bytes
Dies ist jedoch viel einfacher einzustellen, so dass eine beliebige Anzahl von Eingabezeichenfolgen auf Kosten von nur einem Strich akzeptiert werden.
{[~] 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".