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]]
fonte
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?[1, 1111111111]
Respostas:
Geléia ,
3633 bytesExperimente online!
Tenho certeza que isso pode ser jogado mais. Alguma inspiração tirada da resposta 05AB1E do Grimy , por isso não deixe de votar também!
fonte
Python 3 ,
565564524523500437399394393389385372 bytesImplementação de força bruta usando
itertools
; nem todos os casos de teste são executados dentro do limite de 60 segundos no TIO.Experimente online!
Graças ao ArBo por jogar 101 bytes, a Galen Ivanov por 19 bytes, a ElPedro por 5 bytes, a movatica por 17 bytes, a Black Owl Kai por 2 bytes, a lula por 2 bytes e a Kevin Cruijssen por 1 byte de golfe.
Explicação:
Python 2 ,
406379374373372368355 bytesA mesma abordagem, mas mais curta devido a alguns truques de golfe, o Python 3 não suporta mais. Agradecimentos ao ArBo pelo backport e pelo golfe de 28 bytes, pelo ElPedro pelo golfe de 5 bytes, pela movatica pelo golfe de 17 bytes e pelo squid pelo golfe de mais 1 byte.
Experimente online!
fonte
str(abs(x))
(ou abs (x) com reticulares em Python 2) para a chamada da função e alterando x na definição da função para y removendo y = str (abs (x)). Desculpe, não é possível fazer com que o TIO funcione no momento.len
para remover outro byte, certo?any()
chamadas, tornando-se assim um gerador normal, que funciona tão bem e você economiza mais 4 bytes :)(x in sum(l,[]))
vez deany(x in s for s in l)
para ambosx
e-x
economiza mais 13 bytes!Python 2 ,
235234232246245244241240238237236 bytesExperimente online!
-1 byte, graças ao comentário do Squid sobre a outra resposta Python
Esta resposta não tem esperanças de solucionar nenhum dos casos de teste mais triviais. No link TIO,
s*11
foi substituído pors*2
, sacrificando correção em alguns casos, para rápido er tempo de execução, mas tanto quanto eu posso ver, a versão neste post sempre produz a resposta correta, em teoria.Explicação
fonte
int
mesmo na versão de 64 bits).05AB1E ,
4341383527 bytesExperimente online!
Explicação:
Como os números de grupo não fazem parte da saída, podemos usar os números que quisermos, desde que a ordem esteja correta. Utiliza 0 para números originais, 2 ^ -N para o grupo XN, 1 para o grupo X, 2 para o grupo X + 1.
fonte
Python 2, 195 bytes
O caso de teste mais lento não pode ser concluído no TIO , mas leva apenas 10 segundos na minha máquina.
Ele pode ser reduzido em 2 bytes nas versões LP64 Python, substituindo
'%s-%%s'%a%n
por`a`+'-'+`n`
.fonte
JavaScript (Node.js) ,
211205 bytesExperimente online!
Usando a suposição de que existem no máximo 12 grupos.
JavaScript (Node.js) ,
267226221218211 bytesExperimente online!
... ou 193 bytes, se o retorno de um dicionário estiver correto:
Experimente online!
Nesse caso, chave
-Infinity
significa Grupo 1 e outras chaves significa GrupoX+key
.fonte