Входные данные:
- Целое число
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]]