Ihr Ziel ist es, ein Programm oder eine Funktion zu schreiben, die als Eingabe eine Zeichenfolge verwendet, die den Pfad zu einer Datei darstellt, und einen Wahrheitswert ausgibt, wenn diese Datei nicht leer ist und keine Nicht-Null-Bytes enthält - dh alle Bits sind 0 - - und ein falscher Wert sonst.
Mir ist klar, dass es ein sehr einfaches Problem ist und ich denke, ich könnte etwas hacken, aber ich vermute, dass es eine kurze und elegante Art gibt, dies zu tun, und das brachte mich auf die Idee, eine Herausforderung daraus zu machen.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes. (Meine Präferenz würde zur schnellsten Lösung gehen, aber das ist zu implementierungsabhängig ...)
Verwandte Fragen : Füllen Sie eine Datei mit Nullen auf
Motivation : Dies ist nur zu sagen, wo das Problem herkommt, falls Sie interessiert sind. Sie müssen es nicht lesen.
ISO-Images von CDs und DVDs, die mit "dd" oder anderen Mitteln kopiert wurden, enden häufig mit einer Folge von unnötigen Blöcken, die nur Null-Bytes enthalten. Standardtechniken zum Entfernen dieser Blöcke sind bekannt und einfach (siehe /unix/74827/ ), sie können jedoch manchmal nützliche Daten entfernen, die nicht null sind, da das Medium etwa seine eigene Größe haben kann. Ich möchte also überprüfen, dass die entfernten Blöcke nur null Bytes enthalten. Das Entfernen dieser Blöcke ist wichtig, um eine normalisierte Version von ISO-Images zu definieren.
quelle
'
.GNU sed -zn , 5 Bytes
Die Eingabedatei wird als Befehlszeilenparameter an sed übergeben. Ausgabe als Standard-Shell-Returncode - dh 0 ist TRUE, 1 ist FALSE.
sed
Arbeitet normalerweise mit durch neue Zeilen getrennten Eingabedatensätzen (AKA "lines").-z
Ändert dies in durch Nullen getrennte Eingabedatensätze. Wenn Eingabedatensätze mit dem.
regulären Ausdruck übereinstimmen ,q
beenden Sie mit Exit-Code 1.Probieren Sie es online!
quelle
DOS, 37 Bytes
Es öffnet die in der Befehlszeile angegebene Datei, gibt 0 zurück, wenn sie leer ist oder eine andere als Null enthält, andernfalls 1.
quelle
Attache , 24 Bytes
Probieren Sie es online!
Erläuterung
Dies ist eine Komposition von 4 Funktionen, die nacheinander ausgeführt werden:
FileRead
- Verwendet einen Dateinamen als Eingabe und gibt den Inhalt dieser Datei zurückOrds
- Gibt die ASCII-Codepunkte jedes Zeichens in einer Liste zurückMax&0
- das entspricht, zum Argumentx
,Max[x, 0]
; dies berechnet wiederum das Maximum aller Einträge inx
und0
(ergibt0
die leere Liste)Zero
- Dies ist ein Prädikat, das überprüft, ob diese Zahl tatsächlich 0 ist, und diesen Booleschen Wert zurückgibt.quelle
@_@
)C (32-Bit-Plattform), 65 Byte
Angenommen, die Zeigergrößen sind alle gleich, was fast immer zutrifft. Gibt bei
0
Erfolg einen Exit-Code zurück (Datei enthält nurNUL
Zeichen), andernfalls einen anderen Wert.Das Verhalten ist nicht definiert, wenn das Befehlszeilenargument kein Pfad zu einer lesbaren Datei ist.
quelle
int**v
? Ich kann keinen Compiler finden, bei dem dies nicht fehlschlägt, ohne dies zu tun. Sie können auch ein wenig sparen, indem Sie absichtlich einen Fehler machen , aber ich weiß nicht, ob dies der beste Ansatz ist.sizeof(void*) == sizeof(int)
(oder allgemeiner "32-Bit-Plattform") dann hinzufügen ... auf eineramd64
Plattform, versuchen Sie es mit kompilieren-m32
;)-m32
): Probieren Sie es online aus!Bash + GNU-Dienstprogramme, 26 Bytes
Der eingegebene Dateiname wird als Befehlszeilenparameter angegeben. Ausgabe als Standard-Shell-Returncode - dh 0 ist TRUE, 1 ist FALSE.
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 30 Byte
Probieren Sie es online!
Erläuterung
Alternative Lösung, 22 Byte
Wenn leere Dateien übergeben werden sollen, kann dies verkürzt werden auf:
Probieren Sie es online!
quelle
Java, 149 Bytes
quelle
Perl 5, 20 Bytes
$\=0;exit<>=~/^\0+$/
Übernimmt einen Dateinamen in Befehlszeilenargumenten und gibt die Antwort im Exit-Code des Programms zurück
quelle
Python 3, 59 Bytes
Gibt bei Erfolg 0 zurück (alle Bytes Null).
Gibt 1 für einen Fehler zurück (mindestens eine Datei mit einer Länge ungleich Null Byte oder Null).
quelle
APL (Dyalog Unicode) , 14 Byte
Volles Programm. Fordert zur Eingabe des Dateinamens von stdin auf.
Probieren Sie es online!
⍞
Aufforderung zur Eingabe des Dateinamens11 ¯1⎕MAP
Ordnen Sie diese Datei einem gepackten Bit-Array zu⌈/
Maximum (Reduzierung); kleinster Schwimmer wenn leer, sonst 0 oder 10=
Ist Null gleich?quelle
Haskell, 49 Bytes
Wenn der Import nicht enthalten ist, sind es offensichtlich 26 Bytes.
quelle
readFile
stattgetContets
. Ich denke, man kann die Datei als normalen String lesen, mit=='\0'
(oder besser<'\1'
) vergleichen und den loswerdenimport
. Wie Sie eine anonyme Funktion verwenden können, können Sie die Dropf x=
und gehen pointfree:(all(<'\1')<$>).readFile
.readFile
Bei Auftreten einer ungültigen Unicode-Sequenz wird eine Ausnahme ausgelöst. Guter Punkt in Bezug auf die Pointfree.JavaScript (ES8), 52 Byte
Nimmt eine URL als Argument und gibt ein Versprechen zurück, das auflöst,
true
wenn die Datei nicht leer ist und keine Null-Bytes enthält.quelle
Zsh , 35 Bytes
Probieren Sie es online! Ausgänge über Exit-Code.
Lesen Sie die Zeichen ein, teilen Sie sie auf und setzen Sie sie bitweise oder für jeden Codepunkt zusammen.
Wenn die Datei leer ist, wird der Hauptteil der Schleife niemals ausgeführt, und die Schleife gibt die Wahrheit zurück. Wenn die Wahrheits-Falsch-Werte vertauscht werden können, kann der führende Wert
!
für eine 2-Byte-Sicherung entfernt werden.quelle