В ответ на этот вопрос, в котором говорится о шестнадцатеричном (необработанном) двоичном преобразовании, комментарий предположил, что он может быть разрешен в "5-10 строках C" или любой другой язык ".
Я уверен, что для (некоторых) языков сценариев, которые могут быть достигнуты, и хотелось бы посмотреть, как это сделать. Можем ли мы доказать, что комментарий верно для C тоже?
NB: это не означает, что hex - это двоичный код ASCII - в частности, выход должен быть необработанным октетом, соответствующим входному шестнадцатеричному ASCII. Кроме того, входной парсер должен пропускать/игнорировать пробелы.
edit (Брайан Кэмпбелл) Могу ли я предложить следующие правила для согласованности? Не стесняйтесь редактировать или удалять их, если вы не считаете их полезными, но я думаю, что, поскольку было некоторое обсуждение того, как некоторые случаи должны работать, некоторые разъяснения будут полезны.
- Программа должна читать из stdin и записывать в stdout (мы также можем разрешать чтение и запись файлов, передаваемых в командной строке, но я не могу себе представить, что это было бы короче на любом языке, чем stdin и stdout)
- Программа должна использовать только пакеты, включенные в базу, стандартное языковое распространение. В случае C/С++ это означает, что их соответствующие стандартные библиотеки, а не POSIX.
- Программа должна компилироваться или запускаться без каких-либо специальных опций, переданных компилятору или интерпретатору (так что "gcc myprog.c" или "python myprog.py" или "ruby myprog.rb" в порядке, а "ruby -rscanf myprog.rb 'не допускается, требуя/импортируя модули, подсчитывается против вашего количества символов).
- Программа должна читать целочисленные байты, представленные парами соседних шестнадцатеричных цифр (верхний, нижний или смешанный регистр), необязательно разделенные пробелами и записывать соответствующие байты в вывод. Каждая пара шестнадцатеричных цифр записывается с наиболее значительным первым делом.
- Поведение программы на недопустимом входе (символы помимо
[a-fA-F \t\r\n]
, пробелы, разделяющие два символа в отдельном байте, нечетное число шестнадцатеричных цифр на входе) undefined; любое поведение (отличное от активного повреждения компьютера пользователя или что-то еще) при плохом вводе допустимо (бросание ошибки, остановка вывода, игнорирование плохих символов, обработка одиночного символа как значения одного байта, все в порядке) - Программа не может писать никаких дополнительных байтов для вывода.
- Код забивается наименьшим количеством байтов в исходном файле. (Или, если бы мы хотели быть более верными исходной проблеме, оценка была бы основана на самом низком числе строк кода, я бы наложил ограничение на 80 символов на строку в этом случае, так как в противном случае вы получили бы кучу связей для 1 линии).