Finde die kleinste Datei

19

Tor:

Erstellen Sie ein Programm, um die kleinste Datei im aktuellen Ordner zu finden.

  • Die Dateigröße kann in Bytes oder Zeichen angegeben werden.
  • Wenn mehrere Dateien dieselbe Größe haben, können Sie entweder eine auswählen oder alle anzeigen.
  • Sie können davon ausgehen, dass sich mindestens eine Datei im Ordner befindet und keine Datei eine Größe von 0 hat.
  • Angenommen, alle Dateien im Ordner können von der von Ihnen verwendeten Sprache geladen werden.

  • Angenommen, das aktuelle Verzeichnis enthält keine Ordner.

Eingang:

Das Programm sollte keine Eingaben vom Benutzer entgegennehmen, es sei denn:

  • Wenn Ihre Sprache keinen "aktuellen Ordner" hat, wird der Benutzer möglicherweise nach einem Ordnernamen / -pfad gefragt.
  • Wenn Ihre Sprache nicht direkt auf Dateien auf Ihrem Computer zugreifen kann, kann der Benutzer möglicherweise Dateien hochladen. (Zum Beispiel JavaScript)

Ausgabe:

Der Name der kleinsten Datei sollte angezeigt werden.

  • Führende / nachfolgende Symbole sind zulässig, solange klar ist, welche Datei ausgewählt wurde.
  • (Das Drucken einer Liste aller Dateien verstößt gegen die Regeln.)

Anmerkungen:

  • Standardlücken sind nicht erlaubt.
  • Sie können keine Dateien im Ordner ändern, erstellen oder löschen, um das Ergebnis zu ändern.
  • Das ist ; kürzeste Antwort (in Bytes) gewinnt.
12Me21
quelle
1
Können wir Dateien übernehmen können eine Größe von 0 haben?
27.
Was bedeutet außerdem, dass auf alle Dateien im Ordner zugegriffen werden kann? Bedeutet das, dass versteckte Dateien nicht angezeigt werden müssen?
27.
2
Kann ich davon ausgehen, dass sich im aktuellen Ordner keine Ordner befinden? Es macht den Unterschied, ob Sie eine Sprachfunktion haben, die sowohl Dateien als auch Ordner anstatt nur Dateien zurückgibt!
Sergiol
1
Nicht unbedingt. Sie können davon ausgehen, dass sich im aktuellen Verzeichnis keine Verzeichnisse befinden, die eindeutig sind und keine Antworten ungültig machen.
Dennis
1
(Entschuldigung, ich habe nicht früher geantwortet, meine Internetverbindung war für ein paar Tage unterbrochen.) Das Problem, das ich habe, wenn ich Ihnen erlaube, versteckte Dateien zu überspringen, ist, dass es eine Menge Schlupflöcher zu öffnen scheint. Wenn Sie Dateien überspringen, auf die "etwas schwerer zugegriffen werden kann", können die Benutzer beispielsweise nur die ersten 9 Dateien überprüfen, da dadurch einige Bytes gespart werden.
12. Mai,

Antworten:

7

Vim 12 Bytes

