Tr: 17 13 caractères
(Ou 14 10 si vous ne comptez que les arguments…)
tr -s ta-s -1
Exemple d'exécution:
bash-4.3$ tr -s ta-s -1 <<< heads
1
bash-4.3$ tr -s ta-s -1 <<< tails
-1
Brève explication:
tr
signifie translittéré, cela signifie, remplace chaque caractère de l'entrée trouvée dans le premier argument par un caractère à la même position dans le deuxième argument:
tr ta -1 <<< tails # replaces t ⇢ -, a → 1
⇒ -1ils
Si le premier argument est plus long, les caractères sans correspondance de position dans le deuxième argument sont remplacés par le dernier caractère du deuxième argument:
tr tals -1 <<< tails # replaces t ⇢ -, a → 1, l → 1, s → 1
⇒ -1i11
Lorsque l' option -s
( --squeeze-repeats
) est utilisée, les caractères successifs qui seraient remplacés par le même caractère sont remplacés à la fois:
tr -s tals -1 <<< tails # replaces t ⇢ -, a → 1, l+s → 1
⇒ -1i1
Donc, si nous énumérons tous les caractères dans «queues», nous obtenons ce dont nous avons besoin:
tr -s tails -1 <<< tails # replaces t ⇢ -, a+i+l+s → 1
⇒ -1
Idem pour les «têtes», mais nous devons tout de même garder le «t» devant pour consommer le moins (caractères triés alphabétiquement pour la chair de poule):
tr -s taedhs -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1
La fusion de tous les caractères uniques de "queues" et de "têtes" dans un seul premier argument, en gardant "t" devant conduit à la solution finale:
tr -s tadehils -1 <<< tails # replaces t → -, a+i+l+s → 1
⇒ -1
tr -s tadehils -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1
Pour éviter d'énumérer les caractères, un intervalle au format de - à peut être utilisé à la place.