Tr: 17 13 caratteri
(O 14 10 se conti solo gli argomenti ...)
tr -s ta-s -1
Esecuzione di esempio:
bash-4.3$ tr -s ta-s -1 <<< heads
1
bash-4.3$ tr -s ta-s -1 <<< tails
-1
Breve spiegazione:
tr sta per transliterate, ciò significa che sostituisce ogni carattere dell'input trovato nel primo argomento con carattere nella stessa posizione nel secondo argomento:
tr ta -1 <<< tails # replaces t ⇢ -, a → 1
⇒ -1ils
Se il primo argomento è più lungo, i caratteri senza corrispondenza posizionale nel secondo argomento vengono sostituiti con l'ultimo carattere del secondo argomento:
tr tals -1 <<< tails # replaces t ⇢ -, a → 1, l → 1, s → 1
⇒ -1i11
Quando viene utilizzata l'opzione -s( --squeeze-repeats), i caratteri successivi che verrebbero sostituiti con lo stesso carattere vengono sostituiti contemporaneamente:
tr -s tals -1 <<< tails # replaces t ⇢ -, a → 1, l+s → 1
⇒ -1i1
Quindi, se elenciamo tutti i caratteri in "code", otteniamo ciò di cui abbiamo bisogno:
tr -s tails -1 <<< tails # replaces t ⇢ -, a+i+l+s → 1
⇒ -1
Lo stesso vale per le "teste", ma dobbiamo tenere la "t" davanti per consumare il meno (personaggi ordinati alfabeticamente per inquietudine):
tr -s taedhs -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1
Unire tutti i caratteri univoci di "code" e "teste" in un unico primo argomento, mantenendo "t" davanti porta alla soluzione 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
Per evitare di enumerare i caratteri, è possibile utilizzare invece un intervallo da - a formato.