Cel:
Utwórz program, aby znaleźć najmniejszy plik w bieżącym folderze.
- Rozmiar pliku może być mierzony w bajtach lub znakach.
- Jeśli wiele plików ma ten sam rozmiar, możesz wybrać jeden lub wyświetlić wszystkie.
- Możesz założyć, że w folderze będzie co najmniej jeden plik i żaden plik nie będzie miał rozmiaru 0.
Załóżmy, że wszystkie pliki w folderze można załadować według używanego języka.
Załóżmy, że w bieżącym katalogu nie ma folderów.
Wejście:
Program nie powinien pobierać żadnych danych od użytkownika, chyba że:
- Jeśli twój język nie ma „bieżącego folderu”, może poprosić użytkownika o nazwę / ścieżkę folderu.
- Jeśli twój język nie może uzyskać bezpośredniego dostępu do plików na twoim komputerze, może zezwolić użytkownikowi na przesyłanie plików. (Na przykład JavaScript)
Wynik:
Powinna zostać wyświetlona nazwa najmniejszego pliku.
- Dopuszczalne są symbole wiodące / końcowe, o ile wiadomo, który plik został wybrany.
- (Drukowanie listy wszystkich plików jest niezgodne z regułami).
Uwagi:
- Standardowe luki są niedozwolone.
- Nie można modyfikować / tworzyć / usuwać plików w folderze, aby zmienić wynik.
- To jest golf golfowy ; najkrótsza odpowiedź (w bajtach) wygrywa.
code-golf
file-system
12Me21
źródło
źródło
Odpowiedzi:
Vim 12 bajtów
Wypróbuj online!
Wyjaśnienie:
!!
to polecenie filtru . Potokuje zawartość bieżącego wiersza do dowolnego polecenia systemowego i wysyła dane wyjściowe z powrotem do bufora. Jest to przydatne do używania zewnętrznych narzędzi do rzeczy, w których bash jest lepszy niż vim, na przykład!!rev
do odwrócenia bieżącej linii lub!Gxxd
do heksdumpa bufora. W naszym przypadku bufor jest pusty, więc jest równoważny z:r!ls
, który po prostu podaje dane wyjściowe polecenia do bieżącego wiersza.Teraz kursor znajduje się na linii 1 i chcemy usunąć każdą linię oprócz ostatniej. Naiwnym podejściem jest
Ale możemy zrobić lepiej. Jak wyjaśniłem w tym poradniku , zwykle
{
może (ale nie zawsze) być równoważne . Tutaj jest jeszcze lepiej. Ponieważ ruch jest znakowym , a nie linia oparte jak jest, nie musimy iść w górę linię pierwszy, zostawiając nas zgg
gg
źródło
Bash + coreutils, 13 bajtów
Wyjaśnienie:
źródło
ls -1Sa|tail -1
jest 3 bajty krótszy i ma czystszy wynik.ls
wykryje wyjście do terminala, sformatuje dane wyjściowe w wiele kolumn. Ale jeśli wyjście jest potokiem, wykona tylko 1 na linię. Porównajls
vsls|cat
ls -Sar|sed q
Python
23,94767454 bajtów-18 bajtów dzięki @orlp
-2 bajtów dzięki @Jathanathan Allan
-20 bajtów dzięki zmianie specyfikacji wyzwania
źródło
print min(filter(path.isfile,listdir(".")),key=path.getsize)
jest czystszy i znacznie krótszy."."
jest to ustawienie domyślne.print(min(filter(path.isfile,listdir()),key=path.getsize))
wc
czemu otrzymałem 1 bajt więcejfilter
bit jest niepotrzebny. To również nie działa w Pythonie 3, ponieważprint
jest funkcją. Następujące elementy działałyby i były znacznie krótsze:print(min(listdir(),key=path.getsize))
PowerShell ,
302421 bajtówWypróbuj online!
ls
jest pseudonimem dlaGet-ChildItem
. Jest to powiązanesort-object
zlength
atrybutem, więc pliki są sortowane według rozmiaru. Indeksujemy to za pomocą,(...)[0]
aby uzyskać pierwszy (tzn. Najmniejszy), a następnie wziąć to.Name
. Wyjście za pośrednictwem niejawnegoWrite-Output
następuje po zakończeniu programu.Zapisano 6 bajtów, ponieważ mamy gwarancję, że w katalogu istnieją tylko pliki. Zapisano dodatkowe 3 dzięki ConnorLSW.
źródło
-file
ponieważ tylko pliki znajdują się w bieżącym katalogu?sort le*
do golenia niektórych bajtów, ponieważ PowerShell je zaakceptuje.Rubin,
61403837 bajtówDzięki GB i Value Ink
źródło
Dir.foreach(?.).min_by{|x|File.size x}
otrzymuje ten sam wynik w 38 bajtach.Dir[?*]
są znacznie krótsze, ale nie obejmują ukrytych plików uniksowych, takich jak.bash_profile
...Dir[?*,".*"]
. Ciąg glob.?*
nie będzie pasował do pliku,.a
jeśli istnieje.Mathematica, 35 bajtów
FileNames[]
tworzy listę nazw wszystkich plików (i katalogów) w bieżącym katalogu;~MinimalBy~FileByteCount
wybiera nazwę pliku, którego liczba bajtów jest najmniejsza.FileByteCount
zgłasza wiele błędów, gdy jest stosowana do katalogów, ale błędy nie wykoleją programu.źródło
Java 7,
149142 bajtyWypróbuj online!
-7 bajtów dzięki CAD97
źródło
()->java.utils.stream(new java.io.File(".").listFiles()).max((a,b)->a.length()-b.length).get().getName()
dla 104 bajtówSH (Linux / Unix)
15141314 bajtów-S
sortuje według rozmiaru (malejąco),i-r
odwracatail -1
wyświetla ostatni plik na liście.@ Dennis Dzięki za zapisanie 1 bajtu @Dani_l Dzięki za zapisanie 1 bajtu.
źródło
tail
zamiast cofania i-1
jest to skrót-n1
.MATLAB / Octave,
5248 bajtówWyjaśnienie
Otrzymuje listę wszystkich plików i folderów w bieżącym katalogu za pomocą
dir
. Wyjściedir
jeststruct
zawierający nazwę pliku, czy jest to katalog lub nie, rozmiar (w bajtach), etc.Następnie możemy pobrać tablicę rozmiarów każdego z bajtów
[d.bytes]
i wykonać podział elementowy za pomocą logicznej wartości logicznej wskazującej, czy jest to katalog, czy nie,~[d.isdir]
która zwróciInf
katalog, w którym jest katalog (dzielenie przez zero), a wielkość w bajtach w przeciwnym razie (dzielenie przez 1).Znajdujemy indeks minimum tej tablicy za pomocą drugiego wyniku
min
i używamy go do indeksowania do początkowej struktury i wyświetlania nazwy za pomocąd(n).name
źródło
disp(...)
wokół wyjścia, aby poprawnie go wydrukować. W przeciwnym razie, jeśli na przykładans
byłby plik o nazwie, który nie jest najmniejszy w folderze, dane wyjściowe nie byłyby jasne, który plik jest najmniejszy dla każdego, kto nie zna MATLAB.ans =
jest w porządku.
(bieżący folder) i..
(folder powyżej), więc nie mogę usunąć sprawdzania katalogu. Przepraszam za to.Scala, 52 bajty
Stara wersja, 79 bajtów
Dostosowano zgodnie z radą jaxad0127. Teraz ma tylko 52 bajty.
źródło
Partia,
433935 bajtówDane wyjściowe zawierają z jakiegoś powodu wiodącą przestrzeń, ale na szczęście jest to dozwolone. Edycja: Teraz zakładając, że nie ma katalogów do zapisania 4 bajtów.
źródło
/a-d
.Perl 6 ,
33 32 3116 bajtówSpróbuj
Spróbuj
Spróbuj
Spróbuj
Rozszerzony:
źródło
dir
Domyślna forma funkcji to$*CWD
, a opis zadania mówi, że możesz założyć, że nie będzie żadnych folderów, więc myślę, że możesz to skrócićdir.min(*.s).put
.J ,
2120 bajtówZapisano bajt dzięki @ Conor .
Wyjaśnienie
źródło
Plik BATCH,
777263 bajtówNie ma bezpośredniego odpowiednika
head
lubtail
w BATCH, przynajmniej o ile mi wiadomo, więc tutaj jest nieprzyzwoite obejście. (przy dużej pomocy @Neil - dzięki!)Komenda ta
dir
służy/o-s
do sortowania według malejącego rozmiaru pliku i/b
do wyświetlania tylko nazw plików. Przechodzimy przez te zFOR /F
, ustawiając zmiennąF
na nazwę pliku za każdym razem. Na koniec wypisujemy tylko ostatnią zECHO %F%
.Zaoszczędził jeszcze 9 bajtów dzięki Neilowi i dzięki gwarancjom, że nie ma żadnych katalogów.
źródło
FOR
zmienna potrzebuje dwóch%
s do pracy w skrypcie. W przeciwnym razie kilka sztuczek golfowych: 1. Nie używaj@ECHO OFF
krótkich skryptów, dodaj@
do każdej linii i po niejDO
. 2. Usuń wcześniej spacjęDO
. 3. Spacje i:
s nie są potrzebne wdir
poleceniu.PHP,
8462 bajtyPonieważ pytanie zostało zaktualizowane przy założeniu, że w bieżącym katalogu nie będzie folderów, mogłem usunąć sprawdzanie plików i zagrać w golfa.
Oto moja stara odpowiedź:
To najlepsze, co mogłem zrobić. Może brakuje mi lepszego sposobu.
źródło
Node.js (za pomocą
walk
), 114 bajtówZignoruj nowy wiersz:
To wywołuje walkera, który przegląda bieżący katalog (
__dirname
) i dla każdego pliku wywołuje funkcję ze swoją stats
oraz funkcję,n()
którą należy wywołać, aby kontynuować przechodzenie. Następnieend
drukuje nazwę pliku z minimalną liczbąsize
znalezionych bajtów.s.size>m.size
zwracafalse
kiedym.size
jestundefined
, więc po pierwszym wywołaniu zwrotnymm
jest równe pierwszemu znalezionemu plikowi, i kontynuuje stamtąd normalnie.źródło
R, 36 bajtów
Wyjaśniono
file.info()
zwraca adata.frame
„informacji o pliku”, gdy otrzyma znak lub wektor znaków w nazwach plików / folderów, który, gdy jest używany na liście plików / folderów w bieżącym katalogu (dir()
), wygląda mniej więcej tak:Następnie musimy po prostu znaleźć nazwę pliku, dla którego
size
kolumna (w skrócie używając$s
) jest najmniejsza. W związku z tym, jeśli istnieje więcej niż jeden plik o najmniejszym rozmiarze, wszystkie zostaną zwrócone.Bonus: jeśli chcielibyśmy również zignorować foldery w bieżącym katalogu, moglibyśmy po prostu wyszukać rozmiar, gdy
isdir == FALSE
:x=file.info(y<-dir());y[x$s==min(x$s[!x$i])]
co okazuje się mieć 44 bajty.źródło
file.size
jest krótszy, ponieważ nie musisz$s
później robić .Tcl , 88 bajtów
Wypróbuj online!
źródło
SmileBASIC, 110 bajtów
Patrzy tylko na
TXT:
pliki, ponieważDAT:
plików nie można załadować, chyba że znasz już ich rozmiar, co uniemożliwia załadowanie losowego.źródło
DAT:
plik? Czy możesz użyć brutalnej siły dla każdej nazwy / rozmiaru pliku w folderze?DAT:
pliku do 2-wymiarowej tablicy (na przykład) spowoduje błąd, więc nie możesz go brutalnie wymusić. Musisz tylko znać wcześniej liczbę wymiarów, co normalnie byś zrobił.DAT:
do tablicy 3-d? Następnie możesz utworzyć tablicę o maksymalnym rozmiarze. I nie możesz w żaden sposób złapać błędów?Groovy , 49 bajtów
Wypróbuj online!
Zamknięcie, użycie:
m(new File("location"))
źródło
C #, 277 bajtów
Nie najkrótszy, ale czego można oczekiwać od C #?
Grał w golfa
Nie golfił
źródło
Röda ,
3231 bajtówJest to anonimowa funkcja, która sortuje pliki w bieżącym katalogu według długości pliku i wybiera pierwszy plik za pomocą
pull
.Użyj tego w ten sposób:
main{ {ls""|sort key=fileLength|pull} }
źródło
ls""
działa równie dobrze, jakls"."
. Myślę, że możesz uratować bajt od tegoSmileBASIC 3, 105 bajtów (konkuruje?)
Bije odpowiedź 12Me21 za ale nadal cierpi z powodu niemożności załadowania plików DAT (który czuje się bardzo okrutny być dyskwalifikujące biorąc pod uwagę okoliczności.)
Krótsza wersja powyżej jest denerwująca i wyświetla monit o załadowanie każdego pliku, ale działa. Dla dwóch bajtów więcej możesz pominąć monit; zmień wiersz 2 na to:
źródło
Plik wsadowy, 33 bajty
Tym razem pliki wsadowe są umiarkowanie konkurencyjne.
Wynik
Znajdź sposób, aby zatrzymać tworzenie
q
przeddir/os/b
uruchomieniem, a zaoszczędzisz maksymalnie 6 bajtów, nie musisz umieszczać pliku wyjściowego w osobnym katalogu.Zawsze będzie wyprowadzany
q
jako najmniejszy plik (chyba że zostanie powiązany z innym plikiem 0-bajtowym), ponieważ jest tworzony jako pusty plik przeddir/b/os
zebraniem listy plików.źródło
C ++ 17 (gcc) , 180 bajtów
Wypróbuj online!
Wymaga najnowszej standardowej biblioteki, która się implementuje
std::filesystem
.źródło
Zsh ,
1814 bajtówWypróbuj online!Wypróbuj online!(D)
globs dotfiles(oL)
sortuje według rozmiaru[1]
wybiera pierwsze dopasowanieźródło