отказ
Этот вопрос не является дубликатом этого вопроса . Я не считаю конкретные цифры, так как они уже установлены в исходных параметрах. Этот вопрос сосредоточен на десятичных числах, которые могут быть построены из двоичных строк на основе предоставленных цифр.
Вызов
С учетом двух целых чисел X
и Y
, представляющих количество нулей ( 0
) и ones ( 1
) соответственно, вычисляются все возможные десятичные эквиваленты, которые можно определить из создания двоичных строк, используя только предоставленные нули и единицы, и отображают их в качестве выходных данных.
Пример 1:
Входные данные: 0 1
Выход: 1
Объяснение: Только один 1
для учета, который может быть преобразован только одним способом.
Пример 2:
Входные данные: 1 1
Выход: 1,2
Пояснение: 01
конвертирует в 1, 10
конвертирует в 2.
Пример 3:
Входные данные: 3 2
Выход: 3,5,6,9,10,12,17,18,20,24
Пояснение: Три 0
с и два 1
с делают 00011
(3), 00101
(5), 00110
(6), 01001
(9), 01010
(10), 01100
(12), 10001
(17), 10010
(18), 10100
(20), 11000
(24)
Ограничения и правила
- Я только ожидаю, что ваш код будет работать там, где
0 < X + Y <= 16
максимальное число в выводе может быть получено только за 161
с, то есть параметры0
и16
. - В результате вышеприведенного ограничения диапазон чисел, которые мы ожидаем в выводе, от
0
и65535
. - Я приму функции или код, при условии, что будет получен итоговый вывод, будь то список, разделенный запятыми, массив, список, выводимый в STDOUT и т. Д. Единственный критерий, который я должен подчеркнуть, - это то, что он должен быть отсортирован.
- Это код гольфа, минимум байтов получит максимальную славу.
- Мы не потерпим глупых лазеек
0 0
?0 <= X + Y <= 16
да, потому что0 0
это будет считаться допустимым вводом, который удовлетворяет этому правилу.0 0
? Число 0 может быть представлено нулем, одним или несколькими нулями.Ответы:
Желе , 8 байт
Попробуйте онлайн!
Как это устроено
источник
Python, 60 байт
Проверьте это на Ideone .
Как это устроено
Все положительные числа, которые могут быть представлены в двоичном виде с x нулями и y , явно меньше 2 x + y , поскольку каноническое двоичное представление последних имеет x + y + 1 цифру.
Лямбда просто перебирает целые числа в [0, 2 x + y ) и сохраняет все целые числа n в этом диапазоне, которые имеют y . Поскольку n <2 x + y , можно представить с x (или менее) нулями.
источник
Mathematica,
5957 байтОбычный результат с Mathematica: функции высокого уровня = хорошие, длинные имена функций = плохие.
Join[0&~Array~#,1&~Array~#2]
создает список с правильным количеством0
s и1
s.Permutations
генерирует все перестановки этого списка, без повторений (как я узнал) и в отсортированном порядке.#+##&~Fold~#
(версия для гольфа#~FromDigits~2
) преобразует список цифр base-2 в целое число, которое они представляют.Предыдущая версия, перед комментарием Мартина Эндера:
источник
FromDigits
обычно может быть сокращено:#+##&~Fold~#&/@Permutations...
Select[Range[2^+##]-1,x=#;DigitCount[#,2,1]==x&]&
CJam (
1514 байт)Это анонимный блок (функция), который принимает входные данные в виде массива
[number-of-ones number-of-zeros]
и возвращает выходные данные в виде массива.Онлайн демо
Долгий путь от цели, но более интересный : это без встроенных перестановок или преобразования базы:
Это бы хорошо работало, когда разворачивался GolfScript.
источник
ee{)*}/
с чем - то , используя.*
и придумал это 14-байтовое решением: выглядит немного неэффективную сейчас , хотя.{As.*s:~e!2fb}
s:~
.*
и решил, что этоee
было лучше, чем, например2,:a.*e_
. Я не осознавал, чтоe!
это даст одинаковый результат независимо от порядка его аргумента.Japt , 16 байт
Проверьте это онлайн!
Как это устроено
Альтернативная версия, 17 байт
Я пытался продвигать оба варианта игры в гольф, но я просто не могу найти слабины ...
источник
("0".p(U)+"1".p(V)).á().m("n",2)
; каждая из.x()
функций определена в исходном файле .Рубин, 63 байта
Простая реализация. Предложения по игре в гольф приветствуются.
Ungolfing
источник
Pyth - 11 байт
Тестовый пакет .
источник
Python 2 -
10599 байт+8 байт, потому что наш вывод должен быть отсортирован
источник
Mathematica, 47 байт
Безымянная функция, принимающая два аргумента: число
1
s, число0
s.По сути это порт решения Python Дениса . Мы создаем диапазон от
0
до и затем сохраняем только те числа, количество битов которых равно первому вводу. Наиболее интересный бит, вероятно, использует магию последовательности, чтобы избежать скобок вокруг добавления двух аргументов.2x+y-1
1
2^+##
источник
MATLAB 57 + 6
бегать, используя
ungolfed
источник
MATL , 9 байт
Попробуйте онлайн!
объяснение
Подход похож на тот, что дан в ответе Денниса «Желе» .
источник
На самом деле, 21 байт
Порт моего Ruby-ответа . Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Как это устроено
источник
Groovy 74 байта, 93 байта или 123 байта
Я не знаю, какой из них вы считаете более полно отвечает на вопрос, но ...
74 байтовое решение
Для входа 1,2 вы получаете:
93-байтовое решение
Для входа 1,2 вы получаете:
123-байтовое решение
Для входа 1,2 вы получаете:
Попробуйте это здесь:
https://groovyconsole.appspot.com/edit/5143619413475328
источник
JavaScript (Firefox 48),
8576747170 байтСохранено 3 байта благодаря @Neil.
Понимание массива потрясающее. Жаль, что они еще не вошли в официальную спецификацию ECMAScript.
JavaScript (ES6),
1098779787170 байтТеперь должно работать во всех браузерах, соответствующих ES6. На этом сохранено 7 байт, также благодаря @Neil.
источник
undefined
при каждом тестовом прогоне ...?f=(m,n)=>...
, затем вызываете его следующим образомf(3,2)
. Если это то, что вы делаете, какой браузер вы используете?eval
версию без использования (делает то же самое, но на 3 байта длиннее):(m,n)=>{a="";for(i=0;i<1<<m+n;i++)if(i.toString(2).split(1).length==n+1)a+=i+" ";return a}
Groovy 80 байт
основываясь на ответе @carusocomputing
его 123-байтовое решение может быть сжато до 80 байт:
80-байтовое решение
Для входа 1,2 вы получаете:
источник
C (gcc) ,
7268 байтПопробуйте онлайн!
К сожалению, в стандартной библиотеке нет popcount (), но GCC предоставляет его как «встроенную функцию». Вывод отсортирован, но в обратном порядке.
Спасибо @ceilingcat за 4 бритья!
источник
PHP, 80 или 63 байта
в зависимости от того, должен ли я использовать
$argv
или могу использовать$x
и$y
вместо этого.печатает все совпадающие числа в порядке убывания, разделенные подчеркиванием.
имя файла не должно начинаться с цифры.
нет встроенных, 88 или 71 байт
добавьте один байт каждый только для одного подчеркивания после каждого числа.
@WallyWest: Вы были правы. Сохраняет 3 байта для меня от
for($i=-1;++$i<...;)
источник
Perl 6 ,
64 6249 байтовОбъяснение:
источник