!!ls -Sa
Gd{

Probieren Sie es online!

Erläuterung:

!!ist der Filterbefehl . Es leitet den Inhalt der aktuellen Zeile an einen beliebigen Systembefehl weiter und sendet die Ausgabe zurück in den Puffer. Es ist nützlich, um externe Tools für Dinge zu verwenden, in denen bash besser ist als vim, z. B. !!revum die aktuelle Zeile umzukehren oder !Gxxdden Puffer zu verhexen. In unserem Fall ist der Puffer leer und entspricht dem :r!ls, was die Ausgabe des Befehls in die aktuelle Zeile einspeist.

Jetzt befindet sich der Cursor in Zeile 1, und wir möchten jede Zeile außer der letzten löschen. Der naive Ansatz ist

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

Aber wir können es besser machen. Wie ich in diesem Tipp erklärt habe , {kann das normalerweise (aber nicht immer) gleichbedeutend sein mit gg. Hier ist es noch besser. Da die Bewegung zeichenbasierte , nicht zeilenorientiert wie ggist, müssen wir zunächst eine Linie nicht steigen, so dass uns mit

Gd{
DJMcMayhem
quelle
16

Bash + Coreutils, 13 Bytes

ls -Sar|sed q

Erläuterung:

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.         
Rɪᴋᴇʀ
quelle
Gepostet dies als meine eigene Antwort, aber ich denke, es ist zu ähnlich wie bei Ihnen. ls -1Sa|tail -1ist 3 Bytes kürzer und hat eine sauberere Ausgabe.
Orlp
@orlp danke! ..
Rɪᴋᴇʀ
1
Ich glaube nicht, dass Sie das '-1' brauchen. Die Pipe fügt automatisch eine Datei pro Zeile ein.
GB
@EasterlyIrk Ich denke, GB ist richtig. Wenn lserkannt wird, dass die Ausgabe an das Terminal gesendet wird, wird die Ausgabe in mehrere Spalten unterteilt. Wenn es sich bei der Ausgabe jedoch um eine Pipe handelt, wird nur 1 pro Zeile ausgegeben. Vergleichen Sie lsvsls|cat
Digital Trauma
Zwei Bytes kürzer:ls -Sar|sed q
Digitales Trauma
8

Python 2 3, 94 76 74 54 Bytes

-18 Bytes dank @orlp
-2 Bytes dank @Jonathan Allan
-20 Bytes dank einer Änderung der Herausforderungsspezifikationen

from os import*
print(min(listdir(),key=path.getsize))
ovs
quelle
print min(filter(path.isfile,listdir(".")),key=path.getsize)ist sauberer und wesentlich kürzer.
Orlp
Speichern Sie zwei Bytes in Python 3, da dies "."die Standardeinstellung ist. print(min(filter(path.isfile,listdir()),key=path.getsize))
Jonathan Allan
Auch ich zähle 76 nicht 77.
Jonathan Allan
@JonathanAllan Ich habe die Anzahl der Bytes gemessen, mit wcdenen ich 1 Byte mehr habe
ovs
Das fremde Byte wäre auf eine nachgestellte Zeile zurückzuführen, die für Python nicht erforderlich ist. Da die filterAbfrage dahingehend aktualisiert wurde, dass keine Unterverzeichnisse vorhanden sind, ist das gesamte Bit nicht erforderlich. Dies funktioniert auch in Python 3 nicht, da printes sich um eine Funktion handelt. Das Folgende würde funktionieren und wesentlich kürzer sein:print(min(listdir(),key=path.getsize))
Mego
8

PowerShell , 30 24 21 Byte

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

Probieren Sie es online!

lsist ein Alias ​​für Get-ChildItem. Das ist sort-objectmit dem lengthAttribut weitergeleitet, so dass die Dateien nach Größe sortiert sind. Wir indizieren das mit (...)[0], um das erste (dh das kleinste) zu erhalten und nehmen dann das .Namedavon. Die implizite Ausgabe Write-Outputerfolgt bei Programmabschluss.

6 Bytes gespart, da garantiert nur Dateien im Verzeichnis vorhanden sind. Dank ConnorLSW wurden weitere 3 gespart.

AdmBorkBork
quelle
2
Können Sie die nicht loswerden, -fileda sich nur Dateien im aktuellen Verzeichnis befinden?
Mutantoe
@Mutantoe Ja - das wurde bearbeitet, nachdem ich diese Antwort gepostet habe. Vielen Dank!
AdmBorkBork
Mit können Sie sort le*einige Bytes rasieren, da Powershell dies akzeptiert.
Colsw
@ConnorLSW Ja, natürlich. Vielen Dank!
AdmBorkBork
7

Ruby, 61 40 38 37 Bytes

Vielen Dank GB und Value Ink

p Dir[?*,".*"].min_by{|x|File.size x}
dkudriavtsev
quelle
Sie können verwenden? anstelle von Dir.pwd und min_by {}, um die kleinste Datei zu erhalten. Dir.foreach(?.).min_by{|x|File.size x}erhält das gleiche Ergebnis in 38 Bytes.
GB
@GB Dank!
dkudriavtsev
Es ist eine Schande, dass "alle" Dateien, auf die die Sprache zugreifen kann, überprüft werden müssen, da sie Dir[?*]viel kürzer sind, aber keine versteckten Unix-Dateien wie .bash_profile...
Value Ink
Vielleicht könnte Dir [? *, ".? *"] Funktionieren. Ich habe es nicht versucht. Und es ist kürzer.
GB
@GB Eigentlich wäre es so Dir[?*,".*"]. Glob-Zeichenfolge .?*stimmt nicht mit Datei überein, .afalls vorhanden.
Value Ink
6

Mathematica, 35 Bytes

FileNames[]~MinimalBy~FileByteCount

FileNames[]Erzeugt eine Liste der Namen aller Dateien (und Verzeichnisse) im aktuellen Verzeichnis. ~MinimalBy~FileByteCountWählt den Namen der Datei aus, deren Byteanzahl am kleinsten ist. FileByteCountWirft eine Reihe von Fehlern, wenn es auf Verzeichnisse angewendet wird, aber die Fehler entgleisen das Programm nicht.

Greg Martin
quelle
6

Java 7, 149 142 Bytes

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;}

Probieren Sie es online!

-7 Bytes dank CAD97

Sack
quelle
Ich denke, Sie wollen File :: Länge nicht File :: getTotalSpace
CAD97
Ungetestetes Java 8: ()->java.utils.stream(new java.io.File(".").listFiles()).max((a,b)->a.length()-b.length).get().getName()für 104 Bytes
CAD97
@ CAD97 Du hast recht! Was dachte ich ...
Poke
6

SH (Linux / Unix) 15 14 13 14 Byte

ls -aS|tail -1

-S sortiert nach Größe (absteigend),

-rKehrttail -1 die letzte Datei in der Liste um und gibt sie aus.

@ Dennis Danke für das Speichern von 1 Byte @Dani_l Danke für das Speichern von 1 Byte.

Abel Tom
quelle
Das findet die größte Datei, nicht wahr?
Dennis
Vergiss nicht, ich bin müde. Sie können jedoch tailanstelle der Umkehrung verwenden, und -1ist eine Abkürzung für -n1.
Dennis
@ Tennis aktualisiert
Abel Tom
@EasterlyIrk Nun sollte es :)
Abel Tom
@AbelTom cool, danke fürs reparieren.
29.
4

MATLAB / Octave, 52 48 Bytes

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

Erläuterung

Dies ruft eine Verzeichnisliste aller Dateien und Ordner im aktuellen Verzeichnis ab, die verwendet werden dir. Die Ausgabe von dira structenthält den Dateinamen, ob es sich um ein Verzeichnis handelt oder nicht, die Größe (in Bytes) usw.

Wir können dann ein Array mit der Größe jedes Bytes nehmen [d.bytes]und eine elementweise Division mit einem Booleschen Wert durchführen, der angibt, ob es sich um ein Verzeichnis handelt oder nicht ~[d.isdir], Infund ansonsten die Größe in Bytes (Division durch 1).

Wir finden den Index des Minimums dieses Arrays anhand der zweiten Ausgabe von minund verwenden diesen, um in die ursprüngliche Struktur zu indexieren und den Namen mit anzuzeigend(n).name

Suever
quelle
Sie sollten disp(...)um die Ausgabe hinzufügen, um sie richtig zu drucken. Wenn es zum Beispiel eine Datei mit dem Namen ansgibt, die nicht die kleinste im Ordner ist, wäre die Ausgabe nicht klar, welche Datei für jemanden, der mit MATLAB nicht vertraut ist, die kleinste ist.
Tom Carpenter
@TomCarpenter Hmmm Ich interpretierte "Führende / nachfolgende Symbole sind erlaubt, solange klar ist, welche Datei ausgewählt wurde", um zu bedeuten, dass das ans = in
Ordnung
Ich habe gerade festgestellt, dass MATLAB das implizite .(aktuelle ..Verzeichnis ) und das (übergeordnete Verzeichnis) hinzufügt. Daher kann die Verzeichnisprüfung anscheinend nicht entfernt werden. Das tut mir leid.
Tom Carpenter
4

Scala, 52 Bytes

Alte Version, 79 Bytes

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

Angepasst gemäß den Empfehlungen von jaxad0127. Es sind jetzt nur noch 52 Bytes.

new java.io.File(".").listFiles.sortBy(_.length)head
Aria Axe
quelle
Die Verwendung von head anstelle von apply (0) ist kürzer. Auch die toString-Methode von File ist in Ordnung, get name muss nicht aufgerufen werden.
Jaxad0127
4

Batch, 43 39 35 Bytes

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

Die Ausgabe enthält aus irgendeinem Grund ein führendes Leerzeichen, was jedoch zum Glück zulässig ist. Bearbeiten: Angenommen, es gibt keine Verzeichnisse zum Speichern von 4 Bytes.

Neil
quelle
Oh, benutze / p so, verdammt schlau!
AdmBorkBork
@AdmBorkBork Ah, ich hatte nicht bemerkt, dass das erlaubt war, danke!
Neil
Es ist garantiert, dass keine Unterverzeichnisse vorhanden sind (die Abfrage wurde aktualisiert), sodass Sie die entfernen können /a-d.
AdmBorkBork
4

Perl 6 ,  33 32 31  16 Bytes

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

Versuch es

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

Versuch es

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

Versuch es

put dir.min: *.s

Versuch es

Erweitert:

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
Brad Gilbert b2gills
quelle
Die Funktionsform lautet dirstandardmäßig $*CWDund die Aufgabenbeschreibung besagt, dass Sie davon ausgehen können, dass es keine Ordner gibt. Ich denke, Sie können dies auf verkürzen dir.min(*.s).put.
smls
Als ich das schrieb, hieß es, das Programm müsse Ordner ignorieren.
Brad Gilbert b2gills
4

J , 21-20 Bytes

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

Ein Byte dank @ Conor gespeichert .

Erläuterung

>{.,(/: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
Meilen
quelle
@ ConorO'Brien Danke
Meilen
3

BATCH-Datei, 77 72 63 Bytes

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

Zumindest meines Wissens gibt es kein direktes Äquivalent zu headoder tailin BATCH. (Mit viel Unterstützung von @Neil - danke!)

Der dirBefehl, mit /o-sdem in absteigender Dateigröße sortiert und /bnur die Dateinamen ausgegeben werden. Wir durchlaufen diese mit FOR /Fund setzen die Variable Fjedes Mal auf den Dateinamen. Schließlich geben wir nur den letzten mit aus ECHO %F%.

Dank Neil und der Garantie, dass keine Verzeichnisse vorhanden sind, 9 weitere Bytes eingespart.

AdmBorkBork
quelle
1
Ihre FORVariable benötigt zwei %Sekunden, um in einem Skript zu arbeiten. Ansonsten ein paar Golf-Tricks: 1. Nicht @ECHO OFFfür kurze Skripte verwenden, sondern @zu jeder Zeile und danach ein hinzufügen DO. 2. Löschen Sie das Leerzeichen zuvor DO. 3. Die Leerzeichen und :s werden im dirBefehl nicht benötigt .
Neil
1
@ Neil Ack, danke. Entschuldigung, ziemlich rostig, seit ich PowerShell mache ... Danke!
AdmBorkBork
3

PHP, 84 62 Bytes

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

Da die Frage mit der Annahme aktualisiert wurde, dass sich keine Ordner im aktuellen Verzeichnis befinden, konnte ich das Dateiprüfmaterial entfernen und dieses herunterfahren.


Hier ist meine alte Antwort:

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

Das ist das Beste, was ich tun kann. Vielleicht gibt es einen besseren Weg, den ich vermisse.

$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
Kodos Johnson
quelle
2

Node.js (using walk), 114 Byte

Zeilenumbruch ignorieren:

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))

Dies ruft einen Walker auf, der das aktuelle Verzeichnis ( __dirname) durchläuft, und ruft für jede Datei eine Funktion mit ihrem Status sund eine weitere Funktion auf n(), die aufgerufen werden muss, um den Durchlauf fortzusetzen. Dann gibt es am endeinen Dateinamen mit dem gefundenen Minimum sizein Bytes aus. s.size>m.sizekehrt , falsewenn m.sizeist undefined, so dass nach dem ersten Rückruf, mist gleich die erste Datei gefunden, und von dort weiter wie gewohnt.

Patrick Roberts
quelle
2

R, 36 Bytes

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

Erklärt

file.info()Gibt eine data.frameder "Dateiinformationen" zurück, wenn ein Zeichen oder ein Zeichenvektor für Datei- / Ordnernamen angegeben wird, die in der Liste der Dateien / Ordner im aktuellen Verzeichnis ( dir()) ungefähr so ​​aussehen:

                                                               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

Anschließend müssen wir nur den Namen der Datei finden, für die die sizeSpalte (abgekürzt mit $s) die kleinste ist. Wenn es also mehr als eine Datei mit der kleinsten Größe gibt, werden alle zurückgegeben.

Bonus: Wenn wir auch die Ordner im aktuellen Verzeichnis ignorieren wollten, konnten wir einfach nach der Größe suchen, wenn isdir == FALSE: x=file.info(y<-dir());y[x$s==min(x$s[!x$i])]die sich als 44 Bytes herausstellte.

Billywob
quelle
Etwas spät, aber file.sizekürzer, weil Sie danach nichts mehr tun müssen $s.
JAD
2

Tcl , 88 Bytes

set s Inf
lmap f [glob -ty f *] {if [set m [file si $f]]<$s {set n $f
set s $m}}
puts $n

Probieren Sie es online!

Sergiol
quelle
2

SmileBASIC, 110 Bytes

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]

