Соревнование
Вам дано:
- непустой, несортированный список h натуральных чисел (стог сена)
- целое положительное число n (стрелка)
Ваша задача - вернуть список всех уникальных десятичных конкатенаций перестановок h , двоичное представление которых содержит двоичное представление n .
Примеры
h = [1, 2, 3]
n = 65Есть только одна подходящая конкатенация, поэтому ожидаемый результат
[321]
.h = [1, 2, 3]
n = 7На этот раз существует три объединения, которые содержат двоичный шаблон 111 . Ожидаемый результат
[123, 231, 312]
.h = [12, 3]
n = 7Доступны только две перестановки, и обе совпадают. Ожидаемый результат
[123, 312]
.h = [1, 2, 2]
n = 15Единственная совпадающая конкатенация - 122 ( 1111010 в двоичном формате, который содержит 1111 ), поэтому ожидаемый результат равен
[122]
. Обратите внимание, что две перестановки на самом деле приводят к 122, но вы не можете выводить[122, 122]
.
Разъяснения и правила
- Вы можете взять стрелку как целое число (
65
), строку, представляющую десятичное значение ("65"
), или строку, представляющую двоичное значение ("1000001"
). - Вы можете взять стог сена как собственный массив / объект / набор целых чисел (
[11,12,13]
), собственный массив / объект / набор строк, представляющих десятичные значения (["11","12","13"]
), или строку десятичных значений ("11 12 13"
или"11,12,13"
) с разделителями . Вы также можете выбрать вариант, используя массивы цифр (например[[1,1],[1,2],[1,3]]
). - Вывод должен соответствовать одному из форматов, описанных выше для стога сена, но не обязательно тот же.
- Вы не должны обрабатывать стога сена, чья максимальная десятичная конкатенация больше, чем наивысшее представимое целое число без знака в вашем языке.
- Кроме того, ваш код должен теоретически поддерживать любые входные данные - при условии, что у него достаточно времени и памяти.
- Это
СПАРТА!Code-Golf , поэтому выиграй самый короткий ответ в байтах!
Контрольные примеры
Haystack | Needle | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ] | 65 | [ 321 ]
[ 1, 2, 3 ] | 7 | [ 123, 231, 312 ]
[ 12, 3 ] | 7 | [ 123, 312 ]
[ 1, 2, 2 ] | 15 | [ 122 ]
[ 1, 2 ] | 7 | []
[ 12, 34, 56 ] | 21 | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ] | 511 | [ 53241 ]
[ 1, 3, 5, 7, 9 ] | 593 | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ] | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015 | [ 221112 ]
источник
set([(1, 2, 2)])
. Это действительно или я должен избавитьсяset
?["12","3"]
и["1","23"]
два разных стога сена.Ответы:
05AB1E ,
108 байтПринимает стрелку в двоичном виде, чтобы сохранить 1 байт.
-2 байта благодаря Emigna
Попробуйте онлайн!
источник
Python 2, 90 байт
-3 байта благодаря @ Габору Фекете
Попробуйте онлайн
Принимает в качестве входного массива строки, представляющие целые числа из сена и строки, представляющие иглу в двоичном виде
источник
{...}
вместоset(...)
сохранения 3 байта.H=['1'], N='0'
.Java 10,
320312305297292 байтаВвод в виде списка и двоичных строк, вывод в виде строк на новых строках.
Объяснение:
Попробуй это здесь.
источник
l->n->{...
после того,void p(...
как лямбда - это ответ на приглашение, и для работы лямбды требуется настройка функции. Консенсус в отношении «выражений функций» является чем-то вроде «последним« выражением »вашего представления может быть« выражение функции », если при сохранении в переменной оно соответствует требованиям ответа функции« IIRC. Но это только вопрос форматирования, причем субъективный.void
потому что он был короче, чем вторая лямбда и кратный.apply
. Не проверял его на этот ответ (то естьvoid p(List l,int k)
& 2xp(l,0)
против(l,k)->
& 2xp.apply(l,0)
). Хм ... второй кажется в этом случае на 1 байт короче. Но вы говорите, правила говорят, что вам разрешено иметь только один лямбда-метод? Все еще немного сбит с толку, почему это должно быть последним. Лично я всегда вывешиваю свои ответы в следующем порядке:imports; class-fields; main-method/lambda; other methods
.imports;helper methods;lambda
void p(List l,int k)
& 2xf(l,0);
противf=(l,p)->
& 2xp.apply(l,0);
(что означает, что текущая версия на 1 байт короче). Что касается порядка, я просто буду придерживаться этого, поскольку я сделал это со всеми моими ответами, и для меня также имеет смысл лично начать с основного метода в объяснении, а затем вспомогательного метода (ов), если Есть такие.f=(lambda)
на Java, этоjava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
Japt ,
1514131210 байтПринимает стог сена как массив целых чисел, а стрелку - как двоичную строку. Выводит массив целочисленных строк.
Попытайся
объяснение
источник
®¬nÃ
сохраняет байт на отображении. (Я бы также переместилсяâ
в середину программы, чтобы избавиться от второгоÃ
; не сохраняет никаких байтов, но он немного более эффективен и выглядит немного лучше)â
было быстрое исправление, когда Арнольд указал, что я забыл удалить дубликаты из окончательного массива, но, вы правы, удаление дубликатов перед запуском фильтра будет более эффективным.Рубин ,
6159 байтПопробуйте онлайн!
Интересная особенность дня: я не знал, что смогу вывести двоичное представление строки, содержащей число.
Пример:
источник
JavaScript (ES6), 140 байт
Принимает иглу в виде двоичной строки.
Показать фрагмент кода
источник
Брахилог , 15 байт
Попробуйте онлайн!
объяснение
источник
Mathematica,
170156 байтвход
выход
источник
v[#2, 2]
.CJam,
23222119 байтЭто блок, который принимает входные данные
n h
в стеке и оставляет выходные данные в виде массива в стеке.Объяснение:
источник
R, 114 байт
Использует кучу пакетов.
pryr::f()
автоматически создает функцию, получаяp
строку двоичного шаблона для поиска иx
вектор с другим входом в качестве входных данных.combinat::permn
создает все перестановкиx
.R.utils::intToBin
хорошая и многословная версия для преобразования числового (или символьного представления числового) в двоичное число, которое уже удобно хранить в виде символа. Таким образом, применяя это ко всем перестановкам и выводя их, если двоичная строкаp
содержится в двоичной версии конкатенации. Явная новая строка печатается, потому что в противном случае вывод будет12 56 3456 34 1234 56 1234 12 56
.plyr
«sl_ply
используется для surpress вывода списка нуля, кроме обычного вывода. Если такой вывод разрешен:Тогда мы можем сохранить несколько байтов, используя
lapply
вместо этого:108 байтов:
Если такой вывод разрешен:Тогда мы можем сделать это еще короче:
101 байт:
Не положено.источник
Perl 6 , 69 байт
источник