Вызов
Задав двоичное число в качестве ввода любым способом, «упростите» число, используя полную программу или функцию.
вход
[binary]
binary
число в двоичном коде, которое больше 0.
Выход
Возьмите входные данные, преобразуйте их в основание 10 без использования встроенной функции, затем, если это число содержит только 1 и 0, преобразуйте его в число 10, как если бы это было другое двоичное число. Повторяйте процесс, пока число не может быть прочитано в двоичном виде, и выведите это число.
Дополнительная информация
Если вход равен 1, просто выведите
1
. Ваша программа не должна бесконечно упрощаться 1.Это кодовый гольф, поэтому самый короткий ответ в байтах к вторнику (17 ноября) выигрывает.
Если что-то сбивает с толку, оставьте комментарий с указанием того, что мне нужно прояснить, и я внесу соответствующие изменения.
Встроенные средства для преобразования базы не допускаются.
Примеры
Input | Output
1 | 1
1010 | 2
1011 | 3
1100100 | 4
1100101 | 5
1111110011 | 3
источник
Ответы:
Pyth,
2016 байтов4 байта благодаря Якубе
Половина кода (
u+yNsTG0
) - это просто базовый код преобразования.Тестирование
Входные данные
1
обрабатываются тем фактом, чтоu
значение перестает меняться.источник
CJam,
2423 байтаПопробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
"10"
строкуlength-1
времени, или вы можете пропустить декремент?"10"
в,""
если целое число имеет одну цифру. Это гарантирует, что код не попадет в бесконечный цикл.Пип,
2827 байтПринимает ввод в качестве аргумента командной строки. Мы хотим , чтобы петли до тех пор ,
a=1
илиa
содержит некоторый символ (ы) , кроме 0 и 1 -х годов. Последнее условие проверяется путемRM
ввода всех символов вt
=10
froma
. Если что-то осталось, условие правдивое.Внутри цикла преобразование работает следующим образом:
Ставить
a
в конце автопечать.Рекурсивное решение в 28 байтов:
источник
Python 2, 52
Проще думать об этом как о двух рекурсивных функциях:
Функция
g
преобразует десятичное значение в двоичное, и функцияf
применяетсяg
повторно, если ее аргумент состоит из цифр 0 и 1 ('2'>max(`n`)
) и не имеет значения1
. Гольф-код объединяет их в одну функцию, вставляя определениеg(n)
дляf(n)
, заменяя рекурсивный вызов наg
наf
. Базовый корпусn=0
изg
автоматически обрабатываются чекаn>1
.источник
L
отrepr
...Пролог,
220212 байтОбъяснение
р является основной функцией и выполняет следующие шаги (с помощью b, x, y):
Изменить: 8 байтов сохранены путем объединения p-предложений с ИЛИ.
источник
Mathematica
107106С байтом, сохраненным DLosc.
Разбейте ввод на его цифры. Если вход 1, выведите 1.
Если входными данными являются числа, состоящие из 0 и 1, преобразуйте их в десятичную и снова выполните.
В противном случае верните ввод.
Первый шаг дает 1011, который в свою очередь дает 3.
Здесь мы тестируем, начиная с 1011.
источник
Javascript,
132, 123 байтаНу, это не самый лучший ответ, но ..
К вашему сведению, если указан неверный ввод, он отображает то же самое для пользователя.
источник
for
вместо этогоwhile
и устанавливая значения непосредственно в операторе (это также уменьшает некоторые{}
), отбрасывая некоторые;
, используя описание функции ES6, увеличивая значениеi
inline. Это будет выглядеть следующим образом :c=x=>{for(r=0;x&&!/[2-9]/.test(x);x=r)for(i=0;x>0;r+=x%10*Math.pow(2,i++),x=parseInt(x/10));alert(x)};c(prompt())
.function c(x){while(x^0&&!/[2-9]/.test(x)){for(i=r=0;x;i++)r+=x%10*Math.pow(2,i),x=0|x/10;x=r}alert(x)}c(prompt())
c=x=>
самого начала, не работал на консоли Chrome или Firefox. :( @ ן nɟuɐɯɹɐ ן oɯ, не могу обернуть голову вокруг условия XOR, иx=0|x/10
вместо этогоparseInt
я включил остальные изменения. Спасибо ..c=x=>{for(r=0;x!=0&&!/[2-9]/.test(x);x=r)for(i=r=0;x;)r+=x%10*Math.pow(2,i++),x=parseInt(x/10);alert(x)};c(prompt())
. Это определенно работает в Firefox 42, попробуйте эту скрипку . Обратите внимание, что эта более удачная версия, а также ваш оригинальный код не работают1
и будут бесконечно повторяться.c=x=>
это какfunction c(x){}
см. « Функции стрелок ».JavaScript ES6, 52
Как функция. Аргумент функции должен быть либо строкой двоичных цифр, либо числом, десятичное представление которого содержит только 1 и 0.
Протестируйте приведенный ниже фрагмент кода в браузере, совместимом с EcmaScript 6, - реализуя функции стрелок, строки шаблонов и оператор распространения (я использую Firefox)
источник
n+=+c+n
для двоичного преобразования. Так элегантно ...Математика,
62595548 байтовСохранено 7 байтов благодаря Мартину Бюттнеру.
источник
Javascript (ES7)
8780787774 байтаДемонстрационная версия фрагмента для поддержки браузеров (в настоящее время только Firefox каждую ночь поддерживает экспоненциальный оператор)
Javascript (ES6) 81 байт
Демонстрационная версия фрагмента поддержки браузеров
источник
𝔼𝕊𝕄𝕚𝕟, 37 символов / 54 байта
Try it here (Firefox only).
Не уверен, что
+
оператор считается встроенным для двоичного преобразования ...источник
Perl 6 , 67 байт
источник
PHP,
210204 байтаЯ впервые пишу здесь, так что надеюсь, вам, ребята, понравится! Даже если это явно не лучший способ написать это, я все равно рад показать это здесь!
Код
Я сделал рекурсивную функцию "j", которая сначала проверит, равен ли ввод 1. Если это так, функция возвращает 1, как и ожидалось, иначе она разделит число в массиве для вычисления десятичного значения, но только если число двоичное. Если это не так, он вернет номер как есть.
Код без правил
Я использовал выражение «foreach» вместо своего начального «for», что позволило мне получить 6 байтов, но я уверен, что есть еще много чего сделать.
источник
PHP,
114112 байттакже работает для
0
. Беги с-r
.count_chars($s,3)
возвращает строку, содержащую все символы из строки (как этоarray_unique
делает для массивов). Для двоичных чисел, то это будет0
,1
или01
. Для других чисел это будет содержать цифру больше, чем1
, поэтому<2
вернет true только для двоичных чисел.&$s>1
нужен для особого случая1
.Остальное просто: переберите биты, сдвинув значение и добавив текущий бит, и, наконец, скопируйте число (приведенное к строке) в $ s для теста внешнего цикла.
источник
CoffeeScript,
9289 байтJavaScript (ES6),
10510190 байтдемонстрация
Работает только в ES6-совместимых браузерах, таких как Firefox и Microsoft Edge
источник
1
. потому что это не входит в цикл, я предполагаюScala, 128 байт
источник
Матлаб (115)
bin2dec
)источник