O Rhombus de Pascal (que na verdade é um triângulo) é obtido adicionando o padrão:
*
***
x
ao invés de
* *
x
Isso significa que cada célula é a soma das três células na linha diretamente acima dela e uma célula na linha 2 acima dela. Assim como o triângulo de Pascal, a linha zeroth tem uma única 1
que gera o triângulo.
Aqui estão as primeiras linhas do Rhombus de Pascal
1
1 1 1
1 2 4 2 1
1 3 8 9 8 3 1
Tarefa
Dado um número de linha (a partir do topo) e um número de coluna (a partir do primeiro item diferente de zero nessa linha) gera o valor nessa célula específica. Ambas as entradas podem ser indexadas 1 ou 0 (você pode misturar e combinar, se desejar).
Este é um código-golf, portanto, você deve tentar tornar o tamanho do arquivo do seu código-fonte o menor possível.
Respostas:
Haskell ,
5955 bytesLosango de Pascal? Mais como o Rhombus de Haskell! Estou certo?
4 bytes salvos graças a Ørjan Johansen
Eu pensei em tentar meu próprio problema e praticar meu Haskell. Espero que isso inspire mais pessoas a responder a isso.
Experimente online!
Explicação
Está um pouco desatualizado com as últimas novidades em golfe
Em vez de calcular
Calculamos
Isso inclina todo o nosso triângulo para se tornar
Isso alinha todas as nossas linhas, facilitando a indexação do enésimo item de qualquer coluna. Em seguida, definimos nossos casos base.
A linha zeroth é toda zeros, então
Há um único
1
na posição,1,1
então definimos queE definimos o resto da primeira linha como zeros também
Em seguida, definimos o caso geral recursivamente usando o padrão descrito acima:
fonte
n!k=sum[(n-2)!(k-2)+sum(map((n-1)!)[k-2..k])|n>1]
.Pascal , 122 bytes
Bem, é o losango de Pascal .
37 bytes salvos graças a @manatwork
Experimente online!
fonte
if
condição são inúteis. (No 1ºif
você salva 2 caracteres, no 2ºif
caractere, não deixando espaço entre athen
palavra-chave e o dígito anterior.) Ah, e a variável r é completamente desnecessária.;
antes dofunction
'send
.>=
<=
? Eu ainda preciso preservar oif n=0
function f(n,k:integer):integer;begin f:=1-Ord((k<0)or(k>n*2));if n>0then f:=f(n-1,k-2)+f(n-1,k-1)+f(n-1,k)+f(n-2,k-2)end;
PHP , 86 bytes
forma recursiva apenas a linha de função e coluna 0 indexadas
Experimente online!
PHP , 114 bytes
maneira recursiva linha e coluna completas do programa 0-indexadas
Experimente online!
PHP , 129 bytes
linha e coluna 0-indexadas
Experimente online!
fonte
Geléia ,
222019 bytesToma um par de índices com base em 0 como argumento da linha de comandos.
Experimente online!
fonte
MATL ,
222019 bytesAmbas as entradas são baseadas em 0.
Experimente online!
Explicação
Deixe
r
ec
denote as duas entradas, especificando linha e coluna com base em 0, respectivamente.Cada nova linha no losango de Pascal pode ser construída a partir da matriz que contém as duas linhas anteriores, convolvendo com o kernel
[1 1 1; 0 1 0]
e mantendo as duas últimas linhas do resultado trocadas. Isso é feitor
vezes, a partir da matriz1
.É mais curto usar o kernel
[0 1 0; 1 1 1; 0 1 0]
, que é um literal predefinido. Isso produz uma linha extra, que será descartada.Considere, por exemplo
r = 3
, as3
iterações.Começando de
convolução com
[0 1 0; 1 1 1; 0 1 0]
dáManter as duas últimas linhas (a matriz inteira, neste caso) e trocá-las fornece
Convolução do acima com
[0 1 0; 1 1 1; 0 1 0]
dáA matriz formada pelas duas últimas linhas trocadas é
Contém a nova linha na parte inferior e a anterior estendida com zeros.
A participação novamente produz
Tomando as duas últimas linhas trocadas,
Após as
r
iterações, a saída é contida na última linha da matriz final. Por exemplo, parac = 2
(com base em 0) o resultado seria8
. Em vez de indexar a última linha e a coluna desejada, um truque pode ser usado para explorar a simetria de cada linha: a matriz final é transpostae seu
-c
-ésimo elemento é obtido. Isso usa indexação linear, ou seja, a matriz é indexada por um único índice na ordem principal da coluna . Como a indexação é modular , a0
-entry é o canto inferior direito (valor1
) e a-2
-a entrada é duas etapas acima (valor8
).fonte
Pari / GP , 60 bytes
Experimente online!
fonte
Haskell , 74 bytes
Experimente online!
Ligue com
n # m
, onden
está a linha em
a coluna.fonte
m<=2*n&&m>=0
pode ser juston>0
.Mathematica, 56 bytes
Função pura, recebendo dois argumentos inteiros (linha primeiro, coluna segundo) e retornando um número inteiro. Também funciona para argumentos inteiros negativos, retornando
0
. Uma estrutura recursiva bastante direta:If[#<1,Boole[##==0],...]
define o comportamento de caso base para a 0a linha (e acima), enquantoSum[#0[#-i,#2-j],{i,2},{j,2i-2,2}]
implementa a definição recursiva.fonte
Python 2 ,
706665 bytesExperimente online!
fonte
JavaScript (ES6), 68 bytes
fonte
Mathematica, 53 bytes
Usando a função geradora.
fonte
Python 3 ,
8284 bytesEsta é uma implementação recursiva com linhas e colunas indexadas a 1. (Tecnicamente precisa de um
f=
na frente, alguém me avise se devo alterá-lo para 84 bytes. Ainda novo e sem 100% de certeza das regras.)Isso usa a fórmula recursiva encontrada na página OEIS , mas com a
k
tecla deslocada para a esquerda para alinhar corretamente. Coincidentemente,sum(f(n-1,k-i)for i in(0,1,2))
é do mesmo tamanho quef(n-1,k)+f(n-1,k-1)+f(n-1,k-2)
. Toda a função é oand or
truque do Python , onde a primeira condição verifica se k está dentro do triângulo e não no limite; nesse caso, a fórmula recursiva é usada. Se is is não, a parte após aor
é retornada, que verifica sek
está dentro(1, 2*n-1)
, ou seja, na fronteira, retornandoTrue
eFalse
.k+1in(2,2*n)
é um byte menor quek in(1,2*n-1)
. Envolvê-lo entre parênteses e colocar um+
na frente se converte em número inteiro, o que é necessário.Experimente online!
fonte
f=
.True
vez de,1
porque se comporta como o1
python. Isso permite que você remova o+(...)
no final. Entendo que se você não quiser fazer isso, porque fará com que a saída pareça um pouco estranha, é uma opção.Java (OpenJDK 8) , 87 bytes
Experimente online!
No começo, fiquei feliz com meu método iterativo de 160 bytes ... Hmmm ... vamos esquecer, ok?
fonte
Python 3 , 75 bytes
Este é um lambda recursivo que utiliza coluna e linha como números inteiros indexados a 0.
Aqui está uma versão (ligeiramente) mais legível com uma função de impressão:
fonte