Ne ho inventati due che prendono i loro valori da STDIN che sono basati sulla risposta Perl 5.
lines~~/(.*).*' '$0/;say ~$0
lines~~/:s(.*).* $0/;say ~$0
Il primo richiede esattamente uno spazio tra gli ingressi, mentre l'altro richiede almeno uno spazio bianco tra gli ingressi.
È un po 'più breve della prima cosa che ho provato che prende i valori dalla riga di comando.
say [~] map ->($a,$b){$a eq$b&&$a||last},[Z] @*ARGS».comb # 58 bytes
o addirittura la versione lambda di esso:
{[~] map ->($a,$b){$a eq$b&&$a||last},[Z] @_».comb} # 52 bytes
Anche se questo è molto più facile da regolare in modo da accettare un numero qualsiasi di stringhe di input, al costo di un solo tratto.
{[~] 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"
.