Deskripsi
Diberikan jalur sumber dan jalur tujuan, output jalur relatif ke tujuan sehubungan dengan sumber.
Aturan
Input dapat berasal dari stdin atau sebagai argumen untuk program / fungsi.
Jalur gaya Windows dan Unix harus didukung.
Jalur keluaran dapat menggunakan
/
dan / atau\
untuk pemisah jalur (pilihan Anda dan kombinasi keduanya OK).Anda dapat mengasumsikan jalur relatif dimungkinkan.
Penggunaan program eksternal, fungsi perpustakaan atau built-in yang dibuat untuk menghitung jalur relatif dilarang (misalnya Python
os.path.relpath
)Ini adalah kode-golf
Edit: Aturan baru dari komentar.
Jalur relatif harus jalur relatif sesingkat mungkin.
Asumsikan jalur tujuan berbeda dari jalur sumber.
Contoh 1
# In
/usr/share/geany/colorschemes
/usr/share/vim/vim73/ftplugin
# Out
../../vim/vim73/ftplugin
Contoh 2
# In
C:\Windows\System32\drivers
C:\Windows\System32\WindowsPowerShell\v1.0
# Out
..\WindowsPowerShell\v1.0
../../vim\vim73\ftplugin
.../vim/vim73/ftplugin
?Jawaban:
CJam, 46 byte
Cobalah online.
Contohnya
Bagaimana itu bekerja
sumber
/aa/x
dengan/ab/y
.Bash + coreutils, 116
Berikut ini skrip shell untuk membuat bola bergulir. Cukup yakin akan ada jawaban yang lebih pendek:
Keluaran:
Catatan tidak ada cara bagi skrip untuk mengetahui apakah string
ftplugin
adalah file atau direktori. Anda dapat secara eksplisit menyediakan direktori dengan menambahkannya/
seperti pada contoh di atas.Tidak akan menangani jalur yang berisi spasi putih atau karakter lucu lainnya. Tidak yakin apakah itu persyaratan atau tidak. Hanya beberapa kutipan tambahan akan dibutuhkan.
sumber
Javascript (E6) 104
Edit lansiran yang ditambahkan untuk keluaran
Tidak disatukan
Uji
sumber
Ruby> = 1.9, 89
94karakterMasukan melalui argumen baris perintah. Bekerja untuk jalur gaya UNIX dan Windows, termasuk jalur dengan nama folder berulang:
sumber
J - 63 char
Fungsi mengambil jalur lama di sebelah kiri dan jalur baru di sebelah kanan.
Solusi ini datang dalam tiga bagian, terlihat seperti
post@loop&pre~
. Dijelaskan oleh ledakan:Perhatikan bahwa kami menambahkan garis depan
/
ke setiap jalur sebelum dipisah, sehingga kami menangani jalur gaya Windows dengan membuatC:
"folder". Ini menghasilkan folder kosong di awal lintasan Unix-style, tapi itu selalu dihapus oleh loop.Lihat dalam aksi:
Anda juga dapat mencoba sendiri di tryj.tk .
sumber
Bash,
6966Saya tidak memposting yang ini karena saya pikir seseorang harus dapat melakukannya dengan lebih baik. Namun ternyata itu tidak mudah.
N
membuatsed
pertandingan dua baris bersama. Ekspresi pertama menghapus awalan umum yang diakhiri dengan/
atau\
. Ekspresi kedua menggantikan nama direktori dengan..
di baris pertama. Akhirnya menggabungkan dua garis dengan pemisah.Terima kasih kepada Hasturkun untuk 3 karakter.
sumber
sed
dua kali, Anda dapat melakukannya dengan satu skrip.N
. Mungkin Anda dapat mengedit jawaban ini jika Anda tahu caranya.C,
119106sumber
p(char*s,char*d){for(;*s;)*s++-*d?*s-47||printf("../"):d++;puts(d);}
68 karakter tanpa backslashPython 3, 120
Contoh:
sumber
exec
operasi baris 1 dan string?map(input,' ')
work for `(input(),input())? (I can't test it myself)Ruby - 89
Usage:
sumber
/foo/bar/foo/bar
and/foo/qux/foo/bar
.JavaScript - 155
Parses either path format but outputs with
/
separator.sumber
PHP,
158151Tidak Disatukan:
sumber
cd
bentuk satu sama lain :)Groovy - 144 karakter
Satu solusi:
contoh output:
ungolfed:
sumber