Como, você não consegue se lembrar do número de telefone de 6 ou 7 dígitos que apareceu na tela da TV por um segundo ?! Usando a técnica especial descrita abaixo, você se transformará em uma agenda telefônica ambulante!
Obviamente, o número 402
é mais fácil de lembrar do que o número 110010010
e o número337377
é mais fácil de lembrar que o número 957472
. Isso significa que o número memorizado, por um lado, deve conter o menor número possível de dígitos e, por outro lado, é desejável que o número contenha o maior número possível de números repetidos.
Como critério para a dificuldade de lembrar, tomamos a soma do número de dígitos em número e o número de dígitos diferentes em número. Um número memorizado pode ser escrito em outro sistema numérico, talvez seja mais fácil lembrar. Por exemplo, o número 65535
na notação hexadecimal se parece comFFFF
.
Tarefa
Você precisa escrever um programa para selecionar a base do sistema numérico para minimizar o critério de complexidade. A base do sistema numérico deve ser selecionada no intervalo de 2 a 36, depois os números0-9
e as letras em inglês A-Z
possam ser usados para representar o número.
Entrada
A entrada contém um número inteiro decimal de 1 a 999999999.
Resultado
A saída deve conter a base do sistema numérico (de 2 a 36), minimizando o critério de complexidade da memorização e o número no sistema numérico selecionado, separados por um espaço. Se várias bases fornecerem o mesmo valor para o critério, escolha a menor dentre elas.
Notas
- As letras devem estar em maiúsculas (
A-Z
).
Casos de teste
Saída de Entrada
1
2 1
2
3 2
65535
16 FFFF
123
12 A3
fonte
a-z
vez deA-Z
?A-Z
?Respostas:
Python 2 ,
150149127144 bytesExperimente online!
Python 3 , 136 bytes
Experimente online!
Python 3.8 (pré-lançamento) , 131 bytes
Experimente online!
c
converte um número base 10 em qualquer base (2-36) e a primeira função (anônima) encontra o menor resultado.fonte
05AB1E ,
1614 bytes-1 byte graças a Kevin Cruijssen
Experimente online!
Ou adicione R) »no final para se ajustar exatamente ao formato de saída especificado, mas a maioria das outras respostas não incomodou.
Explicação:
fonte
₆L©B®ø
vez de₆LεBy‚}
ā
, parece que você sempre esquece esse.Perl 6 ,
5554 bytes-1 byte graças a Jo King.
Experimente online!
fonte
@$_
em vez de.[*]
para menos um byteJavaScript (ES6),
87 85101 bytesEdit: +16 bytes inúteis para obedecer ao formato de saída estrito
Experimente online!
fonte
Japt v2.0a0
-gS
,2423 bytesNão é bonito, mas faz o trabalho. +2 bytes para o requisito completamente desnecessário de que a saída seja maiúscula.
Tente
fonte
PHP ,
124119 bytesExperimente online!
Uma pena os +12 bytes no PHP para maiúsculas na saída ... mas ... de qualquer maneira.
fonte
Zsh , 85 bytes
Para esse número de instruções dentro do loop for, o uso
...&&...&&...
é menor que{...;...;...;}
.Experimente online!
Aqui está uma solução de 81 bytes que imprime no formulário
[base]#[num]
:Experimente online!
fonte
J , 67 bytes
Experimente online!
fonte
Carvão , 38 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Insira o número inteiro.
Converta-o da base 2 para a base 36 ...
... deduplicar, concatenar e levar o comprimento.
Pegue o índice da complexidade mínima e adicione 2 para obter a base.
Imprima a base e o número inteiro convertido nessa base em maiúsculas.
fonte
Stax , 19 bytes
Execute e depure
Nenhum algoritmo sofisticado, apenas força bruta direta. Cerca de um terço do programa discute o formato das regras de saída precisas.
Programa de bônus: Saída para [1..1000]
fonte
Gelatina , 25 bytes
Experimente online!
Um link monádico usando um número inteiro como argumento e retornando uma sequência Jelly no formato desejado. Se uma lista de dois itens tiver uma saída aceitável (conforme a maioria dos desafios), poderá economizar 2 bytes. Se a base 1 fosse aceitável para a aresta de 1 como entrada, poderia salvar mais 2 bytes.
fonte
Braquilog , 44 bytes
Experimente online!
Isso doeu um pouco para escrever.
fonte
Perl 5 , 161 bytes
Experimente online!
fonte
Python 2 ,
140135 bytesExperimente online!
fonte
Perl 5
-Minteger -MList::Util=uniq,first -ap
,123112 bytesExperimente online!
fonte
Wolfram Language (Mathematica) ,
109111 bytes+2: fixo. Obrigado pela captura @Roman
OrderingBy
foi introduzido no Mathematica 12.0, que o TIO parece não ter atualizado ainda.fonte
OrderingBy
Não está de acordo com este requisito.MinimalBy
, assim ?123
, sua solução é impressa em36 3F
vez da necessária12 A3
. DeOrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]
como recebo a resposta{36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}
, a suposição usual de não reordenar entradas equivalentes parece ser ignorada aqui. Meu$Version
é "12.0.0 para Mac OS X x86 (64 bits) (7 de abril de 2019)".C (clang) , 165 bytes
Experimente online!
n // entrada
, i = 2 // iterador da base 2 a 36
, j // complexidade atual
, p = 99 // melhor complexidade
, r // resultado = iterador
, m // cópia temporária de n
, x; // m% i
char * g // string atual ptr
, * _ // melhor str ptr
, b [74] [37]; // buffer
/ * [37 + 37] = [cadeias obtidas + teste para caracteres usados] * /
t (n) {
para (; g = b [i], // move ptr
for (j = 0, m = n; m; m / = i, // extrai o dígito
j + = b [i + 36] [x = m% i] ++ 1: 2; // incrementa byte em relação ao caractere
// e se foram 0 incrementos j de 2: 1 para o novo caractere usado e 1 para contagem de dígitos
// else incr apenas dígitos contam + move o ponteiro
// printf ("% s -", g); // teste
// printf ("r% ip% ij% i \ n", r, p, j); // teste
}
printf ("% i,% s", r, _); // saída
}
fonte
Japt v2.0a0, 31 bytes
Tente
fonte