Tujuan:
Buat program untuk menemukan file terkecil di folder saat ini.
- Ukuran file dapat diukur dalam byte atau karakter.
- Jika beberapa file memiliki ukuran yang sama, Anda dapat memilih satu atau menampilkan semuanya.
- Anda dapat mengasumsikan akan ada setidaknya satu file di folder, dan tidak ada file yang memiliki ukuran 0.
Asumsikan semua file dalam folder dapat dimuat oleh bahasa yang Anda gunakan.
Asumsikan bahwa tidak ada folder di direktori saat ini.
Memasukkan:
Program tidak boleh mengambil input apa pun dari pengguna, kecuali:
- Jika bahasa Anda tidak memiliki "folder saat ini", ia mungkin menanyakan nama / jalur folder kepada pengguna.
- Jika bahasa Anda tidak dapat secara langsung mengakses file di komputer Anda, itu memungkinkan pengguna untuk mengunggah file. (JavaScript, misalnya)
Keluaran:
Nama file terkecil harus ditampilkan.
- Leading / trailing simbol diperbolehkan, selama jelas file mana yang telah dipilih.
- (Mencetak daftar semua file melanggar aturan).
Catatan:
- Celah Standar tidak diizinkan.
- Anda tidak dapat memodifikasi / membuat / menghapus file di folder untuk mengubah hasilnya.
- Ini adalah kode-golf ; jawaban terpendek (dalam byte) menang.
code-golf
file-system
12Me21
sumber
sumber
Jawaban:
Vim 12 byte
Cobalah online!
Penjelasan:
!!
adalah perintah filter . Ini mengirimkan konten dari baris saat ini ke perintah sistem arbitrer, dan mengirimkan output kembali ke buffer. Ini berguna untuk menggunakan alat eksternal untuk hal-hal yang bash lebih baik daripada vim, misalnya!!rev
untuk membalikkan garis saat ini, atau!Gxxd
untuk hexdump buffer. Dalam kasus kami, buffer kosong sehingga setara dengan:r!ls
, yang hanya mengumpankan output dari perintah ke baris saat ini.Sekarang kursor ada di baris 1, dan kami ingin menghapus setiap baris kecuali yang terakhir. Pendekatan naif adalah
Tapi kita bisa berbuat lebih baik. Seperti yang saya jelaskan dalam tip ini , biasanya
{
bisa (tetapi tidak selalu) setara dengan . Di sini, bahkan lebih baik. Karena gerakannya berbasis karakter , bukan berbasis garis seperti ini, kita tidak harus naik garis terlebih dahulu, meninggalkan kitagg
gg
sumber
Bash + coreutils, 13 byte
Penjelasan:
sumber
ls -1Sa|tail -1
lebih pendek 3 byte dan memiliki output yang lebih bersih.ls
mendeteksi keluaran ke terminal, ia akan memformat keluaran menjadi beberapa kolom. Tetapi jika output adalah pipa, itu hanya akan melakukan 1 per baris. Bandingkanls
vsls|cat
ls -Sar|sed q
Python
23,94767454 byte-18 byte terima kasih kepada @orlp
-2 byte terima kasih kepada @Jonathan Allan
-20 byte berkat perubahan dalam spesifikasi tantangan
sumber
print min(filter(path.isfile,listdir(".")),key=path.getsize)
lebih bersih dan jauh lebih pendek."."
ini adalah default.print(min(filter(path.isfile,listdir()),key=path.getsize))
wc
yang memberi saya 1 byte lebih banyakfilter
bit tidak diperlukan. Ini juga tidak berfungsi di Python 3, karenaprint
merupakan fungsi. Yang berikut ini akan berfungsi, dan jauh lebih singkat:print(min(listdir(),key=path.getsize))
PowerShell ,
302421 byteCobalah online!
ls
adalah alias untukGet-ChildItem
. Itu disalurkan kesort-object
denganlength
atribut, sehingga file diurutkan berdasarkan ukuran. Kami mengindeks dengan yang(...)[0]
untuk mendapatkan yang pertama (yaitu, terkecil), dan kemudian mengambilnya.Name
. Output melalui implisitWrite-Output
terjadi pada penyelesaian program.Disimpan 6 byte karena kami dijamin hanya file yang ada di direktori. Menyimpan 3 tambahan berkat ConnorLSW.
sumber
-file
karena hanya file yang ada di direktori saat ini?sort le*
untuk mencukur beberapa byte karena PowerShell akan menerimanya.Ruby,
61403837 byteTerima kasih GB dan Value Ink
sumber
Dir.foreach(?.).min_by{|x|File.size x}
mendapat hasil yang sama dalam 38 byte.Dir[?*]
jauh lebih pendek tetapi tidak termasuk file Unix tersembunyi seperti.bash_profile
...Dir[?*,".*"]
. String global.?*
tidak akan cocok dengan file.a
jika ada.Mathematica, 35 byte
FileNames[]
menghasilkan daftar nama semua file (dan direktori) di direktori saat ini;~MinimalBy~FileByteCount
memilih nama file dengan jumlah byte terkecil.FileByteCount
melempar banyak kesalahan ketika diterapkan ke direktori, tetapi kesalahan tidak menggagalkan program.sumber
Java 7,
149142 byteCobalah online!
-7 byte berkat CAD97
sumber
()->java.utils.stream(new java.io.File(".").listFiles()).max((a,b)->a.length()-b.length).get().getName()
untuk 104 byteSH (Linux / Unix)
15141314 byte-S
mengurutkan berdasarkan ukuran (turun),dan-r
membalikkantail -1
menampilkan file terakhir dalam daftar.@ Dennis Terima kasih telah menyimpan 1 byte @Dani_l Terima kasih telah menyimpan 1 byte.
sumber
tail
alih-alih membalikkan, dan-1
merupakan singkatan untuk-n1
.MATLAB / Oktaf,
5248 bytePenjelasan
Ini mendapatkan daftar direktori dari semua file dan folder di direktori saat ini menggunakan
dir
. Output daridir
adalahstruct
berisi nama file, apakah itu direktori atau tidak, ukuran (dalam byte), dll.Kita kemudian dapat mengambil array ukuran masing-masing dalam byte
[d.bytes]
dan melakukan pembagian elemen dengan boolean yang menunjukkan apakah itu direktori atau tidak~[d.isdir]
yang akan menghasilkan diInf
mana itu direktori (pembagian dengan nol) dan ukuran dalam byte jika tidak (pembagian oleh 1).Kami menemukan indeks minimum array ini menggunakan output kedua
min
dan menggunakannya untuk mengindeks ke struct awal dan menampilkan nama dengand(n).name
sumber
disp(...)
sekitar output untuk mencetaknya dengan benar. Kalau tidak, jika misalnya ada file yang disebutans
bukan yang terkecil di folder, hasilnya tidak akan jelas untuk file mana yang terkecil bagi siapa pun yang tidak terbiasa dengan MATLAB.ans =
apa.
(folder saat ini) dan..
(folder di atas), jadi jangan hapus direktori periksa sepertinya. Maaf soal itu.Scala, 52 byte
Versi lama, 79 byte
Disesuaikan sesuai dengan saran jaxad0127. Sekarang hanya 52 byte.
sumber
Batch,
433935 byteKeluaran mencakup ruang terkemuka untuk beberapa alasan, tetapi untungnya itu diizinkan. Sunting: Sekarang dengan asumsi tidak ada direktori untuk menyimpan 4 byte.
sumber
/a-d
.Perl 6 ,
33 32 3116 byteCobalah
Cobalah
Cobalah
Cobalah
Diperluas:
sumber
dir
default adalah$*CWD
, dan deskripsi tugas mengatakan Anda dapat berasumsi tidak akan ada folder, jadi saya pikir Anda dapat mempersingkat menjadidir.min(*.s).put
.J ,
2120 byteMenyimpan satu byte berkat @ Conor .
Penjelasan
sumber
BATCH File,
777263 byteTidak ada yang setara langsung dengan
head
atautail
di BATCH, setidak-tidaknya setahu saya, jadi inilah cara penyelesaiannya. (dengan banyak bantuan dari @Neil - terima kasih!)The
dir
perintah, dengan/o-s
ke semacam di turun ukuran file, dan/b
output hanya nama file. Kami mengulanginya denganFOR /F
, mengatur variabelF
ke nama file setiap kali. Akhirnya, kami hanya menampilkan yang terakhir denganECHO %F%
.Disimpan 9 byte lebih banyak berkat Neil dan terima kasih untuk jaminan bahwa tidak ada direktori.
sumber
FOR
Variabel Anda membutuhkan dua%
s untuk berfungsi dalam skrip. Jika tidak, beberapa trik bermain golf: 1. Jangan gunakan@ECHO OFF
pada skrip pendek, tambahkan a@
untuk setiap baris dan setelahDO
. 2. Hapus spasi sebelumnyaDO
. 3. Spasi dan:
s tidak diperlukan dalamdir
perintah.PHP,
8462 byteKarena pertanyaan telah diperbarui dengan asumsi bahwa tidak akan ada folder di direktori saat ini, saya dapat menghapus hal-hal pemeriksaan file dan menurunkan ini.
Ini jawaban lama saya:
Ini yang terbaik yang bisa saya lakukan. Mungkin ada cara yang lebih baik saya hilang.
sumber
Node.js (menggunakan
walk
), 114 byteAbaikan baris baru:
Ini memanggil walker yang melintasi direktori saat ini (
__dirname
) dan untuk setiap file memanggil fungsi dengan statnyas
dan fungsi berikutnyan()
yang harus dipanggil untuk melanjutkan traversal. Kemudian padaend
, ia mencetak nama file dengan minimumsize
dalam byte yang ditemukan.s.size>m.size
kembalifalse
ketikam.size
adalahundefined
, sehingga setelah callback pertama,m
adalah sama dengan file pertama ditemukan, dan terus dari sana biasanya.sumber
R, 36 byte
Dijelaskan
file.info()
mengembalikandata.frame
"informasi file" ketika diberi karakter atau vektor karakter dari nama file / folder yang ketika digunakan pada daftar file / folder di direktori saat ini (dir()
), terlihat seperti:Selanjutnya kita baru saja menemukan nama file yang
size
kolomnya (disingkat menggunakan$s
) adalah yang terkecil. Akibatnya, jika ada lebih dari satu file dengan ukuran terkecil, semua akan dikembalikan.Bonus: jika kita juga ingin mengabaikan folder di direktori saat ini kita bisa mencari ukuran kapan
isdir == FALSE
:x=file.info(y<-dir());y[x$s==min(x$s[!x$i])]
yang ternyata 44 byte.sumber
file.size
lebih pendek karena Anda tidak harus melakukannya$s
sesudahnya.Tcl , 88 byte
Cobalah online!
sumber
SmileBASIC, 110 byte
Hanya melihat
TXT:
file, karenaDAT:
file tidak dapat dimuat kecuali Anda sudah tahu ukurannya, sehingga tidak mungkin memuat file secara acak.sumber
DAT:
file? Bisakah Anda memaksa setiap nama / ukuran file dalam folder?DAT:
ke dalam array 2 dimensi (misalnya) akan menyebabkan kesalahan, jadi Anda tidak dapat dengan paksa memaksanya. Anda hanya perlu mengetahui jumlah dimensi sebelumnya, yang biasanya Anda lakukan.DAT:
ke array 3-d? Kemudian Anda bisa membuat array ukuran maksimum. Dan Anda tidak dapat menangkap kesalahan dengan cara apa pun?Groovy , 49 byte
Cobalah online!
Penutupan, penggunaan:
m(new File("location"))
sumber
C #, 277 byte
Bukan yang terpendek, tapi apa yang Anda harapkan dari C #?
Golf
Tidak disatukan
sumber
Röda ,
3231 byteIni adalah fungsi anonim yang mengurutkan file dalam direktori saat ini berdasarkan panjang file dan memilih file pertama
pull
.Gunakan seperti ini:
main{ {ls""|sort key=fileLength|pull} }
sumber
ls""
berfungsi dengan baikls"."
. Saya pikir Anda dapat menyimpan byte dari ituSmileBASIC 3, 105 byte (bersaing?)
Mengalahkan jawaban 12Me21 tetapi masih menderita ketidakmampuan untuk memuat file DAT (yang terasa sangat kejam untuk didiskualifikasi mengingat keadaan.)
Versi pendek di atas menjengkelkan dan meminta Anda pada setiap file untuk memuat, tetapi itu berhasil. Untuk dua byte lebih, Anda dapat menekan prompt; ubah baris 2 menjadi ini:
sumber
File Batch, 33 byte
File batch cukup kompetitif kali ini, anehnya.
Keluaran
Temukan cara untuk menghentikan pembuatan
q
sebelumdir/os/b
dijalankan dan Anda akan menyimpan maksimum 6 byte dengan tidak perlu meletakkan file output di direktori yang terpisah.Akan selalu menampilkan
q
sebagai file terkecil (kecuali terikat untuk file 0 byte lainnya) karena dibuat sebagai file kosong sebelumdir/b/os
mengumpulkan daftar file.sumber
C ++ 17 (gcc) , 180 byte
Cobalah online!
Membutuhkan pustaka standar terbaru yang mengimplementasikan
std::filesystem
.sumber
Zsh ,
1814 byteCobalah online!Cobalah online!(D)
gumpalan dotfiles(oL)
macam berdasarkan ukuran[1]
memilih pertandingan pertamasumber