Entrada:
- Um número inteiro
n
no intervalo2 <= n <= 10
- Uma lista de números inteiros positivos
Resultado:
Converta os números inteiros em suas representações binárias (sem zeros à esquerda) e junte todos eles.
Em seguida, determine todas as substrings binárias que formam uma 'cerca binária' usando a n
quantidade de postes da cerca. Os espaços (zeros) entre cada pilar são irrelevantes (pelo menos 1), mas os pilares devem ter largura igual.
Aqui, as expressões regulares que as substrings binárias devem corresponder para cada uma 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
Olhando para os n=4
exemplos:
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
Em seguida, produzimos os números que usam dígitos binários das correspondências 'cercas binárias'.
Exemplo:
Entrada: n=4
,L=[85,77,71]
A representação binária desses números inteiros unidos é:
1010101 1001101 1000111
(NOTA: Os espaços são adicionados apenas como esclarecimento para o exemplo).
Desde então n=4
, procuramos substrings que correspondam ao regex (1+)0+\10+\10+\1
; nesse caso, podemos encontrar dois:
1010101
(na posição (1010101) 1001101 1000111
); e 11001101100011
(na posição 101010(1 1001101 100011)1
)
A primeira cerca binária usa apenas dígitos binários de 85
e a segunda cerca binária usa dígitos binários de todos os três números inteiros. Portanto, a saída neste caso seria:
[[85],[85,77,71]]
Regras do desafio:
- Embora também seja mencionado no exemplo acima, a última frase é importante: Nós produzimos os números para os quais os dígitos binários são usados na substring 'cerca binária'.
- A E / S é flexível. A entrada pode ser uma lista / matriz / fluxo de números inteiros, sequência delimitada por espaço / vírgula / nova linha, etc. A saída pode ser uma lista inteira 2D, uma única sequência delimitada, uma lista de sequências, uma nova linha impressa em STDOUT, etc. Tudo depende de você, mas indique o que você usou em sua resposta.
- A ordem de saída da lista em si é irrelevante, mas a saída de cada lista interna é obviamente da mesma ordem que a lista de entrada. Portanto, com o exemplo acima, também
[[85,77,71],[85]]
é uma saída válida, mas[[85],[77,85,71]]
não é. - Como você já deve ter notado no exemplo (the
85
), dígitos binários podem ser usados várias vezes. - As expressões regulares devem corresponder inteiramente à substring. Portanto,
110101
ou010101
nunca existem 'cercas binárias' válidas (10101
é, no entanto, iffn=3
). - Os itens na lista de saída não são únicos, apenas as posições binárias das 'cercas binárias' são únicas. Se várias 'cercas binárias' podem ser criadas com o mesmo número inteiro, as adicionamos várias vezes à lista de saída.
Por exemplo:n=2
,L=[109, 45]
(binário1101101 101101
) pode formar estas subsequências 'cerca binário':11011
(em posição(11011)01 101101
);101
(na posição1(101)101 101101
);11011
(na posição110(1101 1)01101
);101
(na posição1101(101) 101101
);11011
(na posição110110(1 1011)01
);101
(na posição1101101 (101)101
);101
(na posição1101101 101(101)
), então a saída seria[[109],[109],[109,45],[109],[109,45],[45],[45]]
.
Um outro exemplo:n=2
,L=[8127]
(binário1111110111111
) pode formar estas subsequências 'cerca binário':1111110111111
(em posição(1111110111111)
);11111011111
(na posição1(11111011111)1
);111101111
(na posição11(111101111)11
);1110111
(na posição111(1110111)111
);11011
(na posição1111(11011)1111
);101
(na posição11111(101)11111
), então a saída seria[[8127],[8127],[8127],[8127],[8127],[8127]]
. - Se nenhuma saída válido é possível, você pode retornar uma lista vazia ou algum outro tipo de saída Falsey (
null
,false
, gera um erro, etc. Mais uma vez, a sua chamada).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
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]
válido para o testcase 4? Eu vejo a cerca(1 10 11)
2, [10, 10]
que deve resultar em [[10],[10,10],[10]]
se eu entender o correctl.y desafio