Betrachtet nur TXT:Dateien, da DAT:Dateien nur geladen werden können, wenn Sie ihre Größe bereits kennen, so dass es unmöglich ist, eine zufällige zu laden.

12Me21
quelle
Wie lade ich eine DAT: Datei? Könnten Sie jeden Namen / jede Dateigröße im Ordner brachial erzwingen?
Pavel
Der Versuch, eine dreidimensionale DAT:Datei in ein zweidimensionales Array zu laden (zum Beispiel), führt zu einem Fehler, sodass Sie ihn nicht brachial erzwingen können. Sie müssen nur vorher die Anzahl der Dimensionen kennen, die Sie normalerweise kennen würden.
12. Mai,
Könnten Sie eine 2D- DAT: Datei in ein 3D-Array laden ? Dann könnten Sie ein Array mit maximaler Größe erstellen. Und Sie können in keiner Weise Fehler abfangen?
Pavel
Nein, das wird einen Typenkonfliktfehler verursachen. Und es gibt auch keine Möglichkeit, Fehler abzufangen.
12. Mai,
1

Groovy , 49 Bytes

m={f->f.listFiles().sort{it.length()}[0].getName()}

Probieren Sie es online!

Schließung, Nutzung: m(new File("location"))

Magische Kraken-Urne
quelle
1

