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 Code-Golf ; kürzeste Antwort (in Bytes) gewinnt.
code-golf
file-system
12Me21
quelle
quelle
Antworten:
Vim 12 Bytes
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.!!rev
um die aktuelle Zeile umzukehren oder!Gxxd
den 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
Aber wir können es besser machen. Wie ich in diesem Tipp erklärt habe ,
{
kann das normalerweise (aber nicht immer) gleichbedeutend sein mitgg
. Hier ist es noch besser. Da die Bewegung zeichenbasierte , nicht zeilenorientiert wiegg
ist, müssen wir zunächst eine Linie nicht steigen, so dass uns mitquelle
Bash + Coreutils, 13 Bytes
Erläuterung:
quelle
ls -1Sa|tail -1
ist 3 Bytes kürzer und hat eine sauberere Ausgabe.ls
erkannt 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 Siels
vsls|cat
ls -Sar|sed q
Python
23,94767454 Bytes-18 Bytes dank @orlp
-2 Bytes dank @Jonathan Allan
-20 Bytes dank einer Änderung der Herausforderungsspezifikationen
quelle
print min(filter(path.isfile,listdir(".")),key=path.getsize)
ist sauberer und wesentlich kürzer."."
die Standardeinstellung ist.print(min(filter(path.isfile,listdir()),key=path.getsize))
wc
denen ich 1 Byte mehr habefilter
Abfrage dahingehend aktualisiert wurde, dass keine Unterverzeichnisse vorhanden sind, ist das gesamte Bit nicht erforderlich. Dies funktioniert auch in Python 3 nicht, daprint
es sich um eine Funktion handelt. Das Folgende würde funktionieren und wesentlich kürzer sein:print(min(listdir(),key=path.getsize))
PowerShell ,
302421 ByteProbieren Sie es online!
ls
ist ein Alias fürGet-ChildItem
. Das istsort-object
mit demlength
Attribut 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.Name
davon. Die implizite AusgabeWrite-Output
erfolgt bei Programmabschluss.6 Bytes gespart, da garantiert nur Dateien im Verzeichnis vorhanden sind. Dank ConnorLSW wurden weitere 3 gespart.
quelle
-file
da sich nur Dateien im aktuellen Verzeichnis befinden?sort le*
einige Bytes rasieren, da Powershell dies akzeptiert.Ruby,
61403837 BytesVielen Dank GB und Value Ink
quelle
Dir.foreach(?.).min_by{|x|File.size x}
erhält das gleiche Ergebnis in 38 Bytes.Dir[?*]
viel kürzer sind, aber keine versteckten Unix-Dateien wie.bash_profile
...Dir[?*,".*"]
. Glob-Zeichenfolge.?*
stimmt nicht mit Datei überein,.a
falls vorhanden.Mathematica, 35 Bytes
FileNames[]
Erzeugt eine Liste der Namen aller Dateien (und Verzeichnisse) im aktuellen Verzeichnis.~MinimalBy~FileByteCount
Wählt den Namen der Datei aus, deren Byteanzahl am kleinsten ist.FileByteCount
Wirft eine Reihe von Fehlern, wenn es auf Verzeichnisse angewendet wird, aber die Fehler entgleisen das Programm nicht.quelle
Java 7,
149142 BytesProbieren Sie es online!
-7 Bytes dank CAD97
quelle
()->java.utils.stream(new java.io.File(".").listFiles()).max((a,b)->a.length()-b.length).get().getName()
für 104 BytesSH (Linux / Unix)
15141314 Byte-S
sortiert nach Größe (absteigend),-r
Kehrttail -1
die letzte Datei in der Listeumund gibt sie aus.@ Dennis Danke für das Speichern von 1 Byte @Dani_l Danke für das Speichern von 1 Byte.
quelle
tail
anstelle der Umkehrung verwenden, und-1
ist eine Abkürzung für-n1
.MATLAB / Octave,
5248 BytesErläuterung
Dies ruft eine Verzeichnisliste aller Dateien und Ordner im aktuellen Verzeichnis ab, die verwendet werden
dir
. Die Ausgabe vondir
astruct
enthä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]
,Inf
und ansonsten die Größe in Bytes (Division durch 1).Wir finden den Index des Minimums dieses Arrays anhand der zweiten Ausgabe von
min
und verwenden diesen, um in die ursprüngliche Struktur zu indexieren und den Namen mit anzuzeigend(n).name
quelle
disp(...)
um die Ausgabe hinzufügen, um sie richtig zu drucken. Wenn es zum Beispiel eine Datei mit dem Namenans
gibt, 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.ans =
in.
(aktuelle..
Verzeichnis ) und das (übergeordnete Verzeichnis) hinzufügt. Daher kann die Verzeichnisprüfung anscheinend nicht entfernt werden. Das tut mir leid.Scala, 52 Bytes
Alte Version, 79 Bytes
Angepasst gemäß den Empfehlungen von jaxad0127. Es sind jetzt nur noch 52 Bytes.
quelle
Batch,
433935 BytesDie 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.
quelle
/a-d
.Perl 6 ,
33 32 3116 BytesVersuch es
Versuch es
Versuch es
Versuch es
Erweitert:
quelle
dir
standardmäßig$*CWD
und die Aufgabenbeschreibung besagt, dass Sie davon ausgehen können, dass es keine Ordner gibt. Ich denke, Sie können dies auf verkürzendir.min(*.s).put
.J ,
21-20BytesEin Byte dank @ Conor gespeichert .
Erläuterung
quelle
BATCH-Datei,
777263 BytesZumindest meines Wissens gibt es kein direktes Äquivalent zu
head
odertail
in BATCH. (Mit viel Unterstützung von @Neil - danke!)Der
dir
Befehl, mit/o-s
dem in absteigender Dateigröße sortiert und/b
nur die Dateinamen ausgegeben werden. Wir durchlaufen diese mitFOR /F
und setzen die VariableF
jedes Mal auf den Dateinamen. Schließlich geben wir nur den letzten mit ausECHO %F%
.Dank Neil und der Garantie, dass keine Verzeichnisse vorhanden sind, 9 weitere Bytes eingespart.
quelle
FOR
Variable benötigt zwei%
Sekunden, um in einem Skript zu arbeiten. Ansonsten ein paar Golf-Tricks: 1. Nicht@ECHO OFF
für kurze Skripte verwenden, sondern@
zu jeder Zeile und danach ein hinzufügenDO
. 2. Löschen Sie das Leerzeichen zuvorDO
. 3. Die Leerzeichen und:
s werden imdir
Befehl nicht benötigt .PHP,
8462 BytesDa 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:
Das ist das Beste, was ich tun kann. Vielleicht gibt es einen besseren Weg, den ich vermisse.
quelle
Node.js (using
walk
), 114 ByteZeilenumbruch ignorieren:
Dies ruft einen Walker auf, der das aktuelle Verzeichnis (
__dirname
) durchläuft, und ruft für jede Datei eine Funktion mit ihrem Statuss
und eine weitere Funktion aufn()
, die aufgerufen werden muss, um den Durchlauf fortzusetzen. Dann gibt es amend
einen Dateinamen mit dem gefundenen Minimumsize
in Bytes aus.s.size>m.size
kehrt ,false
wennm.size
istundefined
, so dass nach dem ersten Rückruf,m
ist gleich die erste Datei gefunden, und von dort weiter wie gewohnt.quelle
R, 36 Bytes
Erklärt
file.info()
Gibt einedata.frame
der "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:Anschließend müssen wir nur den Namen der Datei finden, für die die
size
Spalte (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.quelle
file.size
kürzer, weil Sie danach nichts mehr tun müssen$s
.Tcl , 88 Bytes
Probieren Sie es online!
quelle
SmileBASIC, 110 Bytes
Betrachtet nur
TXT:
Dateien, daDAT:
Dateien nur geladen werden können, wenn Sie ihre Größe bereits kennen, so dass es unmöglich ist, eine zufällige zu laden.quelle
DAT:
Datei? Könnten Sie jeden Namen / jede Dateigröße im Ordner brachial erzwingen?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.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?Groovy , 49 Bytes
Probieren Sie es online!
Schließung, Nutzung:
m(new File("location"))
quelle
C #, 277 Bytes
Nicht die kürzeste, aber was würden Sie von C # erwarten?
Golf gespielt
Ungolfed
quelle
Röda ,
3231 BytesEs 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} }
quelle
ls""
genauso gut wiels"."
. Ich denke, Sie können ein Byte davon rettenSmileBASIC 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.)
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:
quelle
Batch-Datei, 33 Bytes
Batch-Dateien sind diesmal seltsamerweise mäßig wettbewerbsfähig.
Ausgabe
Suchen Sie nach einer Möglichkeit, die Erstellung
q
vordir/os/b
der Ausführung zu stoppen , und Sie können maximal 6 Bytes einsparen, indem Sie die Ausgabedatei nicht in einem separaten Verzeichnis ablegen müssen.Wird immer
q
als kleinste Datei ausgegeben (sofern nicht für eine andere 0-Byte-Datei gebunden), da sie als leere Datei erstellt wird, bevordir/b/os
eine Liste von Dateien zusammengestellt wird.quelle
C ++ 17 (gcc) , 180 Bytes
Probieren Sie es online!
Erfordert eine aktuelle Standardbibliothek, die implementiert wird
std::filesystem
.quelle
Zsh ,
1814 BytesProbieren Sie es online!Probieren Sie es online!(D)
Globs Dotfiles(oL)
sortiert nach Größe[1]
Wählt die erste Übereinstimmung ausquelle