Su tarea hoy será tomar un archivo existente y agregarle ceros hasta que alcance un cierto tamaño.
Debe escribir un programa o función que tome el nombre de un archivo en el directorio actual f
y una cantidad de bytes b
. Mientras mantiene el contenido original de f
, debe escribir ceros (bytes nulos, no ascii 0s) hasta el final para que su nuevo tamaño sea b
bytes.
Puede suponer que f
solo tiene ascii alfanumérico en su nombre, que tiene permisos completos sobre él, que inicialmente no es mayor que b
, pero puede ser tan grande como b
, y que hay un espacio libre infinito en el disco.
No puede suponer que no f
está vacío o que no contiene bytes nulos.
Otros archivos existentes no deberían modificarse y los archivos nuevos no deberían existir después de que finalice la ejecución.
Casos de prueba
Contenido de f | b | Contenido resultante de f 12345 | 10 | 1234500000 0 | 3 | 000 [vacío] | 2 | 00 [vacío] | 0 | [vacío] 123 | 3 | 123
fuente
b
Respuestas:
Bash + coreutils, 13
Entrada desde la línea de comandos: el primer parámetro es el tamaño del archivo y el segundo es el nombre del archivo.
De
man truncate
:Pruébalo en línea .
fuente
truncate
falla la llamada al sistema.dd bs=1 of=$1 seek=$2<&-
(que imprime un mensaje de error que puede ignorarse). El tuyo es mucho más corto. Agradable.Groovy,
54474341 bytes-6 gracias a la idea de manatwork de eliminar el bucle; esa fue mi idea original, no sé por qué pensé que no funcionaría y opté por un bucle ... Definitivamente funciona, solo lo probé.
Sin golf:
fuente
{a,b->c=new File(a);c<<('\0'*(b-c.size()))}
(c=new File(a))
debido al paréntesis requerido.APL (Dyalog) ,
3317 bytesPruébalo en línea!
fuente
∇Extend
?Python 2 ,
595754 bytes-5 bytes gracias a chepner
fuente
\x00
es un byte nulo.\0
en lugar de\x00
.def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b)
.PHP, 66 bytes
Toma información de los argumentos de la línea de comando; correr con
-nr
.Estos 55 bytes podrían, pero probablemente no funcionarán:
fuente
Java (Oracle JRE), 55 bytes
La especificación de
setLength(int)
dice que los bytes agregados no están definidos, pero prácticamente Oracle JRE agrega solo el0
byte (es por eso que lo especifiqué).La JVM cierra automáticamente el recurso, por lo que no necesitamos hacerlo nosotros mismos.
Prueba
fuente
AHK, 48 bytes
1
y2
son los primeros dos parámetros en un script AHK.FileGetSize
funciona en bytes por defecto.No es emocionante, pero es simple: obtenga el tamaño, reste el tamaño deseado y agregue tantos ceros.
fuente
Perl 6 , 40 bytes
$^a
y$^b
son los parámetros de la función: el nombre del archivo y la longitud, respectivamente.fuente
Python 2 , 68 bytes
Pruébalo en línea! (Al imprimir el contenido del archivo, el código reemplaza los bytes nulos con 0 ASCII para mayor visibilidad).
fuente
\0
es más corto.PowerShell, 69 bytes
$f
para el archivo,$s
para el tamaño de destino, guárdelo como .ps1 y ejecuteEs un shell, por lo que debería haber un bucle realmente pequeño que agregue 1 byte con
>>
redirección de salida y anexar, ¿verdad? Bueno, no, porque>>
solo genera la codificación multibyte UCS2-LE, por lo que no hay forma de agregar un solo byte a un archivo con él ... a menos que esté usando PSv5.1 y pueda cambiar eso, pero eso hace que sea demasiado largo para ser competitivo :¿Quizás haya un enfoque de .Net Framework? Debería haberlo, pero no puedo hacer que realmente escriba ningún byte o error. Pero es más largo de todos modos:
fuente
Mathematica 50 Bytes
Importación y exportación
Uso
fuente
q, 29 bytes
Función que toma el nombre del archivo en formato
:/foo/bar.baz
y longitud como un entero.Ejemplo:
fuente
C, 56 bytes
El programa encuentra el tamaño del archivo y cuántos bytes agregar. El archivo agrega
fs - b
bytes adicionales al final.fuente
f
yb
, lo que no está permitido. Usted debe incluir i / o en su programa, que puede ser desdeARGV
, entrada de la consola, o argumentos a una función.C #, 90 bytes
fuente