Terkadang jalur absolut yang panjang, misalnya parameter baris perintah ke alat linux, dapat dipersingkat, menggunakan direktori kerja saat ini sebagai referensi:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
Dalam tantangan ini, Anda harus membuat fungsi atau program yang menerima dua parameter:
- Path absolut, menggunakan format linux (dimulai dengan
/
) - Direktori saat ini, menggunakan format yang sama
Outputnya lebih pendek dari yang berikut:
- Masukan 1 tidak berubah
- Path relatif yang merujuk ke file / direktori yang sama dengan path absolut
Poin bagus:
- Jika sistem operasi Anda kompatibel dengan linux, Anda dapat menggunakan direktori sistem saat ini alih-alih menerimanya sebagai input
- Anda dapat mengasumsikan input hanya berisi karakter alfanumerik (dan pemisah jalur)
- Anda dapat mengasumsikan jalur absolut input tidak memiliki pemisah jalur
/
pada akhirnya - Anda dapat mengasumsikan direktori input saat ini memiliki pemisah jalur
/
di akhir - Anda tidak dapat berasumsi bahwa path absolut merujuk ke file yang ada, atau bagian mana pun dari itu adalah direktori yang dapat diakses; Namun, direktori saat ini dapat dianggap valid
- Anda dapat berasumsi bahwa tidak ada symlink di dekat kedua jalur - karena saya tidak ingin memerlukan cara khusus untuk berurusan dengan symlink
- Tidak perlu mendukung kasus di mana salah satu input adalah direktori root
- "Direktori saat ini" harus berupa keluaran sebagai
.
(string kosong tidak valid)
Kasus uji (input1, input2, output):
/home/user/mydir/myfile
/home/user
mydir/myfile
/var/users/admin/secret/passwd
/var/users/joe/hack
../../admin/secret/passwd
/home/user/myfile
/tmp/someplace
/home/user/myfile
/dir1/dir2
/dir1/dir2/dir3/dir4
../..
/dir1/dir2
/dir1/dir2
.
code-golf
string
file-system
anatolyg
sumber
sumber
/
pada akhirnya". Namun, dalam contoh Anda, ini tidak terjadi./home/test /home/user/mydir/myfile /home/test
dan/a/b /a/b/d/e /a/b
Jawaban:
Julia 0,5 , 32 byte
Ini menggunakan direktori kerja saat ini sebagai basis dan tidak dapat diuji pada TIO saat ini.
Contoh dijalankan
Peringatan: Ini akan mengubah sistem file Anda.
Versi alternatif, 35 byte (diad)
Ini mengambil direktori dasar sebagai input, sehingga dapat diuji tanpa memodifikasi sistem file.
Cobalah online!
sumber
Base.-
kesalahan kecuali diimpor secara eksplisit, bukan?-
sebelum mendefinisikannya kembali. Di 0,4, ia mencetak peringatan apakah Anda menggunakannya sebelum redefinisi atau tidak.JavaScript (ES6),
107106 byteMengambil jalur absolut
a
dan jalur saat inic
dalam sintaks currying(a)(c)
.Uji kasus
Tampilkan cuplikan kode
sumber
[a.length]
! Bolehkah saya meminjamnya untuk meningkatkan jawaban Node.js saya?Retina ,
858382 byte1 byte disimpan berkat @MartinEnder
Cobalah online!
sumber
ES6 (Node.js REPL),
56,54,46, 45 byte[f.length]
trik dari jawaban @ Arnauld , -6 byteGolf
Uji
sumber
Python 2,
135144 byteCobalah secara Online!
Agak lama, tapi saya ingin melakukan solusi tanpa fungsi path bawaan.
Sunting: 9 byte ditambahkan ke akun untuk test case yang disediakan oleh Nathan Merrill
sumber
Zsh + realpath, 58 byte
Cobalah online!
Versi bash, 62 byte
Cobalah online!
sumber
Python 3 - 53 byte
Menggunakan
os.path
:Program lengkap (61 byte):
sumber
PHP, 204 Bytes
Testcases
Diperluas
jika Output
../../
sebagai gantinyaof ../..
dibolehkan dapat dipersingkat menjadi 175 Bytessumber
C # - 66 byte
Menggunakan .NET builtin dan memaksa untuk menjadi jalur yang valid:
Di mana
f
,t
dan outputstring
.Cobalah online!
sumber