首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印相对路径

打印相对路径
EN

Code Golf用户
提问于 2014-06-25 21:57:49
回答 4查看 917关注 0票数 15

描述

给定源路径和目标路径,输出相对于源的相对路径。

规则

  1. 输入可以来自stdin或作为程序/函数的参数。
  2. 必须支持Windows和Unix样式路径。
  3. 输出路径可以使用/和/或\作为路径分隔符(两者的选择和组合都可以)。
  4. 您可以假设相对路径是可能的。
  5. 禁止使用用于计算相对路径的外部程序、内置函数或库函数(例如Python的os.path.relpath)。
  6. 这是密码-高尔夫编辑:注释中的新规则。
  7. 相对路径必须是最短的相对路径。
  8. 假设目标路径与源路径不同。

示例1

代码语言:javascript
复制
# In
/usr/share/geany/colorschemes
/usr/share/vim/vim73/ftplugin

# Out
../../vim/vim73/ftplugin

示例2

代码语言:javascript
复制
# In
C:\Windows\System32\drivers
C:\Windows\System32\WindowsPowerShell\v1.0

# Out
..\WindowsPowerShell\v1.0
EN

回答 4

Code Golf用户

发布于 2014-06-26 10:04:01

Javascript (E6) 104

编辑添加的输出警报

代码语言:javascript
复制
R=(s,d)=>alert(s.split(x=/\/|\\/).map(a=>a==d[0]?d.shift()&&'':'../',d=d.split(x)).join('')+d.join('/'))

Ungolfed

代码语言:javascript
复制
R (s,d) => // a single espression is returned, no {} or () needed
  s.split(x=/\/|\\/) // split string at / or \, save regexp in X for later
  .map( // create a new array from s
     a => a == d[0] // check if current of s and d equals
          ? d.shift() && '' // map to '' and cut 1 element of d
          : '../', // else map to '../'
     d=d.split(x)) // second param of map is useless, so split d here
  .join('')+d.join('/') // join map and concat to rest of d adding separators

测试

代码语言:javascript
复制
R('C:\\Windows\\System32\\drivers','C:\\Windows\\System32\\WindowsPowerShell\\v1.0')

../WindowsPowerShell/v1.0

代码语言:javascript
复制
R('/usr/share/geany/colorschemes','/usr/share/vim/vim73/ftplugin')

././vim/vim 73/ftplugin

票数 2
EN

Code Golf用户

发布于 2014-06-26 05:15:56

Ruby-89

代码语言:javascript
复制
r=/\/|\\/
s = ARGV[0].split r
d = ARGV[1].split r
puts ("../"*(s-d).size)+((d-s).join"/")

用法:

代码语言:javascript
复制
ruby relative.rb working/directory destination/directory
票数 1
EN

Code Golf用户

发布于 2014-06-26 07:26:03

Python 3,120

代码语言:javascript
复制
a,b=(i.split('\\/'['/'in i])for i in map(input,'  '))
while[]<a[:1]==b[:1]:del a[0],b[0]
print('../'*len(a)+'/'.join(b))

示例:

代码语言:javascript
复制
$ python3 path.py
 /usr/share/geany/colorschemes
/usr/share/vim/vim73/ftplugin 
../../vim/vim73/ftplugin
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/32568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档