JavaScript(ES6)、84 82 79バイト
Cyoceのおかげで3バイト節約されました。
f=([d,...s],p=parseInt,v=(26+p(s[0],36)-p(d,36))%26)=>s[0]?f(s)+(v>13?26-v:v):0
説明:
f=(
[d,...s], //Destructured input, separates first char from the rest
p=parseInt, //p used as parseInt
v=(26+p(s[0],36)-p(d,36))%26 //v is the absolute value of the difference using base 36 to get number from char
)
)=>
s[0]? //If there is at least two char in the input
f(s) //sum recursive call
+ //added to
(v>13?26-v:v) //the current shortest path
: //else
0 //ends the recursion, returns 0
例:
呼び出し:f('golf')
出力:17
以前のソリューション:
Neilのおかげで82バイト:
f=([d,...s],v=(26+parseInt(s[0],36)-parseInt(d,36))%26)=>s[0]?f(s)+(v>13?26-v:v):0
84バイト:
f=([d,...s],v=Math.abs(parseInt(s[0],36)-parseInt(d,36)))=>s[0]?f(s)+(v>13?26-v:v):0
æ%
先日ビルトインを読んでいたときに出くわしましたが、これはこの(タイプの)問題のために作られました:OIæ%13AS