C #, 277 Bytes

Nicht die kürzeste, aber was würden Sie von C # erwarten?

Golf gespielt

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())]);
    }
}
Metoniem
quelle
1

Röda , 32 31 Bytes

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

Es ist eine anonyme Funktion, die die Dateien im aktuellen Verzeichnis nach Dateilänge sortiert und dann die erste Datei mit auswählt pull.

Benutze es so: main{ {ls""|sort key=fileLength|pull} }

fergusq
quelle
Funktioniert anscheinend ls""genauso gut wie ls".". Ich denke, Sie können ein Byte davon retten
Kritixi Lithos
@KritixiLithos Es scheint zu. Vielen Dank!
Fergusq
0

SmileBASIC 3, 105 Bytes (im Wettbewerb?)

Beats 12Me21s Antwort , leidet aber immer noch an der Unfähigkeit, DAT-Dateien zu laden (was sich angesichts der Umstände sehr grausam anfühlt, disqualifiziert zu werden.)

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]

Die kürzere Version oben ist ärgerlich und fordert Sie auf, jede Datei zu laden, aber es funktioniert. Für zwei Bytes mehr können Sie die Eingabeaufforderung unterdrücken. Ändere Zeile 2 in diese:

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

Batch-Datei, 33 Bytes

Batch-Dateien sind diesmal seltsamerweise mäßig wettbewerbsfähig.

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

Ausgabe

Bildbeschreibung hier eingeben


Suchen Sie nach einer Möglichkeit, die Erstellung qvor dir/os/bder Ausführung zu stoppen , und Sie können maximal 6 Bytes einsparen, indem Sie die Ausgabedatei nicht in einem separaten Verzeichnis ablegen müssen.

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

Wird immer qals kleinste Datei ausgegeben (sofern nicht für eine andere 0-Byte-Datei gebunden), da sie als leere Datei erstellt wird, bevor dir/b/oseine Liste von Dateien zusammengestellt wird.

BDM
quelle
0

C ++ 17 (gcc) , 180 Bytes

#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;}

Probieren Sie es online!

Erfordert eine aktuelle Standardbibliothek, die implementiert wird std::filesystem.

G. Sliepen
quelle