Ваша задача сегодня будет взять существующий файл и добавлять к нему нули, пока он не достигнет определенного размера.
Вы должны написать программу или функцию, которая берет имя файла в текущем каталоге f
и количество байтов b
. Сохраняя исходное содержимое f
, вы должны записать нули (нулевые байты, а не ascii 0s) до конца, чтобы его новый размер был в b
байтах.
Вы можете предположить, что f
в его имени есть только буквенно-цифровой ascii, что у вас есть полные права на него, что он изначально не больше b
, но может быть таким же большим b
, и что существует бесконечное свободное дисковое пространство.
Вы можете не предполагать f
, что он не пустой или что он еще не содержит нулевых байтов.
Другие существующие файлы не должны быть изменены, а новые файлы не должны существовать после завершения выполнения.
Тестовые случаи
Содержание е | б | Результирующее содержание f 12345 | 10 | 1234500000 0 | 3 | 000 [пусто] | 2 | 00 [пусто] | 0 | [Пусто] 123 | 3 | 123
источник
b
Ответы:
Баш + coreutils, 13
Ввод из командной строки - первый параметр - это размер файла, а второй - имя файла.
От
man truncate
:Попробуйте онлайн .
источник
truncate
системный вызов не выполняется.dd bs=1 of=$1 seek=$2<&-
(которая печатает сообщение об ошибке, которое можно игнорировать). Ваш намного короче. Ницца.Groovy,
54474341 байт-6 благодаря идее manatwork по удалению петли; это была моя оригинальная идея, не знаю, почему я думал, что это не сработает, и выбрал цикл ... Он определенно работает, просто проверил его.
Ungolfed:
источник
{a,b->c=new File(a);c<<('\0'*(b-c.size()))}
(c=new File(a))
из-за требуемой скобки.APL (Dyalog) ,
3317 байтПопробуйте онлайн!
источник
∇Extend
?Python 2 ,
595754 байта-5 байт благодаря чепнеру
источник
\x00
- нулевой байт.\0
вместо\x00
.def g(n,b):f=open(n,'a');f.write('\0'*b);f.truncate(b)
.PHP, 66 байт
Принимает данные из аргументов командной строки; беги с
-nr
.Эти 55 байтов могут, но, скорее всего, не будут работать:
источник
Java (Oracle JRE), 55 байт
В спецификации
setLength(int)
говорится, что добавленные байты не определены, но практически Oracle JRE добавляет только0
байт (поэтому я и указал его).Ресурс автоматически закрывается JVM, поэтому нам не нужно делать это самостоятельно.
Тестовое задание
источник
AHK, 48 байтов
1
и2
являются первыми двумя параметрами в скрипте AHK.FileGetSize
работает в байтах по умолчанию.Это не интересно, но просто: возьмите размер, вычтите его из желаемого размера и добавьте столько нулей.
источник
Perl 6 , 40 байт
$^a
и$^b
являются параметрами функции - имя файла и длина соответственно.источник
Python 2 , 68 байт
Попробуйте онлайн! (При печати содержимого файла код заменяет нулевые байты на ASCII 0 для наглядности.)
источник
\0
он короче.PowerShell, 69 байт
$f
для файла,$s
для конечного размера, сохраните как .ps1 и запуститеЭто оболочка, так что должен быть действительно маленький цикл, добавляющий 1 байт с
>>
перенаправлением вывода и добавлением, верно? Ну, нет, потому что>>
выводит только многобайтовую кодировку UCS2-LE, так что нет никакого способа добавить один байт в файл с ним ... если вы не используете PSv5.1, и вы можете изменить это, но это делает его слишком длинным, чтобы быть конкурентоспособным :Может быть, есть подход .Net Framework? Должно быть, но я не могу заставить его писать какие-либо байты или ошибки. Но это все равно больше
источник
Mathematica 50 байтов
Импорт Экспорт
использование
источник
q, 29 байт
Функция, которая принимает имя файла в формате
:/foo/bar.baz
и длине как целое число.Пример:
источник
C, 56 байтов
Программа находит размер файла и количество байтов для добавления. Затем файл добавляет
fs - b
дополнительные байты в конец.источник
f
иb
, что недопустимо. Вы должны включитьARGV
ввод / вывод в вашу программу, которая может быть из , ввода с консоли или аргументов функции.C #, 90 байт
источник