Introdução:
Sou um colecionador de quebra-cabeças sinuosos. Aqui você pode ver minha coleção atual de ± 300 quebra-cabeças.
Acho que todo mundo conhece o Cubo de Rubik regular (cubo 3x3x3), que é um cubo NxNxN . Também existem cuboides (quebra-cabeças em forma de bloco), que vêm em diferentes formas, talvez melhor explicados por SuperAntionioVivaldi aqui :
- Cuboides de dominó regulares (como 2x2x3 ; 2x3x3 ; 3x3x4 ; etc.) - Eles vêm na forma de NxNx (N + O) ou Nx (N + O) x (N + O) , que possuem duas dimensões ímpares e uma par, ou dois pares e um ímpar.
- Cuboides de cambiaformas (como 2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ; etc.) - Eles vêm na forma de NxNx (N + P) , que, como o nome sugere, muda de forma (em todas as direções). Todas as três dimensões são ímpares ou pares.
- Cuboides de disquete (como 1x3x3 ; 2x4x4 ; etc.) - Eles vêm na forma de Nx (N + P) x (N + P) , que são quase os mesmos que os cambiaformas, mas com as chamadas paridades de disquete.
- Cuboides de tijolo (como o 2x3x4 ; 3x4x5 ; 2x3x5; etc.) - Eles vêm na forma de Nx (N + O) x (N + P), que, assim como os cuboides regulares do dominó, têm duas dimensões ímpares e um par, ou dois pares e um ímpar; mas não tem as mesmas dimensões.
- Os cambiaformas finais (como 2x4x6 ; 3x5x7; 2x4x10; etc.) - Eles vêm na forma de Nx (N + O) x (N + R) e mudam de forma em qualquer direção. Todas as três dimensões são ímpares ou pares; mas não tem as mesmas dimensões.
Desafio:
Entrada:
Um número inteiro positivo n com a seguinte restrição: 8 <= n <= 125.
n pode ser decodificado exclusivamente como o produto de três valores (as dimensões), dos quais cada um está entre 2 e 5, inclusive.
A razão pela qual eu o restringi a 2-5 é evitar entradas duplicadas (como 1x2x4 = 8
e 2x2x2 = 8
), mesmo que haja muitos cuboides de ordem inferior / superior por aí. Isso também significa que não há casos de teste para os Ultimate Shapeshifters.
Casos de saída / teste:
Estes são todos os casos que seu programa / função deve suportar, variando de comprimentos de borda 2 a 5 em todas as configurações tridimensionais possíveis:
Input Cuboid/Cube Type/Output
8 2x2x2 Cube
12 2x2x3 Regular Domino Cuboid
16 2x2x4 Shapeshifter Cuboid
20 2x2x5 Regular Domino Cuboid
18 2x3x3 Regular Domino Cuboid
24 2x3x4 Brick Cuboid
30 2x3x5 Brick Cuboid
32 2x4x4 Floppy Cuboid
40 2x4x5 Brick Cuboid
50 2x5x5 Regular Domino Cuboid
27 3x3x3 Cube
36 3x3x4 Regular Domino Cuboid
45 3x3x5 Shapeshifter Cuboid
48 3x4x4 Regular Domino Cuboid
60 3x4x5 Brick Cuboid
75 3x5x5 Floppy Cuboid
64 4x4x4 Cube
80 4x4x5 Regular Domino Cuboid
100 4x5x5 Regular Domino Cuboid
125 5x5x5 Cube
Regras do desafio:
- Qualquer entrada não cubo / não cubóide dentro da faixa 8-125 deve resultar em 'nenhum' como saída.
- O formato de saída é sua própria escolha. Eu acho que o mais razoável é números inteiros, como
0
= 'none';1
= Cubo;2
= Cubo dominó regular;3
= Metamorfo Cubóide;4
= Cubóide de disquete;5
= Cubóide de tijolo. Qualquer outro formato de saída também é bom, desde que você especifique qual você usou.
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, programas completos. Sua chamada.
- As brechas padrão são proibidas. ( NOTA: Como não sei se existe uma fórmula inteligente para a conversão de entrada para saída, é permitido codificar as respostas com base na entrada. )
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
fonte
24
), então eu não sei o que você quer classificar sobre isso?Respostas:
05AB1E ,
2621 bytesNone: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5
Experimente online! ou como um conjunto de testes
Explicação
O único lugar que vejo que poderíamos salvar bytes aqui é encontrar uma maneira melhor de gerar o número 123224454212324512210 .
É apenas 1-off de um prime, portanto, um possível salvamento seria encontrar o índice desse prime e gerar o índice em menos de 9 bytes.
Não sei como funciona a função pi para números primos de 21 dígitos, mas isso pode ser uma possibilidade.
fonte
k
existe? !! ??!?!?!?!JavaScript (ES6),
979286 bytesEssa função primeiro verifica a validade da entrada e, em seguida, escolhe o valor correto em uma tabela de pesquisa.
Surpreendentemente, a parte mais longa é a verificação de validade (se n de forma x * y * z com x , y e z em [2,3,4,5] ?). Deve haver uma maneira mais curta de fazer isso, mas eu não conseguia descobrir até agora.
Retorna um caractere:
Teste
Mostrar snippet de código
fonte
Ruby,
106 9896 bytesPorque, por que não, codificado?
Conforme especificado, 0 = 'nenhum'; 1 = cubo; 2 = Dominó Cubóide Regular; 3 = Cubóide do Metamorfo; 4 = Cubóide de disquete; 5 = Cubóide de tijolo
fonte
Perl 6 ,
6958 bytesUsa o formato de saída inteiro sugerido na descrição da tarefa, exceto que ele retorna o valor
(Any)
não inicializado em vez de0
no caso de entradas que não formam um cubo / cubóide válido.Como funciona
Gera a lista
8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125
.Gera a lista
1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1
(de um literal de base 32).Gera um Hash (mapa associativo) com a primeira lista como as chaves e a segunda lista como os valores.
Indexa o Hash com o número de entrada.
fonte
Lote, 163 bytes
Usa o formato de saída sugerido. Explicação: A idéia básica é fazer um loop sobre a lista de cubos, conforme definido na pergunta. Para cada cubo, calculamos para ver se seu volume é o número inteiro de entrada e, em caso afirmativo, calculamos o tipo de cubo em uma tabela de pesquisa.
A tabela de pesquisa original era uma sequência de letras, mas a manipulação de strings em um
for
loop é complicada, então mudei para dígitos que podem ser extraídos aritmeticamente. Infelizmente, o Lote é limitado a números inteiros de 32 bits, então eu não conseguia encaixar todos os dígitos em uma única variável (mesmo na base 5 você só pode obter 13 dígitos), então, em vez disso, divido a variável em duas partes, codificadas na base 6 Por conveniência.29948521
está2545522321
na base 6, que codifica os 10 menores cuboides na ordem inversa; quando ficar sem dígitos, adicionamos o14081593
que está1221452321
na base 6, codificando os 10 maiores cuboides.fonte