Cada termo na sequência quadrática, x n , é criado tomando x n-1 , quadrando-o e removendo todos, exceto os quatro primeiros dígitos.
A sequência sempre começa com x 1 = 1111 . Ao quadrado, isso resulta em 1234321, então x 2 = 1234
Os primeiros termos são:
1111
1234
1522
2316
5363
...
O desafio
Sua tarefa é, dado um número inteiro não negativo n , calcular x n . Você pode enviar um programa completo que execute E / S ou uma função que aceite n como parâmetro.
Sua solução pode ser zero ou uma indexada, desde que você especifique qual.
Como todos os termos nesta sequência são menores que 5 dígitos, seu código também deve ser o mais curto possível. Aplicam -se lacunas de código-golfe padrão .
Que ganhe o melhor jogador de golfe!
Casos de teste
Nota: Estes são 1 indexados.
1 -> 1111
8 -> 6840
15 -> 7584
20 -> 1425
80 -> 4717
Respostas:
05AB1E ,
87 bytesCódigo:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
JavaScript (ES7),
444336 bytesEste é um ótimo exemplo de abuso de coerção de tipo:
**
converte os dois argumentos em números e+
converte os dois em seqüências de caracteres, a menos que ambos sejam números. Isso significa quef(n)**2+f
primeiro se convertef(n)
em um número e o coloca ao quadrado, depois concatena o resultado com a representação de sequência def
. Em seguida, podemos usar.slice
para recuperar os 4 primeiros caracteres da string.Aqui estão algumas abordagens alternativas que não usam seqüências de caracteres:
Snippet de teste
Mostrar snippet de código
Nota: isso usa
Math.pow
porque**
não é suportado em todos os navegadores.fonte
Haskell, 40 bytes
É uma sequência baseada em 0. Exemplo de uso:
((iterate(read.take 4.show.(^2))1111)!!) 79
->4717
.Como funciona:
fonte
Mathematica, 48 bytes
Função sem nome usando um argumento inteiro; Indexado a 0. Usa quatro caracteres de três bytes
⌊⌊⌋⌋
: O Mathematica usaFloor[x]
ou⌊x⌋
para arredondar um número real para um número inteiro, e o último geralmente é um byte a menos. Os nomes de comando no Mathematica para converter números inteiros em cadeias são muito longos; portanto, fazemos um cálculo matemático para encontrar os quatro primeiros dígitos de x ^ 2: pegamos o logaritmo da base 10 de x ^ 2, subtraímos sua parte inteira, aumentamos 10 de volta a esse poder, e multiplique por 1000 e arredonde para baixo.tl; dr: logaritmos ftw
fonte
Python 2,
514644 bytesErrado de novo! A função recursiva retorna. Este é um indexado.Eu gostaria de me livrar do desajeitado,Acontece que, no momento,if
se possível, mas acho que umexec
poderia ser mais curto.exec
é mais curto.Uma solução alternativa de 46 bytes com
exec
:Uma solução recursiva alternativa de 49 bytes:
Obrigado ao Flp.Tkc por salvar um byte, lembrando-me que o quadrado não precisa de exponenciação :)
fonte
f=lambda n:1111if n<2else int(`f(n-1)**2`[:4])
V , 19 bytes
Experimente online!
Isso usa indexação baseada em 0.
Obviamente, como os números não são exatamente o forte de V , isso não é muito bom. No entanto, mostra uma boa vantagem que o V possui sobre o vim. Você pode executar uma macro 0 vezes, o que não é possível no vim, pois '0' é um comando e não uma contagem.
Isso contém muitos caracteres não imprimíveis, então aqui está um hexdump:
E aqui está uma versão legível:
Explicação:
fonte
Geléia ,
129 bytes-3 bytes graças a Dennis usando a indexação baseada em 1 e o
ṁ
átomo de molde / remodelação. Sugestões de golfe são bem-vindas! Experimente online!Ungolfing
fonte
1
em vez de⁽¡n
.Perl, 37 bytes
36 bytes de código +
-p
sinalizador.Para executá-lo:
fonte
Powershell,
7355 bytesUm enorme obrigado a TimmyD por remover 18 bytes!
Código:
for($A=1111;$args[0]---1;$A=-join"$(+$A*$A)"[0..3]){}$A
$A=1111;1..($n=2)|%{[string]$B=[math]::pow($A,2);$A=$B.substring(0,4)};$A
$n
é n em x n-1Explicação e código explodido:
Algumas notas:
1..($n=4)|%
definirá $ n para 4 e iniciará um loop que executa $ n vezes.1
pode ser alterado para qualquer número inteiro e repetirá $ n- [seu número inteiro] +1 vezes.[math]::
Powershell é duplo. No código acima, temos que converter explicitamente$B
em uma string para podermos chamá.substring()
-la, porque não há.substring()
função para dobros no Powershell.fonte
Python 2,
4441 bytes-3 bytes graças ao xnor (use uma divisão inteira para evitar
and
)repl.it
Função recursiva baseada em 1.
Quando
n>1
a divisão inteira1/n
, resulta em0
, então o0*1111=0
que é falsey, então o direito door
é avaliado, o que leva os quatro primeiros caracteres da representação do quadrado don-1
resultado th; isso é então convertido para umint
.Quando
n=1
a divisão inteira1/n
, resulta em1
, então1*1111=1111
, que é verdade, e aint
1111
conversão para umint
é1111
.fonte
int
fora. Se você indexar 1, poderá reduzir o caso base comg=lambda n:int(1/n*1111or`g(n-1)**2`[:4])
.
s!Groovy, 49 bytes
fonte
Pyke, 10 bytes
Experimente aqui!
fonte
MATL ,
14, 13 bytesExperimente online!
Explicação:
fonte
U
(quadrado, para entrada numérica)t*
R,
58565553 bytesToma
N
de stdin. 3334 é praticamente X_0, o que é necessário porque o loop for precisa ser executado pelo menos uma vez (seria mais demorado).R é realmente uma linguagem terrível para obter os quatro primeiros dígitos de um número, mas, como o número de casos é limitado, precisamos nos preocupar apenas com os quadrados
x<3163
ex>3162
, o primeiro gera um número de 6 dígitos e o segundo, um número de 7 dígitos. .O resto é bem direto,
%/%
divide e ignora o restante.x
é impresso em stdout.Economizou 2 bytes graças a @ETHproductions
fonte
3334
(ou talvez3333
)?3333^2 = 11108889
assim renderia1110
, e .... como eu estou verificando isso eu vejo3334
que funcionaria: | . Não sei por que não verifiquei mais isso.Javagony - 153 bytes
Javagony é uma versão restrita do Java, que não permite nenhum fluxo de controle, exceto recursão e
try-catch
, não para loops, loops ou if. Codificar nele é um exercício bastante divertido, mas frustrante. Não que o Java comum não seja tão frustrante por si só.fonte
PHP,
5552 bytesGuardado 3 bytes graças a @ user59178
Execute a partir da linha de comando, indexada a zero.
Obrigado por não se importar com o tipo de minhas variáveis, PHP! Aqui, simplesmente esquadrinhamos o número e recortamos tudo além dos 4 primeiros dígitos, alternando casualmente entre número e string sem se preocupar com o mundo.
fonte
$argv[1]--
como contador de loop.Braquilog , 18 bytes
Experimente online!
Esta resposta é indexada em 0.
Explicação
fonte
C, 56 bytes
Um indexado.
fonte
Clojure, 76 bytes
Primeiro golfe de Clojure (parece uma linguagem agradável). Isso é indexado em 1.
Explicará o código mais tarde.
fonte
C #,
6460 bytesSalvo 4 bytes, seguindo Olivier Gregoire s' comentário de em uma resposta Java!
Versão anterior ( 64 bytes ):
Programa completo com método não destruído e casos de teste:
fonte
n-->1
Ruby, 47 bytes
Primeiro golfe! Salva bytes com a
-n
opção (mas ainda conta como 1! :)).Indexado a 0. Para executá-lo:
fonte
Pitão,
1312 bytesObrigado a @Jakube por -1 byte
Um programa que recebe a entrada de um inteiro indexado em 1 e imprime o resultado.
Suíte de teste
Isso usa uma abordagem semelhante à resposta de @ Adnan .
Como funciona
fonte
*GG
em vez de^G2<space>
CJam , 15 bytes
Usa indexação baseada em 0.
Experimente online!
fonte
Lote, 82 bytes
Como o Perl, números inteiros são strings, mas, diferentemente do Perl, só posso pegar a substring de uma variável, e pegar substrings dentro de um loop é um pouco estranho.
fonte
Perl 6 , 36 bytes
Explicação:
Teste:
fonte
Matlab,
79, 78 bytesCasos de teste:
Não é uma solução incrível. Tenho certeza de que deve haver uma maneira melhor de truncar para 4 dígitos, mas não sei hoje.
Editar: Raspou um byte definindo 0,5 -> 0,5
fonte
Java 8,
779374716978 bytesCada repetição compõe
n
os 4 primeiros caracteres den*n
.Experimente o Java online !
Histórico de postagens:
77 bytes: código inicial (incompleto)
+16 bytes, de Olivier Grégoire: código completo, tornando-o uma função Lambda.
-19 bytes: substitua
while
pelofor
ciclo.-4 bytes:
long
s usados em vez deint
s-2 bytes, por Roman Gräf: colchetes desnecessários removidos
+9 bytes,
return
declaração ausenteAgradecemos a @ OlivierGrégoire e @ RomanGräf por apontar alguns problemas!
Espere, Java bate ... (tambor) Clojure e Matlab aqui! Um grande aplauso para Java, por favor!
fonte
x
não é declarado. Deve ser uma função ou um programa completo. Não é um trecho de código.x->{int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4));}return n;}
(para uma contagem total de bytes de 91). Isso ocorre porque trechos não são permitidos: apenas funções ou programas completos.x->{Long n=1111;for(;--x>0;)n=n.valueOf((n*n+"").substring(0,4));return n;}
com várias técnicas usadas (usadasLong
para usarLong.valueOf
com menos bytes, não é recomendado na programação normal, mas totalmente no golfe; removidom
porque é desnecessário se diminuirmosx
em vez disso, removeu os aparelhos desnecessários)Perl, 36 bytes
Uma abordagem diferente da outra solução Perl, levando a um código um pouco mais curto. Não são necessários argumentos de linha de comando (exceto o argumento de seleção de versão usual
-M5.010
, que não conta na contagem de bytes), o que significa que essa é a mesma quantidade de código, mas com menos penalidades, proporcionando uma pontuação geral melhor.Criamos um loop no estilo Underload, repetindo e
eval
pressionando uma string; Eu experimentei iniciar a corda no meio, mas iniciá-la no início acaba sendo a mais curta. Multiplicamos$&
(o resultado da última correspondência de regex) por si só para quadrá-lo; se o resultado for zero, usamos1x4
(ou seja1111
; Perl tem um operador para repetir coisas, incluindo dígitos de um número) em vez do resultado. Em seguida, regexamos os quatro primeiros caracteres. A coisa toda é executada no contexto da lista devido a estar dentrosay
, portanto, o resultado final doeval
será o conteúdo dos parênteses da partida final.fonte
Java,
79676664 bytesObrigado a @Oliver Grégoire.
Graças a @ETHProduction.
Substituiu substring e outras coisas pela ideia de @Xanderhall
Embora existam soluções mais curtas, eu queria postar uma :) recursiva. E eu sou a menor função "real" :). Edit: Parece que eu sou o mais curto agora :)))
fonte
for(i*=i;i>1e4;)i/=10;
? Isso economizaria um byte.long
s? Você pode matar dois bytes usandoint
s.Pushy ,
2620 bytesDê argumentos na linha de comando:
$ pushy sqseq.pshy 79
.Bem formatado, com explicação:
fonte