Ihre Aufgabe heute wird es sein, eine vorhandene Datei zu nehmen und Nullen an sie anzuhängen, bis sie eine bestimmte Größe erreicht.
Sie müssen ein Programm oder eine Funktion schreiben, die den Namen einer Datei im aktuellen Verzeichnis f
und eine Anzahl von Bytes enthält b
. Während Sie den ursprünglichen Inhalt von beibehalten f
, müssen Sie Nullen (Nullbytes, keine ASCII- Nullen ) an das Ende schreiben , damit die neue Größe b
Byte ist.
Sie können davon ausgehen, dass f
nur alphanumerische ASCII-Zeichen im Namen vorhanden sind, dass Sie über die vollständigen Berechtigungen verfügen, dass sie anfangs nicht größer als b
, aber möglicherweise so groß b
sind und dass unendlich viel freier Speicherplatz vorhanden ist.
Sie dürfen nicht davon ausgehen f
, dass es nicht leer ist oder dass es noch keine Null-Bytes enthält.
Andere vorhandene Dateien sollten nicht geändert werden, und neue Dateien sollten nach Beendigung der Ausführung nicht mehr vorhanden sein.
Testfälle
Inhalt von f | b | Resultierender Inhalt von f 12345 | 10 | 1234500000 0 | 3 | 000 [leer] | 2 | 00 [leer] | 0 | [leeren] 123 | 3 | 123
quelle
b
Antworten:
Bash + Coreutils, 13
Eingabe über die Befehlszeile - der erste Parameter ist die Dateigröße und der zweite der Dateiname.
Von
man truncate
:Probieren Sie es online aus .
quelle
truncate
Syscall fehlschlägt.dd bs=1 of=$1 seek=$2<&-
(die eine Fehlermeldung ausgibt, die ignoriert werden kann). Ihre ist viel kürzer. Nett.Groovy,
54474341 Bytes-6 dank der Idee von manatwork, die Schleife zu entfernen; Das war meine ursprüngliche Idee, ich weiß nicht, warum ich dachte, es würde nicht funktionieren und entschied mich für eine Schleife ... Es funktioniert definitiv, habe es nur getestet.
Ungolfed:
quelle
{a,b->c=new File(a);c<<('\0'*(b-c.size()))}
(c=new File(a))
wegen erforderlicher Klammern.APL (Dyalog) ,
3317 BytesProbieren Sie es online!
quelle
∇Extend
?Python 2 ,
595754 Bytes-5 bytes dank chepner
quelle
\x00
ist ein Null-Byte.\0
anstelle von verwenden\x00
.def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b)
.PHP, 66 Bytes
Übernimmt Eingaben von Befehlszeilenargumenten; renn mit
-nr
.Diese 55 Bytes könnten, werden aber höchstwahrscheinlich nicht funktionieren:
quelle
Java (Oracle JRE), 55 Byte
Die Spezifikation von
setLength(int)
besagt, dass die angehängten Bytes undefiniert sind, aber praktisch hängt die Oracle-JRE nur das0
Byte an (deshalb habe ich es angegeben).Die Ressource wird von der JVM automatisch geschlossen, sodass wir dies nicht selbst tun müssen.
Prüfung
quelle
AHK, 48 Bytes
1
und2
sind die ersten beiden Parameter in einem AHK-Skript.FileGetSize
Arbeitet standardmäßig in Bytes.Es ist nicht aufregend, aber einfach: Ermitteln Sie die Größe, subtrahieren Sie sie von der gewünschten Größe und fügen Sie so viele Nullen hinzu.
quelle
Perl 6 , 40 Bytes
$^a
und$^b
sind die Parameter der Funktion - der Dateiname bzw. die Länge.quelle
Python 2 , 68 Bytes
Probieren Sie es online! (Beim Drucken des Dateiinhalts ersetzt der Code Nullbytes durch ASCII-Nullen, um die Sichtbarkeit zu gewährleisten.)
quelle
\0
ist jedoch kürzer.PowerShell, 69 Byte
$f
$s
Speichern Sie für die Datei die Zielgröße als .ps1 und führen Sie sie ausEs ist eine Shell, also sollte es eine wirklich kleine Schleife geben, die 1 Byte mit
>>
Ausgabeumleitung und Anhängen hinzufügt , oder? Nein, denn es wird>>
nur UCS2-LE-Multibyte-Codierung ausgegeben, sodass es keine Möglichkeit gibt, einer Datei ein einzelnes Byte hinzuzufügen. Es sei denn, Sie verwenden PSv5.1 und können dies ändern, aber das macht es zu lang, um wettbewerbsfähig zu sein :Vielleicht gibt es einen .Net Framework-Ansatz? Es sollte geben, aber ich kann es nicht dazu bringen, tatsächlich Bytes oder Fehler zu schreiben. Aber es ist trotzdem länger:
quelle
Mathematica 50 Bytes
Import Export
Verwendung
quelle
q, 29 Bytes
Funktion, die Dateinamen in Format
:/foo/bar.baz
und Länge als Ganzzahl verwendet.Beispiel:
quelle
C 56 Bytes
Das Programm ermittelt die Dateigröße und die Anzahl der anzuhängenden Bytes. Die Datei fügt dann
fs - b
zusätzliche Bytes am Ende hinzu.quelle
f
und gespeichert sindb
, was nicht erlaubt ist. Du musst I / O in Ihr ProgrammARGV
einbinden. Dies können From- , Console-Input- oder Argumente für eine Funktion sein.C #, 90 Bytes
quelle