ค้นหาไฟล์ที่เล็กที่สุด


19

เป้าหมาย:

สร้างโปรแกรมเพื่อค้นหาไฟล์ที่เล็กที่สุดในโฟลเดอร์ปัจจุบัน

  • ขนาดไฟล์อาจถูกวัดเป็นไบต์หรือตัวอักษร
  • หากหลายไฟล์มีขนาดเท่ากันคุณสามารถเลือกหนึ่งไฟล์หรือแสดงไฟล์ทั้งหมด
  • คุณสามารถสมมติว่าจะมีไฟล์อย่างน้อยหนึ่งไฟล์ในโฟลเดอร์และไม่มีไฟล์ใดที่มีขนาดเท่ากับ 0
  • สมมติว่าไฟล์ทั้งหมดในโฟลเดอร์สามารถโหลดได้โดยภาษาที่คุณใช้

  • สมมติว่าไม่มีโฟลเดอร์ในไดเรกทอรีปัจจุบัน

การป้อนข้อมูล:

โปรแกรมไม่ควรรับข้อมูลใด ๆ จากผู้ใช้เว้นแต่:

  • หากภาษาของคุณไม่มี "โฟลเดอร์ปัจจุบัน" อาจขอชื่อ / เส้นทางของผู้ใช้
  • หากภาษาของคุณไม่สามารถเข้าถึงไฟล์บนคอมพิวเตอร์ของคุณโดยตรงอาจอนุญาตให้ผู้ใช้อัปโหลดไฟล์ (เช่น JavaScript)

เอาท์พุท:

ควรแสดงชื่อไฟล์ที่เล็กที่สุด

  • อนุญาตสัญลักษณ์นำหน้า / ต่อท้ายตราบใดที่ยังล้างไฟล์ที่เลือกไว้
  • (การพิมพ์รายชื่อไฟล์ทั้งหมดนั้นผิดกฎ)

หมายเหตุ:

  • ไม่อนุญาตช่องโหว่มาตรฐาน
  • คุณไม่สามารถแก้ไข / สร้าง / ลบไฟล์ในโฟลเดอร์เพื่อเปลี่ยนผลลัพธ์
  • นี่คือ ; คำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ

1
เราสามารถสรุปได้ไฟล์สามารถมีขนาดของ 0 หรือไม่?
Rɪᴋᴇʀ

นอกจากนี้ "สมมติว่าไฟล์ทั้งหมดในโฟลเดอร์สามารถเข้าถึงได้" หมายความว่าอย่างไร หมายความว่าไฟล์ที่ซ่อนไม่จำเป็นต้องแสดงหรือไม่
Rɪᴋᴇʀ

2
ฉันสามารถสมมติว่าไม่มีโฟลเดอร์ในโฟลเดอร์ปัจจุบันได้หรือไม่? มันทำให้ทุกอย่างแตกต่างถ้าคุณมีฟังก์ชั่นภาษาที่ส่งกลับทั้งไฟล์และโฟลเดอร์แทนไฟล์เท่านั้น!
sergiol

1
ไม่จำเป็น. คุณอาจคิดว่าไม่มีไดเรกทอรีใดในไดเรกทอรีปัจจุบันที่ไม่คลุมเครือและไม่มีคำตอบใด ๆ ที่ไม่ถูกต้อง
เดนนิส

1
(ขออภัยฉันยังไม่ได้ตอบเร็วกว่านี้การเชื่อมต่ออินเทอร์เน็ตของฉันหยุดลงสองสามวัน) ปัญหาที่ฉันมีเมื่อคุณอนุญาตให้ข้ามไฟล์ที่ซ่อนอยู่คือดูเหมือนว่าจะเปิดช่องโหว่มากมาย การอนุญาตให้คุณข้ามไฟล์ที่ "เข้าถึงยากขึ้นนิดหน่อย" นั้นหมายความว่าผู้คนสามารถทำอะไรบางอย่างเช่นตรวจสอบเฉพาะ 9 ไฟล์แรกเท่านั้นเพราะจะช่วยประหยัดไม่กี่ไบต์
12Me21

