Основываясь на нотации «двоичный, но с двойками», упомянутой в этом видеофильме с числовыми файлами , напишите функцию, которая принимает в качестве входного значения одно число и выводит все варианты этого числа в «двоичной» системе, где разрешены двойки.
правила
- Код должен быть только функцией / методом, а не полной программой
- Ввод - это целое число, переданное в качестве единственного параметра функции
- Выходные данные - все допустимые изменения входного числа, преобразованного в двоичную запись, но с двойным
- Выходные данные - это возвращаемое значение функции, но они могут быть в любом удобном для вас формате, если они очевидны (например, 3 дюйма, 3 строки, строка с разделителями-запятыми / пробелами, массив значений и т. Д.), Порядок не важен
- В том маловероятном случае, если язык содержит встроенную функцию для достижения результата, он запрещен
- Самый короткий код в байтах - победитель
Пояснения к выводу
Например, если вы передали число 9
, вы можете преобразовать его в двоичное число как 1001
, но если вы разрешите 2
s в каждой позиции, вы также можете записать его как 201
(т.е. 2*4 + 0*2 + 1*1
) или 121
(т.е. 1*4 + 2*2 + 1*1
), как показано в этой таблице:
+----+----+----+----+
| 8s | 4s | 2s | 1s |
+----+----+----+----+
| 1 | 0 | 0 | 1 |
| 0 | 2 | 0 | 1 |
| 0 | 1 | 2 | 1 |
+----+----+----+----+
Поэтому, если она пройдена 9
, ваша функция должна будет вернуть три числа 1001
, 201
и 121
.
Формат и порядок не имеют значения, так долго , как это очевидно (то есть [121,201,1001]
, "0201 0121 1001"
, ("1001","121","201")
являются действительными результаты , когда дается ввод 9
).
Примеры
2
=>10, 2
9
=>1001, 201, 121
10
=>1010, 210, 202, 1002, 122
23
=>2111, 10111
37
=>100101, 20101, 100021, 20021, 12101, 12021, 11221