자바 스크립트 (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