คำตอบ:


7

เป็นกลุ่ม 12 ไบต์

!!ls -Sa
Gd{

ลองออนไลน์!

คำอธิบาย:

!!เป็นคำสั่งตัวกรอง มันท่อเนื้อหาของบรรทัดปัจจุบันไปยังคำสั่งระบบโดยพลการและส่งออกกลับเข้าไปในบัฟเฟอร์ มันมีประโยชน์สำหรับการใช้เครื่องมือภายนอกสำหรับสิ่งต่าง ๆ ที่ bash ดีกว่าที่ vim, ตัวอย่างเช่น!!revการย้อนกลับบรรทัดปัจจุบัน, หรือ!Gxxdการ hexdump บัฟเฟอร์. ในกรณีของเราบัฟเฟอร์ว่างเปล่าดังนั้นมันจึงเทียบเท่ากับ:r!lsซึ่งเพิ่งป้อนผลลัพธ์ของคำสั่งลงในบรรทัดปัจจุบัน

ตอนนี้เคอร์เซอร์อยู่ที่บรรทัดที่ 1 และเราต้องการลบทุกบรรทัดยกเว้นอันสุดท้าย แนวทางไร้เดียงสาคือ

G       " Go to the last line
 k      " Go up one line
  d     " Delete:
   gg   "   Everything up to the first line

แต่เราทำได้ดีกว่า เหมือนที่ผมได้อธิบายไว้ในปลายนี้ที่{สามารถมักจะ ( แต่ไม่เสมอไป) ggเทียบเท่ากับ ที่นี่ดียิ่งขึ้น เพราะการเคลื่อนไหวเป็นตัวอักษรตามที่ไม่บรรทัดตามชอบggก็คือเราจะได้ไม่ต้องไปขึ้นบรรทัดแรกที่ออกจากเราด้วย

Gd{

16

Bash + coreutils 13 ไบต์

ls -Sar|sed q

คำอธิบาย:

ls -Sar|sed q
ls            # list files
   -S         # sorted, biggest first
     a        # show hidden files
      r       # reversed (smallest first)
       |sed q # q is quit at first line that matches given regex, 
              # given regex is empty so guaranteed match.         

โพสต์นี้เป็นคำตอบของฉันเอง แต่ฉันคิดว่ามันคล้ายกับของคุณมากเกินไป ls -1Sa|tail -1สั้นลง 3 ไบต์และมีเอาต์พุตที่สะอาดกว่า
orlp

@orlp ขอบคุณ! ..
2017

1
ฉันไม่คิดว่าคุณต้องการ '-1' ไปป์จะวางหนึ่งไฟล์ต่อบรรทัดโดยอัตโนมัติ
GB

@ElylyIrk ฉันคิดว่า GB นั้นถูกต้อง หากlsตรวจพบการส่งออกเป็นขั้วมันจะจัดรูปแบบการส่งออกเป็นหลายคอลัมน์ แต่ถ้า output เป็นไพพ์มันก็จะทำ 1 ต่อบรรทัด เปรียบเทียบlsvsls|cat
Digital Trauma

สั้นลงสองไบต์:ls -Sar|sed q
บาดเจ็บทางดิจิตอล

8

Python 2 3, 94 76 74 54 ไบต์

-18 ไบต์ขอบคุณ @ orlp
-2 ไบต์ขอบคุณ@Jonathan Allan
-20 ไบต์ขอบคุณการเปลี่ยนแปลงรายละเอียดความท้าทาย

from os import*
print(min(listdir(),key=path.getsize))

print min(filter(path.isfile,listdir(".")),key=path.getsize)สะอาดกว่าและสั้นกว่ามาก
orlp

บันทึกสองไบต์ที่ย้ายไปยัง Python 3 เนื่องจาก"."เป็นค่าเริ่มต้น print(min(filter(path.isfile,listdir()),key=path.getsize))
Jonathan Allan

ฉันนับ 76 ไม่ใช่ 77
โจนาธานอัลลัน

@JanathanAllan ฉันวัดจำนวนไบต์ด้วยwcซึ่งทำให้ฉันเพิ่มอีก 1 ไบต์
ovs

ไบต์ภายนอกอาจเกิดจากการขึ้นบรรทัดใหม่ซึ่งไม่จำเป็นสำหรับ Python นอกจากนี้เนื่องจากความท้าทายได้รับการอัปเดตเพื่อระบุว่าไม่มีไดเรกทอรีย่อยอยู่filterบิตทั้งหมดจึงไม่จำเป็น สิ่งนี้ยังไม่ทำงานใน Python 3 เนื่องจากprintเป็นฟังก์ชั่น สิ่งต่อไปนี้สามารถใช้งานได้และจะสั้นลงอย่างมาก:print(min(listdir(),key=path.getsize))
Mego

8

PowerShell , 30 24 21 ไบต์

(ls|sort le*)[0].Name

ลองออนไลน์!

lsGet-ChildItemเป็นนามแฝงสำหรับ มีการส่งไปยังsort-objectพร้อมกับlengthแอตทริบิวต์ดังนั้นไฟล์จะถูกจัดเรียงตามขนาด เราจัดทำดัชนีโดยที่(...)[0]เพื่อให้ได้ค่าแรก (เช่นเล็กที่สุด) จากนั้นนำค่า.Nameดังกล่าวมาใช้ เอาต์พุตโดยนัยWrite-Outputเกิดขึ้นเมื่อโปรแกรมเสร็จสิ้น

บันทึก 6 ไบต์เนื่องจากเรารับประกันได้ว่ามีไฟล์อยู่ในไดเรกทอรีเท่านั้น บันทึกเพิ่มเติม 3 ขอบคุณ ConnorLSW


2
คุณไม่สามารถกำจัด-fileไฟล์ได้เนื่องจากมีเพียงไฟล์ในไดเรกทอรีปัจจุบันหรือไม่?
Mutantoe

@ Mutantoe ใช่ - นั่นถูกแก้ไขเข้าสู่ความท้าทายหลังจากที่ฉันโพสต์คำตอบนี้ ขอบคุณ!
AdmBorkBork

คุณสามารถใช้sort le*เพื่อโกนบางไบต์เนื่องจาก powershell จะยอมรับมัน
colsw

@ConnorLSW ใช่แน่นอน ขอบคุณ!
AdmBorkBork

7

Ruby, 61 40 38 37 ไบต์

ขอบคุณ GB และหมึกมูลค่า

p Dir[?*,".*"].min_by{|x|File.size x}

คุณสามารถใช้ได้ ?. แทน Dir.pwd และ min_by {} เพื่อรับไฟล์ที่เล็กที่สุด Dir.foreach(?.).min_by{|x|File.size x}ได้รับผลลัพธ์เดียวกันใน 38 ไบต์
GB

@GB ขอบคุณ!
dkudriavtsev

เป็นความอัปยศที่ต้องดูไฟล์ภาษา "ทั้งหมด" เพราะDir[?*]สั้นกว่า แต่ไม่รวมไฟล์ Unix ที่ซ่อนอยู่เช่น.bash_profile...
Ink Ink

อาจ Dir [? *, ".? *"] สามารถใช้งานได้ ฉันไม่ได้ลอง และมันก็สั้นกว่า
GB

@GB Dir[?*,".*"]มันต้องการจะเป็นจริง สตริง Glob .?*จะไม่ตรงกับไฟล์.aหากมีอยู่
หมึกมูลค่า

6

Mathematica, 35 ไบต์

FileNames[]~MinimalBy~FileByteCount

FileNames[]สร้างรายการชื่อของไฟล์ทั้งหมด (และไดเรกทอรี) ในไดเรกทอรีปัจจุบัน ~MinimalBy~FileByteCountเลือกชื่อไฟล์ที่มีจำนวนไบต์น้อยที่สุด FileByteCountส่งข้อผิดพลาดจำนวนมากเมื่อนำไปใช้กับไดเรกทอรี แต่ข้อผิดพลาดไม่ทำให้โปรแกรมไม่ทำงาน


6

Java 7, 149 142 ไบต์

String f(){String n="";long s=-1>>>1,p;for(java.io.File f:new java.io.File(".").listFiles())if((p=f.length())<s){n=f.getName();s=p;}return n;}

ลองออนไลน์!

-7 ไบต์ขอบคุณ CAD97


ฉันคิดว่าคุณต้องการไฟล์ :: length not File :: getTotalSpace
CAD97

ไม่ได้ทดสอบ Java 8: ()->java.utils.stream(new java.io.File(".").listFiles()).max((a,b)->a.length()-b.length).get().getName()สำหรับ 104 ไบต์
CAD97

@ CAD97 คุณพูดถูก! อะไรคือสิ่งที่ผมคิดว่า ...
Poke

6

SH (Linux / Unix) 15 14 13 14 ไบต์

ls -aS|tail -1

-S เรียงตามขนาด (มากไปหาน้อย)

-rย้อนกลับและtail -1ส่งออกไฟล์สุดท้ายในรายการ

@ Dennis ขอบคุณสำหรับการบันทึก 1 ไบต์ @Dani_l ขอบคุณสำหรับการบันทึก 1 ไบต์


พบไฟล์ที่ใหญ่ที่สุดไม่ใช่เหรอ?
Dennis

ไม่เป็นไรฉันเหนื่อย คุณสามารถใช้tailแม้ว่าแทนของการย้อนกลับและเป็นชวเลขเป็น-1 -n1
Dennis

@Dennis Updated
Abel Tom

@EasterlyIrk ตอนนี้มันควร :)
อาเบลทอม

@AbelTom เจ๋งขอบคุณสำหรับการแก้ไข
Rɪᴋᴇʀ

4

MATLAB / Octave, 52 48 ไบต์

d=dir;[~,n]=min([d.bytes]./~[d.isdir]);d(n).name

คำอธิบาย

dirนี้ได้รับรายการไดเรกทอรีของไฟล์และโฟลเดอร์ทั้งหมดในไดเรกทอรีปัจจุบันใช้ ผลลัพธ์ของการdirเป็นstructชื่อไฟล์ที่มีไม่ว่าจะเป็นไดเรกทอรีหรือไม่ขนาด (เป็นไบต์) ฯลฯ

จากนั้นเราสามารถใช้อาร์เรย์ขนาดของแต่ละไบต์[d.bytes]และทำการหารองค์ประกอบที่ชาญฉลาดด้วยบูลีนระบุว่ามันเป็นไดเรกทอรีหรือไม่~[d.isdir]ซึ่งจะให้ผลInfที่มันเป็นไดเรกทอรี (หารด้วยศูนย์) และขนาดเป็นไบต์เป็นอย่างอื่น (หารด้วย 1)

เราค้นหาดัชนีของค่าต่ำสุดของอาร์เรย์นี้โดยใช้เอาต์พุตที่สองminและใช้เพื่อทำดัชนีในโครงสร้างเริ่มต้นและแสดงชื่อด้วยd(n).name


คุณควรเพิ่มdisp(...)รอบผลลัพธ์เพื่อพิมพ์อย่างถูกต้อง มิฉะนั้นหากตัวอย่างมีไฟล์ที่เรียกansว่าไม่ใช่ไฟล์ที่เล็กที่สุดในโฟลเดอร์ผลลัพธ์จะไม่ชัดเจนว่าไฟล์ใดมีขนาดเล็กที่สุดสำหรับทุกคนที่ไม่คุ้นเคยกับ MATLAB
Tom Carpenter

@TomCarpenter Hmmm ฉันตีความ "สัญลักษณ์นำหน้า / ต่อท้ายได้รับอนุญาตตราบใดที่ชัดเจนว่าเลือกไฟล์ใดไว้" เพื่อหมายความว่าไฟล์ans = นั้นใช้ได้
Suever

ฉันเพิ่งรู้ว่า MATLAB เพิ่ม implicit .(โฟลเดอร์ปัจจุบัน) และ..(โฟลเดอร์ด้านบน) ดังนั้นไม่สามารถลบไดเรกทอรีที่ตรวจสอบได้ ขอโทษสำหรับเรื่องนั้น.
Tom Carpenter

4

สกาลา 52 ไบต์

รุ่นเก่า, 79 ไบต์

new java.io.File(".").listFiles.map(a=>a.getName->a.length)sortBy(_._2)apply(0)

ปรับตามคำแนะนำของ jaxad0127 ตอนนี้เหลือเพียง 52 ไบต์เท่านั้น

new java.io.File(".").listFiles.sortBy(_.length)head

ใช้หัวแทนการใช้ (0) จะสั้นกว่า นอกจากนี้วิธีการ toString ของไฟล์ก็ไม่จำเป็นต้องโทรหาชื่อ
jaxad0127

4

แบตช์43 39 35 ไบต์

@dir/b/os|(set/pf=&call echo %%f%%)

เอาท์พุทรวมพื้นที่ชั้นนำด้วยเหตุผลบางอย่าง แต่โชคดีที่ได้รับอนุญาต แก้ไข: ตอนนี้สมมติว่าไม่มีไดเรกทอรีที่จะบันทึก 4 ไบต์


โอ้ใช้ / p อย่างนั้นดีจัง!
AdmBorkBork

@AdmBorkBork อ่าฉันไม่ได้สังเกตว่าได้รับอนุญาตขอบคุณ!
Neil

คุณจะรับประกันว่าไม่มีไดเรกทอรีย่อยที่มีอยู่ (ความท้าทายที่ได้รับการปรับปรุง) /a-dเพื่อให้คุณสามารถกำจัด
AdmBorkBork

4

Perl 6 ,  33 32 31  16 ไบต์

'.'.IO.dir.grep(*.f).min(*.s).put

ลองมัน

put '.'.IO.dir.min:{try .s//Inf}

ลองมัน

put $*CWD.dir.min:{try .s//Inf}

ลองมัน

put dir.min: *.s

ลองมัน

ขยาย:

put        # print with trailing newline
dir        # the list of files in the current directory
.min:      # find the minimum by
  *.s      # calling the `s` method (size) in a Whatever lambda

รูปแบบการทำงานของdirค่าเริ่มต้น$*CWDและคำอธิบายงานบอกว่าคุณสามารถสมมติว่าไม่มีโฟลเดอร์ใด ๆ ดังนั้นฉันคิดว่าคุณสามารถย่อให้สั้นลงdir.min(*.s).putได้
smls

เมื่อฉันเขียนมันก็บอกว่าโปรแกรมจะต้องละเว้นโฟลเดอร์
แบรดกิลเบิร์ต b2gills

4

J , 21 20 ไบต์

>{.,(/:2&{"1)1!:0'*'

บันทึกขอบคุณไบต์ @ เนอร์

คำอธิบาย

>{.,(/:2&{"1)1!:0'*'
                 '*' Glob all files in current directory
             1!:0    Table of file metadata in that directory
       2&{"1         Get the file size of each
     /:              Sort the files by that
   ,                 Flatten
 {.                  Get the first value
>                    Unbox

@ ConorO'Brien Thanks
ไมล์

3

แฟ้มแบตช์77 72 63 ไบต์

@FOR /F "tokens=*" %%G IN ('dir/o-s/b') DO @SET F=%%G
@ECHO %F%

อย่างน้อยก็ไม่มีความรู้เทียบเท่าของฉันโดยตรงheadหรือtailในแบทช์ดังนั้นนี่คือการทำงานที่ไร้ค่า (ด้วยความช่วยเหลือจาก @Neil มาก - ขอบคุณ!)

dirคำสั่งที่มี/o-sการจัดเรียงขนาดไฟล์ลงมาและ/bการส่งออกเฉพาะชื่อไฟล์ เราวนรอบด้วยFOR /Fการตั้งค่าตัวแปรFเป็นชื่อไฟล์ในแต่ละครั้ง ECHO %F%สุดท้ายเราส่งออกเพียงคนสุดท้ายด้วย

บันทึกอีก 9 ไบต์ต้องขอบคุณ Neil และขอขอบคุณที่รับประกันว่าไม่มีไดเรกทอรีอยู่


1
FORตัวแปรของคุณต้องการสอง%s เพื่อทำงานในสคริปต์ มิฉะนั้นเทคนิคการเล่นกอล์ฟสักเล็กน้อย: 1. อย่าใช้@ECHO OFFกับสคริปต์สั้น ๆ เพิ่ม a @ในแต่ละบรรทัดและหลังจากDOนั้น 2. DOลบพื้นที่ก่อน 3. การเว้นวรรคและ:s ไม่จำเป็นในdirคำสั่ง
Neil

1
@Neil Ack ขอบคุณ ขออภัยเป็นสนิมสวยตั้งแต่ฉันได้ทำ PowerShell ... ขอบคุณ!
AdmBorkBork

3

PHP, 84 62 ไบต์

$t=array_map(filesize,$g=glob('*'));asort($t);echo$g[key($t)];

เนื่องจากคำถามได้รับการปรับปรุงโดยมีการสันนิษฐานว่าจะไม่มีโฟลเดอร์ในไดเรกทอรีปัจจุบันฉันจึงสามารถลบไฟล์ตรวจสอบสิ่งต่าง ๆ และลบออกได้


นี่คือคำตอบเก่าของฉัน:

$t=array_map(filesize,$g=array_filter(glob('*'),is_file));asort($t);echo$g[key($t)];

นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ อาจจะมีวิธีที่ดีกว่าที่ฉันหายไป

$t=array_map(              # visit each array element and...
    filesize,              # map each filename to its filesize...
    $g=array_filter(       # using an array of...
        glob('*'),         # all files and directories...
        is_file            # filtered by files...
    )                      # 
);                         # 
asort($t);                 # sort the array of filesizes, then...
echo$g[key($t)];           # print element from the array of files using the first key of the sorted array as an index

2

Node.js (โดยใช้walk), 114 ไบต์

ไม่สนใจบรรทัดใหม่:

require('walk').walk(__dirname).on('file',(r,s,n)=>
(m=s.size>m.size?m:s,n()),m=0).on('end',_=>console.log(m.name))

สิ่งนี้จะเรียกใช้วอล์คเกอร์ที่ลัดเลาะไปตามไดเรกทอรีปัจจุบัน ( __dirname) และสำหรับแต่ละไฟล์จะเรียกใช้ฟังก์ชั่นที่มีค่าสถิติsและฟังก์ชั่นถัดไปn()ที่จะต้องเรียกใช้เพื่อดำเนินการสำรวจเส้นทางต่อ จากนั้นที่endมันจะพิมพ์ชื่อไฟล์ด้วยจำนวนsizeไบต์ขั้นต่ำที่พบ s.size>m.sizeส่งคืนfalseเมื่อm.sizeเป็นundefinedดังนั้นหลังจากโทรกลับครั้งแรกmเท่ากับไฟล์แรกที่พบและดำเนินการต่อจากที่นั่นตามปกติ


2

R, 36 ไบต์

x=file.info(y<-dir())$s;y[x==min(x)]

อธิบาย

file.info()ส่งกลับค่าdata.frameของ "ข้อมูลไฟล์" เมื่อกำหนดอักขระหรือเวกเตอร์อักขระของชื่อไฟล์ / โฟลเดอร์ซึ่งเมื่อใช้กับรายการไฟล์ / โฟลเดอร์ในไดเรกทอรีปัจจุบัน ( dir()) ดูเหมือนว่า:

                                                               size isdir mode               mtime               ctime               atime exe
Polyspace_Workspace                                               0  TRUE  777 2014-11-28 17:29:25 2014-11-28 17:29:25 2014-11-28 17:29:25  no
Python Scripts                                                    0  TRUE  777 2016-03-21 23:59:41 2016-03-21 23:59:41 2016-03-21 23:59:41  no
R                                                                 0  TRUE  777 2015-12-23 20:11:02 2015-12-23 20:11:02 2015-12-23 20:11:02  no
Rockstar Games                                                    0  TRUE  777 2015-04-14 12:23:05 2015-04-14 12:23:03 2015-04-14 12:23:05  no
TrackmaniaTurbo                                                   0  TRUE  777 2016-03-24 17:15:05 2016-03-24 13:13:48 2016-03-24 17:15:05  no
ts3_clientui-win64-1394624943-2014-06-11 03_18_47.004772.dmp 314197 FALSE  666 2014-06-11 02:18:47 2014-06-11 02:18:47 2014-06-11 02:18:47  no

ต่อจากนั้นเราเพิ่งพบชื่อไฟล์ที่sizeคอลัมน์ (ตัวย่อใช้$s) มีขนาดเล็กที่สุด ดังนั้นหากมีมากกว่าหนึ่งไฟล์ที่มีขนาดเล็กที่สุดไฟล์ทั้งหมดจะถูกส่งคืน

โบนัส: ถ้าเราต้องการที่จะไม่สนใจโฟลเดอร์ในไดเรกทอรีปัจจุบันเราก็สามารถค้นหาขนาดเมื่อisdir == FALSE: x=file.info(y<-dir());y[x$s==min(x$s[!x$i])]ซึ่งกลายเป็น 44 ไบต์


สายไปหน่อย แต่file.sizeสั้นกว่าเพราะคุณไม่ต้องทำ$sหลังจากนั้น
JAD


2

SmileBASIC ขนาด 110 ไบต์

DIM F$[0]FILES"TXT:",F$FOR I=0TO LEN(F$)-1F$[I][0]="TXT:
S=LEN(LOAD(F$[I],0))IF!Z||S<Z THEN Z=S:B=I
NEXT?F$[B]

ดูเฉพาะTXT:ไฟล์เนื่องจากDAT:ไฟล์ไม่สามารถโหลดได้จนกว่าคุณจะรู้ขนาดแล้วทำให้ไม่สามารถโหลดไฟล์แบบสุ่มได้


คุณโหลดDAT: ไฟล์ได้อย่างไร คุณสามารถเดรัจฉานบังคับทุกชื่อ / ขนาดไฟล์ในโฟลเดอร์?
Pavel

การพยายามโหลดDAT:ไฟล์3 มิติไปยังอาร์เรย์ 2 มิติ (ตัวอย่าง) จะทำให้เกิดข้อผิดพลาดดังนั้นคุณจึงไม่สามารถดุร้ายได้ คุณเพียงแค่ต้องรู้จำนวนมิติไว้ล่วงหน้าซึ่งตามปกติคุณจะทำได้
12Me21

คุณสามารถโหลดDAT: ไฟล์2 มิติลงในอาร์เรย์ 3 มิติได้หรือไม่? จากนั้นคุณสามารถสร้างขนาดสูงสุดได้ และคุณไม่สามารถตรวจจับข้อผิดพลาดได้ แต่อย่างใด?
Pavel

ไม่นั่นจะทำให้เกิดข้อผิดพลาดประเภทไม่ตรงกัน และไม่มีทางที่จะตรวจจับข้อผิดพลาดเช่นกัน
12Me21


1

C #, 277 ไบต์

ไม่ใช่สั้นที่สุด แต่คุณคาดหวังอะไรจาก C #

แข็งแรงเล่นกอล์ฟ

using System.Linq;using static System.IO.Directory;class P{static void Main(){var x=GetFiles(GetCurrentDirectory());var d=new long[]{}.ToList();foreach(var s in x){var b=new System.IO.FileInfo(s).Length;if(!d.Contains(b))d.Add(b);}System.Console.Write(x[d.IndexOf(d.Min())]);}}

Ungolfed

//Linq using for List.Min()
using System.Linq;
//Static using to save bytes on GetCurrentDirectory() and GetFiles()
using static System.IO.Directory;

class P
{
    static void Main()
    {
        //String array containing file paths
        var x = GetFiles(GetCurrentDirectory());
        //Creating a Long array and converting it to a list, less bytes than "new System.Collections.Generic.List<long>()"
        var d = new long[] { }.ToList();
        foreach (var s in x) //Loop through all file paths
        {
            //Getting file size in bytes
            var b = new System.IO.FileInfo(s).Length;
            if (!d.Contains(b))
                //If there isn't already a file with this size in our List, add the file path to list
                d.Add(b);

        }
        //Get index of the smallest Long in our List, which is also the index of the file path to the smallest file, then write that path
        System.Console.Write(x[d.IndexOf(d.Min())]);
    }
}

1

Röda , 32 31 ไบต์

{ls""|sort key=fileLength|pull}

มันเป็นฟังก์ชั่นนิรนามที่เรียงลำดับไฟล์ในไดเรกทอรีปัจจุบันตามความยาวไฟล์และเลือกไฟล์แรกด้วย pullมันเป็นฟังก์ชั่นที่ไม่ระบุชื่อที่เรียงไฟล์ในไดเรกทอรีปัจจุบันโดยความยาวของไฟล์และเลือกแล้วไฟล์แรกด้วย

ใช้แบบนี้: main{ {ls""|sort key=fileLength|pull} }


เห็นได้ชัดว่าls""ทำงานได้ดีเช่นls"."กัน ฉันคิดว่าคุณสามารถบันทึกไบต์จากนั้น
Kritixi Lithos

@KritixiLithos ดูเหมือนว่าจะ ขอบคุณ!
fergusq

0

SmileBASIC 3, 105 ไบต์ (แข่งขันกัน)

เอาชนะคำตอบของ 12Me21แต่ยังคงทุกข์ทรมานจากการไม่สามารถโหลดไฟล์ DAT (ซึ่งรู้สึกโหดร้ายมากที่จะถูกตัดสิทธิ์เมื่อพิจารณาถึงสถานการณ์)

DIM F$[0],T[0]FILES"TXT:",F$FOR I=0TO LEN(F$)-1F$[I][0]="TXT:
PUSH T,LEN(LOAD(F$[I]))NEXT
SORT T,F$?F$[0]

เวอร์ชั่นที่สั้นกว่านั้นน่ารำคาญและแจ้งให้คุณโหลดทุกไฟล์ อีกสองไบต์คุณสามารถระงับพรอมต์ได้ เปลี่ยน line 2 เป็น:

PUSH T,LEN(LOAD(F$[I],0))NEXT

0

ไฟล์แบตช์ 33 ไบต์

ไฟล์แบทช์มีการแข่งขันในระดับปานกลางในครั้งนี้พอสมควร

@dir/os/b>..\q&set/pa=<..\q&"%a%.

เอาท์พุต

ป้อนคำอธิบายรูปภาพที่นี่


ค้นหาวิธีที่จะหยุดการสร้างqก่อนที่จะdir/os/bถูกเรียกใช้และคุณจะบันทึกได้สูงสุด 6 ไบต์โดยไม่จำเป็นต้องวางไฟล์เอาต์พุตในไดเรกทอรีแยกต่างหาก

@dir/os/b>q&set/pa=<q&"%a%

จะส่งออกqเป็นไฟล์ที่เล็กที่สุดเสมอ(เว้นแต่เชื่อมโยงกับไฟล์ 0 ไบต์อื่น) เนื่องจากสร้างเป็นไฟล์ว่างก่อนdir/b/osรวบรวมรายการไฟล์


0

C ++ 17 (gcc) , 180 ไบต์

#include<filesystem>
using namespace std::filesystem;auto f(){std::error_code e;path r;size_t m=-1,s;for(auto&p:directory_iterator(".")){s=file_size(p,e);if(s<m)m=s,r=p;}return r;}

ลองออนไลน์!

std::filesystemต้องใช้ห้องสมุดมาตรฐานล่าสุดที่ดำเนินการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.