Tr:17 13文字
(または引数のみを数える場合は14 10 ...)
tr -s ta-s -1
サンプル実行:
bash-4.3$ tr -s ta-s -1 <<< heads
1
bash-4.3$ tr -s ta-s -1 <<< tails
-1
簡単な説明:
tr
は、文字変換を表します。つまり、最初の引数で見つかった入力の各文字を、2番目の引数で同じ位置にある文字で置き換えます。
tr ta -1 <<< tails # replaces t ⇢ -, a → 1
⇒ -1ils
最初の引数が長い場合、2番目の引数に位置が一致しない文字は、2番目の引数の最後の文字に置き換えられます。
tr tals -1 <<< tails # replaces t ⇢ -, a → 1, l → 1, s → 1
⇒ -1i11
場合は-s
(--squeeze-repeats
)オプションが使用され、同じ文字に置き換えられる連続した文字は、一度に置き換えられます。
tr -s tals -1 <<< tails # replaces t ⇢ -, a → 1, l+s → 1
⇒ -1i1
したがって、すべての文字を「末尾」に列挙すると、必要なものが得られます。
tr -s tails -1 <<< tails # replaces t ⇢ -, a+i+l+s → 1
⇒ -1
「heads」についても同じですが、マイナスを消費するには「t」を前に置く必要があります(不気味なためにアルファベット順にソートされた文字):
tr -s taedhs -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1
「テール」と「ヘッド」のすべてのユニークな文字を単一の最初の引数にマージし、「t」を先頭に保持すると、最終的な解決策につながります。
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
文字の列挙を回避するには、代わりにfrom - to formatの間隔を使用できます。