J-63 자
왼쪽의 오래된 경로와 오른쪽의 새로운 경로를 취하는 함수입니다.
}.@;@(c=.c&}.`(,~(<'/..')"0)@.(~:&{.))&('/'<;.1@,'\/'&charsub)~
이 솔루션은 다음과 같이 세 부분으로 제공됩니다 post@loop&pre~
. 폭발로 설명 :
post @ loop & pre ~ NB. the full golf
~ NB. swap the arguments: new on left, old on right
& pre NB. apply pre to each argument
loop NB. run the recursive loop on both
post @ NB. apply post to the final result
'/'<;.1@,'\/'&charsub NB. pre
'\/'&charsub NB. replace every \ char with /
'/' , NB. prepend a / char
<;.1@ NB. split string on the first char (/)
c=.c&}.`(,~(<'/..')"0)@.(~:&{.) NB. loop
@.(~:&{.) NB. if the top folders match:
&}. NB. chop off the top folders
c NB. recurse
` NB. else:
(<'/..')"0 NB. change remaining old folders to /..
,~ NB. append to front of remaining new folders
c=. NB. call this loop c to recurse later
}.@; NB. post
; NB. turn the list of folders into a string
}.@ NB. chop off the / in the front
/
분할하기 전에 각 경로에 행간 을 추가 C:
하여 "폴더"로 만들어 Windows 스타일 경로를 처리 합니다. 이로 인해 유닉스 스타일 경로가 시작될 때 빈 폴더가 생성되지만 항상 루프에 의해 제거됩니다.
실제로보기 :
NB. you can use it without a name if you want, we will for brevity
relpath =. }.@;@(c=.c&}.`(,~(<'/..')"0)@.(~:&{.))&('/'<;.1@,'\/'&charsub)~
'/usr/share/geany/colorschemes' relpath '/usr/share/vim/vim73/ftplugin'
../../vim/vim73/ftplugin
'C:\Windows\System32\drivers' relpath 'C:\Windows\System32\WindowsPowerShell\v1.0'
../WindowsPowerShell/v1.0
tryj.tk 에서 직접 시도해 볼 수도 있습니다 .
../../vim\vim73\ftplugin
.