задача
При наличии входной строки из одного или нескольких символов ASCII, кодовые точки которых находятся в диапазоне от 0 до 128 (исключая), выполните следующие действия:
- Преобразуйте каждый символ в его 7-битный код ASCII (если код ASCII меньше 7 бит, ставьте начальные нулевые биты)
- Объединить все биты (это приводит к
7*n
битам, гдеn
количество символов) - Для каждого бита в этом битовом потоке выведите 1, если он отличается от предыдущего бита, и выведите 0 в противном случае. Первый выходной бит всегда равен 1.
пример
Входные данные:
Hi
Вывод:
11011001011101
Объяснение:
Строка «Привет» имеет коды ASCII
72 105
которые в битах:
1001000 1101001
И индикаторы битов перехода:
11011001011101
Это код гольф. Побеждает младший счетчик байтов.
Тестовые случаи
Тестовый пример 1:
Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001
Контрольный пример 2:
%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111
Тестовый пример 3 (кредит Луису Мендо):
##
11100101110010
Поздравляем Луиса Мендо за самое короткое решение с 9 байтами в MATL!
##
(ведущий0
бит; некоторые ответы в настоящее время терпят неудачу из-за этого)Ответы:
MATL , 9 байт
Попробуйте онлайн!
объяснение
источник
Python 2 , 58 байт
Попробуйте онлайн!
источник
Japt
-P
, 11 байтИспользует тот факт, что
0
в JavaScript можно приводить пробелы при попытке выполнить математическую или, в данном случае, побитовую операцию над ним.Попробуйте или запустите все тесты
источник
0100000
. Также символ% (37) будет0100101
CJam , 21 байт
Попробуйте онлайн!
объяснение
Показ стека с примером ввода
5
:Чтобы увидеть, отличается ли бит от предыдущего бита, мы делаем вектор (поэлементно) xor между битовым массивом и битовым массивом без первого элемента. Мы также удаляем последний бит результата, потому что это всегда последний бит длинного массива без изменений.
источник
APL (Dyalog Unicode) , 16 байтов SBCS
Полная программа. Запрашивает строку из стандартного ввода.
Попробуйте онлайн!
⍞
подсказка для ввода («цитата в консоли»)11⎕DR¨
изменить каждый символ битового булевой D ата R epresentation1↓¨
отбросить первый бит от каждого∊
ε NLIST (Flatten)2≠/
попарная разница1,
готовить одинисточник
Желе , 12 байт
Попробуйте онлайн!
источник
Древесный уголь , 25 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Преобразуйте все символы в двоичные и добавьте их к длине 7, а затем напечатайте их, но оставьте курсор над последней цифрой.
Повторяйте, пока курсор не окажется над первой цифрой.
Рассчитайте, отличаются ли цифры, и замените каждую цифру разницей.
Перезапишите первую цифру с помощью
1
.источник
PowerShell ,
735649 байтПопробуйте онлайн!
-17 байт благодаря маззи :)
источник
Рубин
-p
,6857 байт-11 байт, бесстыдно украдя метод, используемый в решении xnor Python .
Попробуйте онлайн!
Оригинальное решение:
Попробуйте онлайн!
источник
Октава ,
3630 байтИсправить благодаря Луису Мендо
-2 байта благодаря Sanchises
Попробуйте онлайн!
источник
de2bi
.Python 2 , 104 байта
Попробуйте онлайн!
Быстрый удар в это.
источник
a*128+ord(c)
! Но не являетсяreduce
и своегоlambda
рода дорого?Дротик ,
213168 байтПредыдущая однострочная
Попробуйте онлайн!
Это многословие и отсутствие простых встроенных модулей действительно убивают этого. Все же удалось вытащить один лайнер, хотя.
источник
Stax ,
1312 байтЗапустите и отладьте его
Если гарантируется, что для всех входных символов установлен 7-й бит, как предполагают некоторые ответы, это можно сделать в 10 байтах.
источник
Котлин , 182 байта
Попробуйте онлайн!
Надеюсь, я смогу улучшить это в ближайшее время, я чувствую, что должно быть несколько мест для улучшения, но я не могу сейчас думать
источник
Perl 5
-p
, 60 байтПопробуйте онлайн!
источник
C (gcc (MinGW)), 90 байтов
Требуется предоставление компилятора
itoa()
.источник
Рубин
-p
, 50 байтовПопробуйте онлайн!
объяснение
Первая строка, такая же, как ответ Value Ink :
Вторая линия:
В Ruby вы можете использовать интерполяцию в литералах Regexp, например
/Hello #{name}/
, и для переменных, которые начинаются с$
или@
вы можете опустить фигурные скобки, поэтому, если, например,$&
есть,"0"
то grawlixy/#$&$/
становится/0$/
.источник
K (нгн / к) ,
913 байтРешение:
Попробуйте онлайн!
Объяснение:
Ноты:
источник
#
(например, выход имеет только 6 бит)Эмоджикод , 263 байта
Попробуйте это онлайн здесь.
Ungolfed:
источник
JavaScript (V8) ,
15095 байт-55 благодаря @dana
Попробуйте онлайн!
источник
Python3.8 , 72 байта
Решение:
Объяснение:
С тех пор, как в Python 3.8 были введены выражения присваивания (а не стандартные операторы присваивания), я хотел использовать их в понимании списка, которое должно помнить последний элемент. Это не лучший способ сделать это, но демонстрирует интересный способ использования выражения присваивания.
Код создает лямбда-функцию, которая принимает требуемый аргумент - строку для преобразования. При вызове функция работает следующим образом. Каждый символ в a преобразуется в свой символьный код, к которому добавляется 128 для работы с 6-битными символами (двоичное представление всегда будет 8-битным, и мы можем отрубить первый бит). Это число преобразуется в двоичный файл, и заголовок (0x) и начальная 1 от добавления 128 обрезаются. Эти новые строки затем объединяются в одну большую строку.
Для каждого символа в этой новой строке (которая содержит сцепленное 7-битное представление текста) проверяется, совпадает ли символ с предыдущим символом. Что происходит с первым персонажем? Первый символ результата всегда должен быть «1», поэтому мы просто должны убедиться, что все, что находится в последней символьной переменной, не является ни «1», ни «0». Мы делаем это путем повторного использования исходного параметра, поскольку мы больше его не используем. Это может быть проблемой, если исходная строка была одним «0» (просто «1» просто работает), но мы проигнорируем это.
Во время сравнения предыдущий символ вычислялся первым, поэтому, когда мы используем выражение присваивания, чтобы установить для предыдущей символьной переменной текущий символ, это не влияет на оценку выражений сравнения.
Сравнение дает либо Истинный, либо Ложный, который также может использоваться как 1 или 0 соответственно в Python, поэтому они используются для поиска «1» или «0» в строке
источник
bin(ord(i)+128)[3:]
->f"{ord(i):07b}"
Tcl ,
215167140 байтПопробуйте онлайн!
Использует сдвиг на единицу и эксклюзив или для обнаружения переходов. Переносит lsb текущего символа в msb следующего символа. Объединяет вывод для каждого символа, объединяя список, возвращаемый lmap.
Использует лямбды с аргументами по умолчанию для сохранения байтов при инициализации и повторных команд.
В значительной степени зависит от порядка работы. Работает для пустой строки.
источник
05AB1E (наследие) , 12 байтов
Использует унаследованную версию 05AB1E, поскольку
j
неявно объединяет строки, что требует явногоJ
послеj
новой версии 05AB1E.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Haskell , 137 байт
Попробуйте онлайн!
Самая большая проблема здесь - преобразование логических значений (результат XOR) в «0» / «1».
источник
Python 3 ,
8884 байтаПопробуйте онлайн!
Я чувствую, что заданий следует избегать, но я не мог придумать, как это сделать.
Обновить:
источник
PHP , 90 байт
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 80 байт
Попробуйте онлайн!
источник
JavaScript (V8) , 73 байта
Попробуйте онлайн!
источник