Um número de Kaprekar é um número de n dígitos k que, quando os primeiros n ou n-1 dígitos de k ^ 2 são adicionados ao segundo n dígitos de N ^ 2, o resultado é N.
Exemplos:
9^2 = 81. 8+1 = 9.
45^2 = 2025. 20+25 = 45.
297^2 = 88,209. 88+209 = 297
A sequência de Kaprekar começa em 1.
Escreva um programa que calcule e produza os primeiros n números de Kaprekar, com n estando no intervalo, mas não limitado ao intervalo, de 1 a 100. Cada número de Kaprekar deve ser separado por espaço em branco e nada mais.
Mais números de Kaprekar podem ser encontrados aqui para verificar seu programa, mas esse recurso NÃO PODE ser usado de forma alguma para ajudar no cálculo - em outras palavras, nenhuma codificação codificada, leitura desta fonte ou uso em qualquer outra exploração maneira - todos os números devem ser gerados pelo seu programa.
O menor código vence.
n
até pelo menos 100. #Respostas:
Perl - 63 bytes
Contando o shebang como um byte. A entrada é retirada de
stdin
.Isso tem um tempo de execução aceitável para n ≤ 50 , depois fica um pouco lento.
Uso da amostra:
fonte
C,
109106n
até 17, seria bom remover olong long
,1
são bobos ...fonte
(i-i*i/x-i*i%x)||printf(...)
,.x
ei
no escopo global em vez de nofor
loop para salvar alguns caracteres.Mathematica
144154Teste
fonte
Javascript 96
Resultado :
fonte
for(i=0,n=prompt(s='');n;i++){t=''+i*i;if(t.substr(0,l=t.length/2)==i-t.substr(l))n--,s+=i+' '}s
python - 98
Eu usei algumas fatias de python legais para raspar alguns caracteres.
fonte
C # - 255 caracteres.
x é o número de números Kaprekar que você deseja que o código encontre. Isso foi testado na faixa de 1 a 100, mas deve suportar muito mais do que isso. 100 números levavam duas horas e quinze para retornar, embora os primeiros 50 levassem apenas 1 segundo - as coisas diminuíram gradualmente depois disso.
Resultado:
Estabelecido esse código é o seguinte;
Eu adoraria saber se isso pode ser reduzido ainda mais.
fonte
C,
907675 bytesfonte
Python 2.7, 144 (incluindo novas linhas)
Saída para c = 10:
Saída para u = 20:
fonte
R, 99 caracteres
Com
i
metade do número de dígitosk^2
arredondados para cima, a avaliação de k é um número Kaprekar é realizada aqui adicionando o quociente e o restante da divisão inteira dek^2
por10^i
(o quociente é a metade esquerda dos dígitos arredondados para baixo e o restante a metade direita arredondada para cima).fonte
bash + sed, 75 caracteres
O Bash faz aritmética somente com números inteiros e representa números como cadeias decimais; esses atributos são úteis para jogar golfe nesse desafio. Também, variáveis não declaradas / não atribuídas são assumidas como tendo um valor 0 ao fazer aritmética.
Irritou-me colocar o
10#
lá dentro, mas algo assim é necessário se a segunda metade da divisão começar com a0
. Ao fazer aritmética, o bash trata números como octal, a menos que a base seja explicitamente declarada.fonte
Python 3.3 - 117 caracteres
Cada nível de indentação e cada nova linha, exceto a final, contam para 1 caractere. Eu acho que é justo para o código Python. O script espera que o usuário insira o número de números Kaprekar para calcular.
fonte
J - 64
Meio feio, mas ainda assim. Ele verifica todos os números de até um milhão e, em seguida, obtém
n
deles, então funciona apenas para n <= 50.n
é onde colocar a entradafonte