O objetivo é calcular todos os quadrados até x
com adição e subtração.
Regras:
- O código deve ser uma função que pega o número total de quadrados a serem gerados e retorna uma matriz contendo todos esses quadrados.
- Você não pode usar strings, estruturas, multiplicação, divisão ou funções internas para calcular quadrados.
- Você só pode usar matrizes, números inteiros (números inteiros), adição, subtração. Nenhum outro operador é permitido!
Esta é uma questão de código-golfe , então o código mais curto em bytes vence!
Respostas:
APL - 10
Exemplo de uso:
ngn APL demo
fonte
+\1+⍳+⍳
C,
5552 bytessimplesmente soma números ímpares
n
: número de quadrados a calcularr
: matriz de saída para armazenar os resultadosj
: pega os valores sucessivos 1, 3, 5, 7, ...i
: é incrementadoj
em cada iteraçãoEditar
4 caracteres podem ser salvos usando a declaração int implícita (> C99), mas isso custa 1 caracter porque os
for
inicializadores não podem conter uma declaração em> C99. Então o código se tornaUso
Resultado
fonte
GolfScript, 17 caracteres
Uso (veja também exemplos on-line ):
Nota:
*
é um loop e não o operador de multiplicação.fonte
,
pega a entrada e a converte na matriz[0 1 ... n-1]
. Em seguida,*
injeta o bloco de código fornecido na matriz. Este bloco primeiro dobra o item atual (.+
) subtrai um ((
) e depois adiciona o resultado anterior1$+
(em outras palavras, adiciona2j-1
ao número quadrado anterior).[]
inclui tudo para retornar um novo array.Lote do Windows, 115 bytes
Isso deve ser colocado em um arquivo em lotes, em vez de ser executado a partir do cmd, e envia a lista para o console. É necessário o número de quadrados a serem criados a partir do primeiro argumento da linha de comando. Para a maior parte usada em
&
vez de novas linhas, uma ainda é necessária e conta como dois bytes.Ele precisa de expansão variável atrasada ativada, isso pode ser feito
cmd /v:on
. Supondo que não, um extrasetlocal enabledelayedexpansion&
foi necessário no início (sem ele, o script tem 83 bytes).fonte
Haskell - 30
Isso usa o fato de que
(n+1)^2=n^2+2n+1
fonte
Perl, 27 bytes
Matemática:
Script para chamar a função para imprimir 10 quadrados:
Resultado:
Editar% s:
pop
em vez deshift
(-2 bytes, obrigado skibiranski )fonte
JavaScript - 32 caracteres
Assume que uma variável
x
existe e cria uma matriza
de quadrados para valores1..x
.ECMAScript 6 - 27 Caracteres
A chamada
f(x)
preencherá a matrizb
com os quadrados para valores0..x
.fonte
i+++i
no final ...?k+=i+++i
é o mesmok += i + (++i)
que é o mesmo quek+=i+i+1
seguido pori=i+1
b=[f=i=>b[i]=i&&i+--i+f(i)]
).Julia - 33
Qualquer número quadrado pode ser escrito por uma soma de números ímpares:
fonte
C ++
9981788078minha primeira tentativa no code-golf
esse código é baseada em
um xn = 2 - 1
, onde n é contagem de termo e um é n ésimo termo na seguinte série
1, 3, 5, 9, 11, 13, .....
soma dos primeiros 2 termos = 2 quadrado
soma dos primeiros 3 termos = 3 ao quadrado
e assim por diante ...
fonte
{}
depois dofor
loop, pois há apenas uma declaração. Isso pode reduzir sua contagem de caracteres em 2addition, subtraction
, eu só estou usando aquelesConjunto DCPU-16 (90 bytes)
Eu escrevi isso em montagem para um processador fictício, porque por que não?
Espera-se que o número esteja no registrador X, e espera-se que outros registradores sejam 0. Os resultados são enviados para a pilha; ele será interrompido quando atingir 65535 devido à arquitetura de 16 bits. Você pode adicionar um
SUB PC, 1
no final para testá-lo. Compilado, o programa deve ter 20 bytes (10 palavras).fonte
Haskell
Isso basicamente inventa a multiplicação, usa o próprio e o mapeia sobre todos os números.
f 10
=[0,1,4,9,16,25,36,49,64,81]
. Tambémf 91
=[0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100]
.fonte
Haskell, 34/23
ou, se as importações estiverem corretas:
Resultado:
fonte
Javascript 47
function f(n,a){return a[n]=n?f(n-1,a)+n+n-1:0}
r=[];f(12,r);console.log(r)
retorna:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]
fonte
f=(n,a)=>a[n]=n?f(n-1,a)+n+n-1:0
.Smalltalk, 52
Retorna uma nova matriz (ou seja, não preenche ou adiciona a uma existente).
ligar:
valor f: 10
-> # (1 4 9 16 25 36 49 64 81 100)
fonte
python - 39
Substitua
5
por qualquer valor. Alguma sugestão?fonte
Bash -
9285626159.57Resultado:
Edit: Substituí o loop interno pelo algoritmo da solução Haskell da @ mniip.
fonte
O mesmo método acima, em APL e J:
APL:
F←{+\1+V+V←¯1+⍳⍵}
(17 caracteres) funciona com a maioria das variantes de APL (tente aqui )e menos ainda (apenas 14 caracteres) com NGN APL:
F←{+\1+V+V←⍳⍵}
(veja aqui )J:
f=:+/\@(>:@+:@:i.)
(18 caracteres)edit: melhor solução em APL:
F←{+\¯1+V+V←⍳⍵}
(15 caracteres)fonte
C # (82)
fonte
C # - 93
Quando chamado de outro método da mesma classe, retornará a matriz -
[1,4,9,16,25,36...]
, até ol
elemento.fonte
int[]
esq
? Não sei c #, mas acho que deve funcionar.int[]sq
vez deint[] sq
e emint[]res
vez deint[] res
. Isso ajuda a salvar dois caracteres, e não obtive nenhum erro de compilação. Além disso, você deve usar identificadores de caracteres únicos parasq
eres
como sugeriu.Fortran II | IV | 66 | 77,
134122109105Edit: removeu o loop interno e usou o algoritmo Haskell do @ mniip.
Edit: Verificado que a sub-rotina e o driver são Fortran II e IV válidos
Motorista:
Resultado:
fonte
Python - 51
Aqui estou definindo uma função conforme solicitado pelas regras.
Utilização
sum
de números ímpares:Isso usa apenas
sum
(um builtin que executa adição) erange
(um builtin que cria matrizes usando adição). Se você se opusersum
, podemos fazer isso comreduce
:fonte
PHP, 92 bytes
É necessário ter a opção "tags curtas" ativada, é claro (para cortar 3 bytes no início).
Resultado:
fonte
Quarto - 48 bytes
Uso:
Resultado:
fonte