Dados três números inteiros, determine a base mais baixa possível para os dois primeiros inteiros se multiplicarem no terceiro. Se você pensa na resposta à questão final da vida, do universo e de tudo, 6 * 9 == 42, é verdadeira na Base 13.
As entradas podem incluir qualquer número cujos dígitos usem os caracteres 0-9, az e AZ, onde a
é igual a 10 na Base 10 e Z
é 61 na Base 10.
As entradas devem ser inseridas da maneira que desejar (exceto para codificação), e você pode escrever uma função individual ou um programa inteiro.
A base máxima que deve ser considerada é a Base 62 e a base mínima é a Base 2.
Você pode assumir que os dois primeiros valores são menores que o terceiro. Você também pode concluir que a base mínima é uma maior que o dígito / caractere mais alto das entradas (por exemplo, se as entradas forem 3 1a 55
, a base mínima seria a Base 11, porque a
é o dígito mais alto).
Se não houver essa base, retorne um valor de lixo eletrônico de sua escolha.
Isso é código de golfe, então o código mais curto vence.
Casos de teste
6 9 42 --> 13
a a 64 --> 16
aA bB 36jk --> 41
2 3 20 --> <junk value>
10 10 100 --> 2
fonte
b
de uma maneira geral, comoa_0 b^0 + a_1 b^1 + a_2 b^2 + ...
(ondea_0
é o dígito menos significativo) do que a base 1, definitivamente faz sentido. Além disso, a conclusão do OP também incluiria a base 1 na pesquisa, se o maior dígito atual for 0. #Respostas:
CJam,
525148 bytesTeste aqui. O testador online não suporta entrada via ARGV. A alternativa mais próxima é colocar a entrada como
6 9 42
em STDIN e usar:Imprime
-1
se nenhuma base válida até 62 puder ser encontrada.Muito obrigado a Peter pelo código de análise de dígitos!
Corrigi muitos problemas que adicionavam 14 bytes à contagem. A explicação a seguir ainda é para o meu envio original, e vou atualizá-lo amanhã.
O índice é impresso automaticamente no final do programa.
fonte
32base~\[-16.35 9]=+
. Eu sei que o CJam tem uma conversão base mais curta.APL (Dyalog Unicode) , SBCS de 30 bytes
Experimente online!
Obrigado a Adám pela ajuda.
Explicação:
Usamos uma função auxiliar,,
In
para receber a entrada em um formato mais palatável. Caso contrário, a entrada recebe uma matriz de 3 colunas.'3 9 42'
daria, por exemplo (leia de cima para baixo e da esquerda para a direita):E para
'aA bB 36jk'
(o mesmo aqui.a
É 10,b
é 11,A
é 36, etc)fonte
Python
2-197213Que monstro ... (comparado ao CJam)
Infelizmente
int
, a conversão de base só pode lidar com bases de até 36. Portanto, eu precisava implementá-la sozinha. (Veja esta maravilhosa solução .)fonte
CJam, 53 bytes
Toma as três entradas do STDIN como
Imprime
0
se o produto em qualquer base não for possívelVai tentar jogar mais.
Experimente aqui
fonte
JavaScript (E6) 129
139Tente recursivamente todas as bases de 2 a 62, retornando -1 se nenhum valor estiver correto.
A função parseInt do JavaScript funciona com base até 36, portanto, é necessária uma pequena ajuda para bases maiores.
Cuidado, os parâmetros x, y, z são cadeias de caracteres, não números.
É mais difícil do que parece. Agradecemos a Martin por apontar um bug básico na primeira versão.
Menos golfe
Teste no console do FireFox / FireBug.
O teste tenta 1000 números com bases diferentes (até 36, não 62). Vale a pena notar que a base encontrada pode estar correta, mas menor que a base que gerou o caso de teste.
fonte
Carvão , 28 bytes
Experimente online! Link é a versão detalhada do código. Saídas
None
se nenhuma base válida puder ser encontrada. Explicação:fonte
⍘
éAny
por algum motivo ...Erlang (escript) - 200
Adicione duas novas linhas principais que devem estar presentes.
Em legível:
Invocação:
fonte
if Digit < Base -> … end
parte cuida disso. Se umif
bloco não tiver ramificação verdadeira, uma exceção será lançada, a qual será capturadatry … catch _:_ -> … end
.Haskell 216 char (177?)
Tentei jogar isso o máximo possível. Se as importações forem contadas, esse é o meu código mais curto (216)
No entanto, se as importações não foram contadas, esta é minha melhor versão (177):
Isso trata cada número como um polinômio P (x) onde x é a base, desde que nenhum coeficiente seja maior que x; Em seguida, avalio os polinômios sobre cada base possível, parando quando chego a uma que satisfaça a igualdade P (x) * Q (x) = R (x). A regra 'base é maior que o dígito maior' é aplicada com o último protetor na correspondência de padrão, a saber
n>(m.map(m.f)$k)
. Sei que diferentes desafios no golfe e diferentes formadores de desafio têm políticas diferentes em relação às importações em relação à pontuação; portanto, leve o segundo com um pouco de sal.fonte
Prolog - 195 bytes
Basicamente, a mesma idéia da minha resposta Erlang:
Em legível:
Invocação:
fonte