Напишите программу / функцию, которая принимает два целых числа в диапазоне от до включительно и возвращает информацию о том, отличаются ли двоичные формы чисел от одного бита.
Например, и имеют двоичные формы и , которые находятся на расстоянии одного бита. Аналогично, и равны и , поэтому они возвращают истину.00000001
00000000
010011000
000011000
Тем не менее , ваш код должен быть нетронутым , так что если какой-либо бит в вашей программе будет перевернут, он должен выдать ошибку. Например, если ваша программа была одиночной bytea
(01100001
), то все 8 возможных модифицированных программ:
á ! A q i e c `
должен выбросить ошибку. Удостоверьтесь, что вы модифицируете байтами (например, á
наверху фактически представлен байт , а не фактический двухбайтовый символ )á
Тестовые случаи:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Правила:
- Предоставьте среду тестирования, которая может проверить правильность вашей программы, поскольку будет много возможных программ (количество байт * 8), или полное доказательство подлинности.
- Пожалуйста, убедитесь, что ваша программа действительна, прежде чем публиковать ее.
- Вывод должен быть либо true / falsey (в любом случае это нормально), либо два разных значения без ошибок
- Ошибки могут быть во время выполнения, компилятор, интерпретатор и т. Д.
+1
чем большинство моих недавних решений! : \Ответы:
Python 2 , 35 байт
Попробуйте онлайн!
Использует проверку степени двойки
n&-n==n
, устраняяn==0
ложные срабатывания.Для справки: это пары бинарных операторов с одним символом, которые разделены одним битом, что затрудняет их использование:
К счастью,
&
и^
нет среди них.Также обратите внимание, что
==
может стать<=
, и+
может стать комментарием#
.Python 2 , 41 байт
Попробуйте онлайн!
Принимая TFeld - х
lambda a,b:bin(a^b).count('1')==1
и делает его нетронутым, изменяя 1, чтобы+True
и==
вis
. Спасибо Джо Кингу за 1 байт.источник
Python 2 ,
726750 байтПопробуйте онлайн!
-5 байт, спасибо Джо Кингу
Возвращает
True
/False
для правды / фальси.Программа в основном такая же
lambda a,b:bin(a^b).count('1')==1
, но без чисел и других символов, которые работают, когда переворачивается.Работает, убедившись, что почти все является именованной функцией (которые все довольно нетронуты)
Первоначальный тест в конце переворачивает один бит (для каждого бита) и пробует функцию на входе. Если это работает (правильно или нет), это изменение печатается. Нет печатных программ = нетронутая функция.
источник
Java 8,
68615645 байт-11 байт благодаря @EmbodimentOfIgnorance , заменяя константу
java.awt.Font.BOLD
на-~(a^a)
.Попробуйте онлайн.
Объяснение:
Самая короткая базовая функция будет:
Попробуйте онлайн.
Это модифицируется, чтобы не было ни цифры,
=
ни одного из+/*
операндов в ней для числовых вычислений (так что+
для конкатенации строк это нормально):+""
И.equals
должны сравнивать поString.equals(String)
аint==int
.ПРИМЕЧАНИЕ:
Integer.equals(int)
здесь можно использовать, но будет больше байтов, так как оба.bitCount
иjava.awt.Font.BOLD
являются примитивными,int
а неInteger
-объектами, поэтомуnew Integer(...)
потребуется дополнительное преобразование одного из двух вInteger
-объект, прежде чем мы сможем использовать.equals
.источник
java.awt.Font.BOLD
, но вашObjects.equals
хороший гольф, спасибо!Objects
это частьjava.util.
импорта, поэтому я должен добавить это к подсчету байтов, я боюсь, делая его 69 байтов .. :(-~(a^a)
работать на 1?C (gcc) , 56 байтов
Попробуйте онлайн!
Возвращает,
0
если пара отличается на 1, ненулевое значение в противном случае. Немного необычно для C, если только вы не считаете, что он возвращается,EXIT_SUCCESS
если пара отличается на 1, иначе любое другое значение.Использует
sizeof((char)d))
для создания константы1
нетронутым способом, а также заставляет имя функции быть нетронутым.Затем XORs это 1 с поп-счет XOR аргументов. К счастью,
^
символ легко сохранить нетронутым, как и очень длинный идентификатор__builtin_popcount
.Между тем вот сценарий, используемый для проверки решения:
Который использует
./flipbit
инструмент, который я написал, чей источник просто:Хитрые биты были:
=
не работает, так как это может быть сравнение в каждом случае, когда оно может появиться. Точно так-
же не работает хорошо. Таким образом^
используется для утверждения равенства с 1.источник
^
оператора нетронутым? Если биты на этом были изменены, что мешает ему стать другим оператором? Это все равно будет компилироваться, но просто даст вам неправильный ответ. Я что-то неправильно понимаю о значении слова «нетронутый» здесь?^
можно заменить только на какой-либо один_\ZVN~Þ
или непечатаемый символ в кодовой точке 30.~
Это единственный из тех, который является оператором, но это только унарный оператор.__LINE__
вместоsizeof(char)
. Я думаю, что можно предположить, что ваша функция будет в строке 1 вашего .c файла. Или дажеunix
определяется до 1 на TIO, и, вероятно, большинство других Linux.d
запекается в источнике с наименьшим возможным байтом. В противном случаеd
(или как вы называете функцию) можно просто изменить, и код все равно будет работать. Даже(__LINE__)
с неd();
работает, потому чтоd();
может быть изменен на любую другую букву, и он все равно будет компилироваться, так как функция никогда не должна вызываться, поэтому не связана.R ,
3837 байт-1 байт благодаря Нику Кеннеди.
Попробуйте онлайн! (Спасибо Джузеппе за правильную настройку TIO.)
Доказательство того, что это нетронутый (с помощью проверки Ника Кеннеди ).
Выводит 0 для false и положительное значение для truey, что, как я понимаю, является приемлемым, поскольку R будет интерпретировать их как False и True.
Пояснение:
bitwXor(a,b)
дает (как целое число) побитовый XOR междуa
иb
. Чтобы проверить, является ли оно степенью 2, проверьте, является ли его лог в базе 2 целым числом. Функцияdpois
дает функцию плотности вероятности распределения Пуассона: ее значение равно 0 для нецелых значений и что-то положительное для неотрицательных целых чисел. ЭтоT
потому, чтоdpois
требует второго аргумента (любые положительные реальные работы, иT
интерпретируется как 1).Если мы настаиваем на выводе в различные значения, следующая версия выводит FALSE или TRUE в 42 байта (спасибо Giuseppe за -8 байтов):
и также нетронутый . Попробуйте онлайн!
источник
pi
на,T
чтобы сохранить байт (все еще нетронутый). Также ваш TIO не соответствует вашему ответу на данный момент.scan()
; у тебя есть идея? (Код отлично работает на компьютере.)F
вместо тогоexp(-Inf)
же, что и у НикаT
:-)R , 83 байта
Попробуйте онлайн!
Доказательство того, что это нетронутый
Обойти тот факт, что
as.integer
иas.double
т. Д. Только немного отis.integer
,is.double
и т. Д. Было сложнее всего. В конце концов, лучшее, что я мог сделать , это использоватьsum(T^el(.[-T])
как способ генерации единицы, так и проверку,as.double
которая вернула вектор длины> 1. Упаковкаt
должна справиться с тем, что иначеidentical
может статьide~tical
.источник
Юлия 0,7 , 20 байт
Попробуйте онлайн!
Вот нетронутый валидатор, который пытается запустить каждую измененную анонимную функцию для некоторого ввода, и ни один из них не проходит успешно Обратите внимание, что код имеет многобайтовый символ Unicode, и некоторые возможные выходные данные от переворачивания битов даже не включены, так как они генерируют недопустимые строки UTF-8.
источник
x
иy
один на один, так что я считаю, что это контрпример.y
иx
также 1 бит9
и6
соответственно.C # (интерактивный компилятор Visual C #) , 37 байт
a=>b=>
Часть не может быть изменена, иначе функция недействительна.В
a!=b
,=
нельзя изменить, так какint
не может быть преобразован вbool
.Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) ,
12810177706174 байта-27 байт благодаря Ascii-Only
Попробуйте онлайн!
Вы должны быть достаточно изобретательны, чтобы получать числа в C # без использования литералов. Использует только оператор ^. Переменные a, b находятся на расстоянии более 1 бита друг от друга, а все остальное является ключевым словом / именем.
источник
+/*=
для математических, ни для проверочных операций. ;)+
JavaScript (ES6 в строгом режиме), 61 байт
Попробуйте онлайн! или убедитесь, что все измененные программы неверны
источник
Groovy ,
4736 байтПопробуйте онлайн!
Адаптированная версия Java-ответа Кевина Круйссена .
источник
MATLAB, 37 байт
Извините, нет ссылки на TIO, потому что я не могу заставить тестовый набор работать под Octave. Спасибо @ExpiredData за некоторые полезные комментарии.
Тестирование:
источник
numel
Вместо этого я выбрал MATLAB , потому что мой набор тестов не работает в Octave.eye
!Perl 6 ,
7743 байтаСпасибо Джо Кингу за -33 байта.
Это эквивалентно
1
был переписан какelems([""])
.2
был переписан какsum(elems([""]),elems([""]))
;elems(["",""])
Может показаться, что работает, ноelems([""-""])
также действителен и, кажется, зависает тестерПопробуйте онлайн!
источник
JavaScript (Node.js) , 20 байт
Попробуйте онлайн!
валидатор по Арно, модифицированный (не использовать строгий)
источник