Introdução:
Eu coleciono quebra-cabeças sinuosos. A maioria dos quebra-cabeças sinuosos são produzidos e vendidos por empresas chinesas. A maioria das empresas conhecidas solicita aos criadores de quebra-cabeças permissão para produzir seus desenhos e trabalhar juntos em direção a um produto no mercado. Nesse caso, é claro que os designers de quebra-cabeças estão muito felizes e orgulhosos por um de seus quebra-cabeças chegar ao mercado.
No entanto, também existem empresas chinesas que fazem quebra-cabeças. Esses imitações são designs usados sem a permissão do criador original ou são cópias de qualidade inferior mais baratas de quebra-cabeças já existentes.
Desafio:
Vamos determinar a originalidade dos números que são 'liberados' em uma ordem específica (da esquerda para a direita † ).
Dada uma lista de números inteiros, agrupe e produza-os por sua originalidade.
Como é determinada a originalidade dos números?
- Um número é uma duplicata exata de um número anterior? Grupo (menos original), onde o grupo está à direita, depois de todos os outros grupos.
- Um número é uma duplicata de um número anterior, mas é negativo (por exemplo, o número original era , mas agora ; ou vice-versa)? Grupo .
- O valor absoluto do número pode ser formado concatenando um ou mais números absolutos anteriores e não faz parte dos grupos mencionados anteriormente ou ? Grupo , em que é a quantidade de números distintos usados na concatenação (e ).
- O número não se encaixa em nenhum dos grupos acima, portanto, é completamente único até agora? Grupo (mais original), que lidera antes de todos os outros grupos.
Isso pode parecer bastante vago, então aqui está um exemplo passo a passo :
Lista de entrada: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
é o primeiro número, sempre original e no grupo . Saída até agora:[[34]]
9
também é original:[[34,9]]
4
também é original:[[34,9,4]]
-34
é o negativo do número anterior34
, por isso está no grupo :[[34,9,4],[-34]]
19
é original:[[34,9,4,19],[-34]]
-199
pode ser formado pelos dois números anteriores19
e9
, portanto, está no grupo :[[34,9,4,19],[-199],[-34]]
34
é uma cópia exata de um número anterior, portanto, está no grupo :[[34,9,4,19],[-199],[-34],[34]]
-213
é original:[[34,9,4,19,-213],[-199],[-34],[34]]
94
pode ser formado pelos dois números anteriores9
e4
, portanto, está no grupo :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
pode ser formado pelos quatro números anteriores19
,34
,4
, e duas vezes9
, por isso é no grupo :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
é o negativo do número anterior-213
, por isso está no grupo :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
é original:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
é original:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
pode ser formado por dois números anteriores213
e4
(ou os três números anteriores21
,3
e4
, mas sempre usar a menor quantidade de concatenação de números para determinar a originalidade), por isso é no grupo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]
44449
pode ser formado pelos dois números anteriores quatro vezes4
e9
, portanto, está no grupo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
pode ser formado por um único número anterior4
, repetido duas vezes, por isso está no grupo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Então, para entrada, [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
a saída é [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Regras do desafio:
- A E / S é flexível. Você pode inserir como uma lista / matriz / fluxo de números inteiros ou seqüências de caracteres, inseri-los um a um por meio de STDIN, etc. A saída pode ser um mapa com os grupos como chave, uma lista aninhada como exemplo e casos de teste neste desafio, impressos nova linha separada etc.
- Você pode receber a lista de entrada em ordem inversa (talvez útil para idiomas baseados em pilha). † Nesse caso, a esquerda para a direita mencionada é obviamente da direita para a esquerda.
- Como você pode ver no exemplo de inteiro
-2134
, nós sempre grupo um número que é uma concatenação de outros números, com o mínimo possível (formada por213
e4
- dois números, e não por21
,3
e4
- três números). - Como você pode ver no exemplo para número inteiro
1934499
, você pode usar um número anterior (9
neste caso) várias vezes (semelhante ao44449
uso de quatro se4
um9
no exemplo). Eles são contados apenas uma vez para determinar o grupo. [1,58,85,-8,5,8585,5885,518]
[[1,58,85,8,5],[518],[5885],[8585],[],[]]
[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]
[34,9,4,19,-213,3,21]
[21,3,-213,19,4,9,34]
[-213,4,34,19,9,21,3]
- Você pode assumir que os números inteiros terão 32 bits no máximo, portanto, dentro do intervalo
[−2147483648,2147483647]
.
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 com as regras de E / S padrão , 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: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
X + 1
existe um grupo especial para cópias exatas eX
um grupo para outros números que podem ser formados a partir de cópias de um único número, como sua negação?