Temos muitos desafios baseados nas bases 10, 2, 36 ou até 10 , mas e todas as outras bases racionais?
Tarefa
Dado um número inteiro na base 10 e uma base racional, retorne o número inteiro nessa base (como uma matriz, sequência, etc.).
Processo
É difícil imaginar uma base racional, então vamos visualizá-la usando pontos explosivos :
Considere esta animação, expressando 17 na base 3:
Cada ponto representa uma unidade e as caixas representam dígitos: a caixa mais à direita é o lugar da pessoa, a caixa do meio é o lugar 3 ^ 1 e a caixa mais à esquerda é o lugar 3 ^ 2.
Podemos começar com 17 pontos no lugar da pessoa. No entanto, essa é a base 3, portanto, o local deve ser menor que 3. Portanto, "explodimos" 3 pontos e criamos um ponto na caixa à esquerda. Repetimos isso até terminarmos em uma posição estável, sem pontos explosivos (ou seja, 3 pontos na mesma caixa).
Então 17 na base 10 é 122 na base 3.
Uma base fracionária é análoga à explosão de um número de pontos em mais de um ponto. A base 3/2 estaria explodindo 3 pontos para criar 2.
Expressando 17 na base 3/2:
Então 17 na base 10 é 21012 na base 3/2.
Bases negativas funcionam da mesma forma, mas devemos acompanhar os sinais (usando os chamados anti-pontos, iguais a -1; representados por um círculo aberto).
Expressando 17 na base -3:
Observe que há explosões extras para tornar o sinal de todas as caixas iguais (ignorando zeros).
Assim, 17 na base 10 é 212 na base -3.
Bases racionais negativas funcionam de maneira semelhante, em uma combinação dos dois casos acima.
Regras
- Sem brechas padrão.
- O sinal de cada "dígito" na saída deve ser o mesmo (ou zero).
- O valor absoluto de todos os dígitos deve ser menor que o valor absoluto do numerador da base.
- Você pode assumir que o valor absoluto da base é maior que 1.
- Você pode assumir que uma base racional está em sua forma reduzida mais baixa.
- Você pode levar o numerador e o denominador da base separadamente na entrada.
- Se um número tiver várias representações, você poderá gerar qualquer uma delas. (por exemplo, 12 na base 10 pode ser
{-2, -8}
e{1, 9, 2}
na base -10)
Casos de teste:
Formato: {in, base} -> result
{7, 4/3} -> {3, 3}
{-42, -2} -> {1, 0, 1, 0, 1, 0}
{-112, -7/3} -> {-6, -5, 0, -1, 0}
{1234, 9/2} -> {2, 3, 6, 4, 1}
{60043, -37/3} -> {-33, -14, -22, -8}
Como algumas entradas podem ter várias representações, recomendo testar a saída usando esse trecho do Mathematica no TIO.
Isso é código-golfe ; portanto, envios com contagens de bytes mais curtas em cada idioma ganham!
Para mais informações sobre pontos explosivos, visite o site do projeto global de matemática ! Eles têm um monte de coisas matemáticas legais!
fonte
Respostas:
Python 2 ,
4239 bytesExperimente online!
Agradecemos a @xnor por encontrar o formulário mais curto.
Versão obsoleta (42 bytes):
Experimente online!
Parâmetros: entrada, numerador (com sinal) e denominador.
Retorna uma matriz, primeiro dígito mais baixo.
Isso simplesmente funciona porque a divisão e o módulo em Python seguem o sinal do denominador, portanto, não precisamos nos preocupar explicitamente com os mesmos sinais.
Saída do caso de teste:
fonte
Aheui (esótopo) , 91 bytes
Experimente online!
Toma
integer
,numerator of base
edenominator of base
.Devido à limitação do intérprete TIO, cada entrada deve terminar com uma nova linha.
Implementação da resposta Python 2 do @ Bubbler . Felizmente, esse intérprete do Aheui é escrito em Python, para que possamos usar o mesmo truque.
fonte
05AB1E ,
1110 bytesExperimente online!
Toma
integer
,numerator of base
edenominator of base
como todas as respostas. Como o intérprete 05AB1E é escrito em Python (?), O truque de resposta do Python 2 do Bubbler também pode ser usado no 05AB1E.Explicação
Portanto, o programa funciona aproximadamente da mesma forma que este código Python:
11> 10 Obrigado Neil
fonte
_
vez de0Q
aqui.