Twoim celem jest napisanie programu lub funkcji, która pobiera jako dane wejściowe ciąg znaków reprezentujący ścieżkę do pliku i wyświetla prawdziwą wartość, jeśli plik nie jest pusty i nie zawiera bajtów o wartości innej niż zero - tzn. Wszystkie bity mają wartość 0 - - w przeciwnym razie wartość falsey.
Zdaję sobie sprawę, że to bardzo prosty problem i myślę, że mógłbym coś zhakować, ale podejrzewam, że musi istnieć jakiś krótki i elegancki sposób na zrobienie tego, co dało mi pomysł, aby podjąć z tego wyzwanie.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. (Moje własne preferencje dotyczyłyby najszybszego rozwiązania, ale jest to zbyt zależne od implementacji ...)
Powiązane pytania : Wypełnij plik zerami
Motywacja : tylko po to, aby dowiedzieć się, skąd pochodzi problem, na wypadek gdybyś był zainteresowany. Nie musisz go czytać.
Obrazy ISO dysków CD i DVD, skopiowane za pomocą „dd” lub w inny sposób, często kończą się ciągiem bezużytecznych bloków zawierających tylko bajty zerowe. Standardowe techniki usuwania tych bloków są znane i proste (patrz /unix/74827/ ), ale czasem mogą one usuwać niepuste przydatne dane, ponieważ nośnik może kłamać na temat swojego własnego rozmiaru. Chcę więc sprawdzić, czy usunięte bloki zawierają tylko bajty zerowe. Usunięcie tych bloków jest ważne dla zdefiniowania znormalizowanej wersji obrazów ISO.
źródło
'
.GNU sed -zn , 5 bajtów
Plik wejściowy jest przekazywany do sed jako parametr wiersza polecenia. Wyjście jako standardowy kod powrotu powłoki - tzn. 0 to PRAWDA, 1 to FAŁSZ.
Zwykle
sed
działa na rekordach wejściowych rozdzielanych znakiem nowej linii („linie” AKA).-z
zmienia to na rekordy wejściowe rozdzielane wartościami nul. Jeśli jakiekolwiek rekordy wejściowe pasują do.
wyrażenia regularnego,q
uit z kodem wyjścia 1.Wypróbuj online!
źródło
DOS, 37 bajtów
Otwiera plik o nazwie podanej w wierszu poleceń, zwraca 0, jeśli jest pusty lub zawiera niezerową wartość, w przeciwnym razie zwraca 1.
źródło
Attache , 24 bajty
Wypróbuj online!
Wyjaśnienie
Jest to kompozycja 4 funkcji, wykonywanych jedna po drugiej:
FileRead
- pobiera nazwę pliku jako dane wejściowe, zwraca zawartość tego plikuOrds
- zwraca punkty kodowe ASCII każdego znaku na liścieMax&0
- co jest równoważne, dla argumentux
,Max[x, 0]
; to z kolei oblicza maksimum wszystkich wpisów wx
i0
(dając0
pustą listę)Zero
- jest to predykat, który sprawdza, czy ta liczba faktycznie wynosi 0, i zwraca wartość logicznąźródło
@_@
)C (platforma 32-bitowa), 65 bajtów
Zakłada, że rozmiary wskaźników są takie same, co prawie zawsze jest prawdą. Zwraca
0
kod zakończenia w przypadku powodzenia (plik zawiera tylkoNUL
znaki), w przeciwnym razie inna wartość.Zachowanie jest niezdefiniowane, jeśli argument wiersza poleceń nie jest ścieżką do czytelnego pliku.
źródło
int**v
? Nie mogę znaleźć kompilatora, w którym to nie segfaultuje bez zrobienia tego. Możesz także trochę zaoszczędzić, celowo popełniając błędy , ale nie wiem, czy to najlepsze podejście.sizeof(void*) == sizeof(int)
(lub bardziej ogólnie „platformę 32-bitową”), a następnie ... naamd64
platformie, spróbuj skompilować z-m32
;)-m32
): Wypróbuj online!Narzędzia Bash + GNU, 26 bajtów
Nazwa pliku wejściowego jest podawana jako parametr wiersza polecenia. Wyjście jako standardowy kod powrotu powłoki - tzn. 0 to PRAWDA, 1 to FAŁSZ.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 30 bajtów
Wypróbuj online!
Wyjaśnienie
Alternatywne rozwiązanie, 22 bajty
Jeśli mają zostać przekazane puste pliki, można to skrócić do:
Wypróbuj online!
źródło
Java, 149 bajtów
źródło
Perl 5, 20 bajtów
$\=0;exit<>=~/^\0+$/
Pobiera nazwę pliku w argumencie wiersza poleceń i zwraca odpowiedź w kodzie wyjścia programu
źródło
Python 3, 59 bajtów
Zwraca 0 dla sukcesu (wszystkie bajty zero).
Zwraca 1 w przypadku niepowodzenia (co najmniej jeden niezerowy bajt lub plik o zerowej długości).
źródło
APL (Dyalog Unicode) , 14 bajtów
Pełny program Monituje o nazwę pliku ze standardowego wejścia.
Wypróbuj online!
⍞
monit o nazwę pliku11 ¯1⎕MAP
zamapuj ten plik na spakowaną tablicę bitów⌈/
maksimum (redukcja); najmniejsza liczba zmiennoprzecinkowa, jeśli jest pusta, w przeciwnym razie 0 lub 10=
czy zero jest równe?źródło
Haskell, 49 bajtów
Oczywiście, jeśli import nie jest uwzględniony, to ma on 26 bajtów.
źródło
readFile
zamiastgetContets
. Myślę, że możesz odczytać plik jako normalny ciąg, porównać=='\0'
(lub lepiej<'\1'
) i pozbyć sięimport
. Jak można używać anonimową funkcję, można upuścićf x=
i iść pointfree:(all(<'\1')<$>).readFile
.readFile
, co spowoduje wygenerowanie wyjątku po napotkaniu nieprawidłowej sekwencji Unicode. Dobra uwaga dotycząca bez punktów.JavaScript (ES8), 52 bajty
Pobiera adres URL jako argument i zwraca obietnicę, która rozwiązuje się,
true
jeśli plik nie jest pusty i nie zawiera bajtów zerowych.źródło
Zsh , 35 bajtów
Wypróbuj online! Dane wyjściowe za pośrednictwem kodu wyjścia.
Czytaj, dziel na znaki i bitowe - lub każdy kodod razem.
Jeśli plik jest pusty, ciało pętli nigdy nie jest uruchamiane, więc pętla zwraca wartość true. Jeśli wartości prawda-fałsz mogą zostać zamienione, interlinię
!
można usunąć dla 2-bajtowego zapisu.źródło