Izin File
Diadaptasi dari UIL - Pemrograman Ilmu Komputer, pertanyaan respons bebas "Carla" untuk Distrik 2018.
pengantar
Dalam sistem operasi mirip UNIX, setiap file, direktori, atau tautan "dimiliki" oleh "pengguna", yang merupakan anggota "grup", dan memiliki "izin" tertentu yang diwakili oleh string sepuluh karakter seperti " drwxrwxrwx ". Karakter pertama adalah 'd', '-', atau 'l' (direktori, file, atau tautan), diikuti oleh tiga set nilai "rwx", yang menunjukkan izin "baca, tulis, jalankan". Set pertama adalah hak pengguna, set tengah hak grup, dan hak semua orang ketiga untuk objek itu.
Izin yang ditolak untuk hak-hak ini diwakili oleh '-' menggantikan 'r', 'w', atau 'x'. Misalnya, string izin direktori sampel adalah "drwxr - r--", yang menunjukkan hak direktori lengkap untuk pengguna, tetapi hak "hanya baca" untuk anggota grup dan semua yang lain.
Setiap kombinasi "rwx" juga dapat diwakili oleh nilai oktal (0-7) dengan bit paling signifikan yang mewakili izin baca, bit paling signifikan berikutnya yang mewakili izin menulis, dan bit paling signifikan yang mewakili izin eksekusi.
Tantangan
Diberikan string kode empat karakter yang terdiri dari karakter: 'D', 'F', atau 'L', diikuti oleh nilai integer oktal tiga digit, seperti 664, menghasilkan string karakter 10 yang dihasilkan yang mewakili nilai izin ditunjukkan.
Memasukkan
Program atau fungsi Anda dapat membaca input dari standar dalam (empat karakter akan dimasukkan, opsional diikuti oleh baris baru) atau diteruskan input sebagai argumen.
Program Anda dapat menerima input huruf besar atau kecil tetapi harus konsisten (semua input huruf besar atau semua input huruf kecil).
Keluaran
Program Anda harus mencetak string sepuluh karakter yang dihasilkan yang mewakili nilai izin yang ditunjukkan dalam format persis yang ditentukan di atas. Ruang putih berlayar diperbolehkan.
Uji Kasus
Masuk: F664
Keluar: -rw-rw-r--
Masuk: D775
Keluar: drwxrwxr-x
Masuk: L334
Keluar: l-wx-wxr--
Masuk: F530
Keluar: -r-x-wx---
Masuk: D127
Keluar:d--x-w-rwx
Penilaian dan Aturan
- Lubang loop standar dilarang.
- Aturan standar berlaku.
- Harap berikan tautan untuk menguji kode Anda serta penjelasannya.
- Ini kode-golf , jadi jawaban tersingkat dalam byte menang!
Jawaban:
Jelly , 19 byte
Cobalah online!
Bagaimana itu bekerja
sumber
bash,
5953 byteAlat yang tepat untuk pekerjaan itu?
Terima kasih kepada Dennis untuk menghemat 5 byte dan HTNW karena telah menghemat satu.
Cobalah online!
sumber
chmod ${1:1} a>a;stat -c%A a|sed "s/-/\L${1:0:1}/;s/f/-/"
menghemat dua byte.tr
bukannyay
:chmod ${1:1} a>a;stat -c%A a|sed s/./\\L${1:0:1}/|tr f -
a
dan pengguna memiliki izin untuk membuatnya atau ada filea
dan dapat ditulisi oleh pengguna? Karena jika ada file yanga
dimiliki olehroot
dengan izin700
, ini seharusnya tidak berfungsi.Python 2 , 78 byte
Mengambil input sebagai karakter dan tiga int.
Cobalah online!
Penjelasan
[a,'-'][a=='f']
mengambil karakter input atau-
, jika karakter tersebutf
.'-r'[x/4]+'-w-w'[x/2]+'-x'[x%2]
pada dasarnya adalah konversi oktal untuk mendapatkanrwx
string.sumber
Perl 5 dengan
-p
, 37 byteMengambil input dalam huruf kecil.
Cobalah online!
sumber
Retina 0.8.2 , 43 byte
Cobalah online! Tautan termasuk kasus uji. Mengambil input dalam huruf kecil. Penjelasan:
Rangkap tiga setiap digit, sufiks dengan
r
,w
danx
.Ubah semua huruf yang salah menjadi
-
s.Hapus digit yang tersisa.
sumber
Retina , 51 byte
Cobalah online!
Tidak tahu cara menggunakan Retina, jadi tolong beri tahu saya cara melakukan ini dengan lebih baik. Saya pikir saya akan mencoba belajar setidaknya satu bahasa yang bukan Pyth.
Penjelasan:
Ganti
f
dengan-
(meninggalkand
danl
tidak berubah), lalu ganti setiap digit dengan yang sesuairwx
.sumber
JavaScript (ES6), 63 byte
Mengharapkan string input dalam huruf kecil.
Cobalah online!
Berkomentar
sumber
Arang , 27 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Haskell ,
848381 byteCobalah online!
Akhirnya menjadi sangat mirip dalam konsep dengan jawaban Python 2 Mnemonic. f menciptakan jenis file, sisanya adalah mendapat izin dari nomor oktal. Yang ini benar-benar membuat saya berharap & agak bitwise dan operator termasuk dalam pembukaan.
sumber
div
bukanquot
.Java 8, 100 byte
Cobalah online.
Pelabuhan @ Neil 's Retina jawabannya .
Penjelasan:
sumber
.replaceAll
masih kurang byte daripada satu lingkaran dengan.replaceAll
dan ditambahkanreturn
dan String-array .. Tapi kredit tentu saja pergi ke Neil , siapa jawaban Retina saya gunakan sebagai basis untuk port dari.Jelly , 21 byte
Program pencetakan lengkap untuk STDOUT. (Sebagai tautan monadik, nilai balik adalah daftar yang berisi karakter dan daftar tiga daftar karakter.)
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
Perl 6
-p
, 37 byteCobalah online!
Solusi Port 5 Dom Hastings 'Perl 5.
sumber
Retina , 38 byte
Terinspirasi oleh komentar dari ASCII saja .
Cobalah online!
Idenya adalah mengubah setiap digit menjadi unary (digit unary default di Retina adalah
_
) dengan tiga digit terdepan-
, dan kemudian mengonversi angka biner dari yang paling ke yang paling tidak signifikan.sumber
Python 3 , 71 byte
Cobalah online!
Python 3.3+ memiliki built-in untuk itu, meskipun karena kebutuhan untuk impor, dan perbedaan dalam format input yang diharapkan, itu tidak terlalu ramah golf.
sumber
Tcl , 139 byte
Cobalah online!
Tcl , 144 byte
Cobalah online!
Tcl , 149 byte
Cobalah online!
Tcl , 150 byte
Cobalah online!
Tcl , 180 byte
Cobalah online!
Masih sangat ungolfed!sumber
Java (JDK 10) , 118 byte
Cobalah online!
Kredit
sumber
fdl
, Anda dapat mengubahvar r=s[0]<70?"d":s[0]<72?"-":"l";
kevar r=s[0]=='f'?"-":s[0]+"";
untuk menyimpan 6 byte. Juga,.toCharArray()
dapat.split("")
menyimpan tambahan 4 byte.""+
nanti untuk "melemparkan"char
ke aString
);) Terima kasih!Excel, 224 byte
Dilakukan dalam 4 tahap:
Dan 3 kali:
Berusaha lebih pintar, menambah
25 bytes
per set hak, total 75:sumber
05AB1E ,
3427 byteCobalah online!
Dipotong turun 7 byte oleh @MagicOctopusUrn
sumber
ćls8βbvyi…rwx3*Nèë'-}J'f'-:
untuk 7 kurang ...f
saya hanya mengganti semua yang adaf
di string akhir dengan-
.i <CODE FOR TRUE> ë <CODE FOR FALSE> }
Python 2 , 238 byte
Cobalah online!
Saya mengira ini adalah setetes air dalam ember, tapi ternyata saya salah. Mungkin seharusnya menyadari bahwa lambda bukanlah ide terbaik.
sumber
APL + WIN, 55 byte
Anjuran untuk string input dengan huruf kecil karakter utama:
Penjelasan:
sumber
Python 3 , 77 byte
Cobalah online!
sumber
J ,
5752 byte5 byte disimpan berkat FrownyFrog!
Cobalah online!
Namun solusi panjang lainnya ... Saya tidak tahu cara membuat
}
kata kerja diam-diam dan itu sebabnya saya menggunakan lebih lama{"0 1&.|:
untuk seleksi.Penjelasan:
@}.
Jatuhkan simbol pertama dan,.&.":
mengonversi sisanya ke daftar angka desimal]:#:
konversi setiap digit ke daftar digit biner (dan tutup garpu)('-',:'rwx')
membuat tabel 2-baris dan menggunakan 0 untuk memilih dari baris pertama / 1 - dari yang kedua{"0 1&.|:~
menggunakan digit biner untuk memilih dari tabel di atas[:,
ratakan hasilnya('d-l'{~'DFL'i.{.)
memformat simbol pertama,
menambahkan simbol fisrt ke daftar izinsumber
1#:@}."."0
('d-l'{~'DFL'i.{.)
→-&.('-DLld'i.{.)
i.
dan&.
Terima kasih banyak! Ngomong-ngomong, bisakah Anda menjelaskan kepada saya bagaimana menggunakan}
kata kerja select in tacit?2 2 2&#:`('-',:'rwx'"_)}@"."0@}.
panjangnya persis sama333
:)PHP, 68 byte
menerjemahkan
f
dalam huruf kecil input ke garis bawah dan setiap angka oktal untukrwx
setara, menggunakan garis bawah alih-alih tanda hubung (untuk menyimpan kebutuhan akan tanda kutip), lalu ganti_
dengan-
.Jalankan sebagai pipa dengan
-nF
atau coba online .sumber
C (gcc) ,
109104 byteSetidaknya C dapat mengonversi input oktal .... :-)
Sunting: Saya menyadari bahwa pengubah ukuran tidak sepenuhnya diperlukan, dan itu
putchar()
lebih pendek daripadaprintf()
dalam kasus ini!Cobalah online!
Asli:
Cobalah online!
sumber