Мой коллега и я работаем над устаревшим программным обеспечением, которое мы иногда ненавидим. Всякий раз, когда вы запускаете его, повсеместно появляются отладочные утверждения, и никогда не гарантируется, что что-нибудь сработает. Мотивация к этому раунду игры в гольф кода пришла от моего сотрудника, который сказал следующее о нашем программном обеспечении .
«Как каждый раз, когда вы запускаете эту программу, вы соглашаетесь с некоторыми условиями обслуживания, согласно которым каждый 17-й бит на вашем жестком диске будет превращен в 1»
Цель: написать программу, которая сделает точную копию файла и превратит каждый 17-й бит текстового файла в 1
- Вы НЕ МОЖЕТЕ превращать КАЖДЫЙ бит файла в 1. т. Е. Ваша программа должна демонстрировать некоторую информацию о том, что она нацелена только на каждый 17-й бит
- Вы можете НЕ писать в исходный файл каким - либо образом или иной форме
- Победитель наименьшее представление программы в конце месяца
Веселитесь с этим! Идти!
code-golf
, т.е. самый короткий код в байтах, выигрывает. Аcode-challenge
нужна четко определенная система начисления очков. 2. Превратить каждый 18-й бит жесткого диска в 1 возможно только путем записи непосредственно на диск. Это не может быть достигнуто путем создания и / или изменения файлов. 3. Это сделает весь привод непригодным для использования, поэтому совместимое решение будет разрушительным. Я не знаю, насколько хорошо сообщество получит запрос на написание вредоносного ПО ...:/
Ответы:
CJam, 22 байта
Попробуйте онлайн.
Касается каждого 17-го бита, считая с последнего.
Я использовал STDIN и STDOUT, так как CJam не имеет файлового ввода-вывода. Если это не разрешено, программу можно обернуть в сценарий Bash стоимостью 24 дополнительных байта:
Как это работает
источник
Perl 59
Подстановка регулярных выражений в битовых строках:
Применение:
источник
b
иB
в нихpack
С 125
Предполагает старшие и 16-битные целые числа .
Работает, применяя побитовое ИЛИ на каждые два байта.
Входной файл есть
y
, выход естьz
.Ungolfed
источник
00000000 00000001 00000000 00000000 10000000 00000000
следовательно,a
должно быть нулем в определенных точках. Машина должна использовать порядковый номер с прямым порядком байтов (иначе00000000 10000000
вместо этого вы бы получили10000000 00000000
неправильное значение).c = __builtin_bswap16(c);
исправил.Python 2, 112 байт
Это устанавливает каждый 17-й бит с прямым порядком байтов, начиная с 17-го с начала. Он не использует библиотеки. Он работает путем преобразования входного файла в гигантское
n
-битное целое число и побитовое ИЛИ с2**n/(2**17 - 1) == 0b10000000000000000100000000000000001…
.источник
С - 139
Читает из файла с именем "i", выводит в файл с именем "o".
С переносами строк:
Подсчитывает биты ввода и затем использует плавающую битовую маску для установки каждого семнадцатого бита.
источник
Ява - 247
Использует
BitSet
простой цикл и вместо обработки / маскирования байтов вручную. Конечно, это java, шаблон - половина программы, так что она не совсем короткая.Тем не менее, не последний! : D
Версия без прокрутки:
источник
Python - 98 байт
Читайте от меня, пишите о. Использует библиотеку bitarray https://pypi.python.org/pypi/bitarray
ungolfed
источник
a[::17]=1
?from bitarray import*
иa=bitarray()
.Кобра - 308
Каждый раз, когда я выполняю одну из этих задач «манипулировать отдельными кусочками чего-либо», мне бы хотелось, чтобы в Cobra или стандартной библиотеке .NET был
binary string => integer
конвертер.источник
Javascript (+ HTML5), 282
Наверное, не самый короткий, но удобный для пользователя: D
Это кросс-браузер, но кажется, что Chrome - единственный, который позволяет, когда html-файл является локальным файлом (= доступ с помощью
file://...
). Для других браузеров вам нужно разместить его на веб-сервере.Выходной файл должен быть сохранен в каталог загрузки по умолчанию, возможно, с приглашением файла (в зависимости от вашей конфигурации).
Безголовая версия:
источник
Python 3 - 187 байт
Читает в
i
и пишетo
.Код:
Ungolfed:
источник
Python 3 - 103 символа
Измените
f
путь к файлу, который вы хотите прочитать, иo
путь к файлу, в который вы хотите записать.источник