Входные данные:
- Целое число
n
в диапазоне2 <= n <= 10
- Список целых положительных чисел
Выход:
Преобразуйте целые числа в их двоичное представление (без начальных нулей) и соедините их все вместе.
Затем определите все двоичные подстроки, которые образуют «бинарный забор», используя n
количество столбов забора. Пространства (нули) между каждым забором не имеют значения (не менее 1), но сами столбы должны быть одинаковой ширины.
Здесь регулярные выражения двоичные подстроки должны соответствовать для каждого n
:
n Regex to match to be a 'binary fence' Some examples
2 ^(1+)0+\1$ 101; 1100011; 1110111;
3 ^(1+)0+\10+\1$ 10101; 1000101; 110011011;
4 ^(1+)0+\10+\10+\1$ 1010101; 110110011011; 11110111100001111001111;
etc. etc. You get the point
Глядя на n=4
примеры:
1010101
^ ^ ^ ^ All fence posts have a width of one 1
^ ^ ^ with one or more 0s in between them
110110011011
^^ ^^ ^^ ^^ All fence posts have a width of two 1s
^ ^^ ^ with one or more 0s in between them
11110111100001111001111
^^^^ ^^^^ ^^^^ ^^^^ All fence posts have a width of four 1s
^ ^^^^ ^^ with one or more 0s in between them
Затем мы выводим числа, которые используют двоичные цифры совпадений «двоичные заборы».
Пример:
Входные данные : n=4
,L=[85,77,71]
Двоичное представление этих целых чисел, объединенных вместе:
1010101 1001101 1000111
(ПРИМЕЧАНИЕ. Пробелы добавляются только в качестве пояснения для примера).
Так как n=4
мы ищем подстроки, соответствующие регулярному выражению (1+)0+\10+\10+\1
, в этом случае мы можем найти две:
1010101
(в позиции (1010101) 1001101 1000111
); и 11001101100011
(в положении 101010(1 1001101 100011)1
)
Первый двоичный забор использует только двоичные цифры из 85
, а второй двоичный забор использует двоичные цифры из всех трех целых чисел. Таким образом, вывод в этом случае будет:
[[85],[85,77,71]]
Правила вызова:
- Хотя это также упоминается в приведенном выше примере, последнее предложение является важным: мы выводим числа, для которых используются двоичные цифры, в подстроке «двоичный забор».
- Ввод / вывод является гибким. Входные данные могут быть списком / массивом / потоком целых чисел, строкой, разделенной запятой / запятой / символом новой строки, и т. Д. Выходными данными могут быть двумерный список целых чисел, одиночная строка с разделителями, список строк, новая строка, напечатанная в STDOUT, и т. Д. Все зависит от вас, но, пожалуйста, укажите, что вы использовали в своем ответе.
- Порядок вывода самого списка не имеет значения, но вывод каждого внутреннего списка, конечно, в том же порядке, что и список ввода. Таким образом, в приведенном выше примере
[[85,77,71],[85]]
это также допустимый вывод, но[[85],[77,85,71]]
это не так. - Как вы, возможно, уже заметили из примера (the
85
), двоичные цифры могут использоваться несколько раз. - Регулярные выражения должны полностью соответствовать подстроке. Так
110101
или010101
нет, когда-либо действительные «двоичные заборы» (10101
однако, если и такn=3
). - Элементы в выходном списке не являются уникальными, только двоичные позиции «двоичных ограждений» являются уникальными. Если несколько «двоичных ограждений» могут быть созданы с одним и тем же целым числом, мы добавляем их несколько раз в список вывода.
Например:n=2
,L=[109, 45]
(двоичный1101101 101101
) может формировать эти подстроки «двоичного забора»:11011
(в положении(11011)01 101101
);101
(в положении1(101)101 101101
);11011
(в положении110(1101 1)01101
);101
(в положении1101(101) 101101
);11011
(в положении110110(1 1011)01
);101
(в положении1101101 (101)101
);101
(в положении1101101 101(101)
), поэтому вывод будет[[109],[109],[109,45],[109],[109,45],[45],[45]]
.
Другой пример:n=2
,L=[8127]
(двоичный1111110111111
) может формировать эти подстроки «двоичного забора»:1111110111111
(в положении(1111110111111)
);11111011111
(в положении1(11111011111)1
);111101111
(в положении11(111101111)11
);1110111
(в положении111(1110111)111
);11011
(в положении1111(11011)1111
);101
(в положении11111(101)11111
), поэтому вывод будет[[8127],[8127],[8127],[8127],[8127],[8127]]
. - Если действительная выход не возможно, вы можете вернуть пустой список или какой - либо другой вид продукции falsey (
null
,false
, выдает сообщение об ошибке и т.д. Опять же , ваш вызов).
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input: Output
(the binary below the output are added as clarification,
where the parenthesis indicate the substring matching the regex):
4, [85,77,71] [[85],[85,77,71]]
(1010101) 1001101 1000111; 101010(1 1001101 100011)1
2, [109,45] [[109],[109],[109,45],[109],[109,45],[45],[45]]
(11011)01 101101; 1(101)101 101101; 110(1101 1)01101; 1101(101) 101101; 110110(1 1011)01; 1101101 (101)101; 1101101 101(101)
3, [990,1,3,3023,15,21] [[990,1,3,3023],[990,1,3,3023],[1,3,3023],[21]]
(1111011110 1 11 1)01111001111 1111 10101; 11110(11110 1 11 101111)001111 1111 10101; 1111011110 (1 11 101111001111) 1111 10101; 1111011110 1 11 101111001111 1111 (10101)
2, [1,2,3,4,5,6,7,8,9,10] [[1,2,3],[2,3],[4,5],[5],[5,6,7],[6,7],[6,7],[8,9],[9],[10]]
(1 10 11) 100 101 110 111 1000 1001 1010; 1 (10 1)1 100 101 110 111 1000 1001 1010; 1 10 11 (100 1)01 110 111 1000 1001 1010; 1 10 11 100 (101) 110 111 1000 1001 1010; 1 10 11 100 10(1 110 111) 1000 1001 1010; 1 10 11 100 101 (110 11)1 1000 1001 1010; 1 10 11 100 101 1(10 1)11 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1)001 1010; 1 10 11 100 101 110 111 1000 (1001) 1010; 1 10 11 100 101 110 111 1000 1001 (101)0
3, [1,2,3,4,5,6,7,8,9,10] [[4,5],[8,9]]
1 10 11 (100 101 )110 111 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1001) 1010
10, [1,2,3,4,5,6,7,8,9,10] []
No binary fences are possible for this input
6, [445873,2075] [[445873,2075],[445873,2075],[445873,2075]]
(1101100110110110001 1)00000011011; 110(1100110110110001 100000011)011; 1101100(110110110001 100000011011)
2, [8127] [[8127],[8127],[8127],[8127],[8127],[8127]]
(1111110111111); 1(11111011111)1; 11(111101111)11; 111(1110111)111; 1111(11011)1111; 11111(101)11111
2, [10,10] [[10],[10,10],[10]]
(101)0 1010; 10(10 1)010; 1010 (101)0
4, [10,10,10] [[10,10],[10,10,10],[10,10]]
(1010 101)0 1010; 10(10 1010 1)010; 1010 (1010 101)0
[1,2,3]
подходит для теста 4? Я вижу забор(1 10 11)
2, [10, 10]
[[10],[10,10],[10]]