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]]9também é original:[[34,9]]4també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]]-199pode ser formado pelos dois números anteriores19e9, 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]]94pode ser formado pelos dois números anteriores9e4, portanto, está no grupo :[[34,9,4,19,-213],[-199,94],[-34],[34]]1934499pode 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]]-2134pode ser formado por dois números anteriores213e4(ou os três números anteriores21,3e4, 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]]44449pode ser formado pelos dois números anteriores quatro vezes4e9, portanto, está no grupo :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]44pode 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 por213e4- dois números, e não por21,3e4- três números). - Como você pode ver no exemplo para número inteiro
1934499, você pode usar um número anterior (9neste caso) várias vezes (semelhante ao44449uso de quatro se4um9no 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 + 1existe um grupo especial para cópias exatas eXum grupo para outros números que podem ser formados a partir de cópias de um único número, como sua negação?