Dado um número n
, produz uma lista ordenada de índices baseados em 1 que caem em qualquer uma das diagonais de uma n*n
matriz quadrada.
Exemplo:
Para uma entrada de 3
:
O quadrado deve ser:
1 2 3
4 5 6
7 8 9
Agora, selecionamos todos os índices representados por \
, /
ou X
( #
ou as posições não diagonais são rejeitadas)
\ # /
# X #
/ # \
A saída deve ser:
[1,3,5,7,9]
Casos de teste:
1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]
Não haverá resposta aceita. Quero saber o código mais curto para cada idioma.
Respostas:
Oitava , 28 bytes
Função anônima que insere um número e gera um vetor de coluna de números.
Experimente online!
fonte
JavaScript (ES6), 48 bytes
Produz uma lista separada por traços de números inteiros como uma sequência.
Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
&
para salvar um byte?4%3
e4%5
não têm 1 bit em comum, mas ambos são diferentes de zero.n=5
e descobri que não funcionaria.k%~-n&&k%-~n
Deveria trabalhar. belo truque com o separador!R ,
38353438 bytes3 bytes salvos quando me lembrei da existência da
which
função ..., 1 byte salvo graças ao @Rift+4 bytes para o argumento
ec=T
quando chamado como um programa completo porsource()
Experimente online!
Explicação:
fonte
d=diag(n<-scan());which(d|d[n:1,])
source
), isso não imprime nada. Você tem que ligarcat
. Veja este post na meta .Gelatina , 8 bytes
Experimente online!
Usa o algoritmo de Luis Mendo em sua resposta MATL.
fonte
ŒD
.ŒD
faz algo completamente diferente de X de um tamanho específico.Oitava ,
4137 bytesA propósito, isso também funciona no MATLAB. Nenhuma funcionalidade específica oculta do Octave :)
Experimente online!
Explicação:
Em vez de criar uma matriz quadrada e encontrar as duas diagonais, imaginei que, em vez disso, calculasse as diagonais diretamente. Isso foi 17 bytes mais curto! =)
É assim que parece, sem
unique
:Sim, eu provavelmente deveria ter mudado a ordem das diagonais para torná-la mais amigável ao ser humano.
fonte
MATL , 6 bytes
Experimente online!
Explicação
A mesma abordagem da minha resposta do Oitava.
Considere a entrada
3
como um exemplo.A indexação linear é baseada na coluna principal , 1. Para mais informações, consulte o fragmento length-12 aqui .
fonte
t
é duplicado, não transpõe. Além disso, adicionei um exemplo elaboradoPython 2 ,
5453 bytesExperimente online!
fonte
Oitava,
6854 bytesObrigado a Stewie Griffin por salvar 14 bytes!
Experimente online!
MATLAB, 68 bytes
Explicação:
fonte
Mathematica, 42 bytes
Experimente online!
@KellyLowder jogou para baixo para ..
Mathematica, 37 bytes
e @alephalpha jogou fora a mesa!
Mathematica, 34 bytes
fonte
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
é 5 bytes mais curto #Union@@Range[{1,#},#^2,{#+1,#-1}]&
Proton , 41 bytes
Experimente online!
fonte
MATL , 14 bytes
Experimente online!
fonte
C (gcc) ,
6558 bytes-7 bytes graças a Titus!
Experimente online!
fonte
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 bytes)C # (.NET Core) ,
9783 bytesExperimente online!
A alteração aqui é baseada no deslocamento entre os números a serem encontrados. Os dois turnos que começam em 0 são
n-1
en+1
, portanton=5
, se os números paran-1
seriam0,4,8,12,16,20
e paran+1
seriam0,6,12,18,24
. Combiná-los e fornecer indexação 1 (em vez de indexação 0) fornece1,5,7,9,13,17,19,21,25
. O deslocamento den
é obtido usando negação bit a bit (operação de complemento bit a bit), onde~-n==n-1
e-~n==n+1
.Versão antiga
Experimente online!
Essa abordagem usa os índices de coluna e linha para determinar se os números estão nas diagonais.
i/n
fornece o índice da linha ei%n
o índice da coluna.Retornando apenas a matriz numérica
Se a construção de apenas a matriz numérica for considerada como contando para o custo de bytes, o seguinte poderá ser feito, com base na sugestão de Dennis.Verweij (
using System.Linq;
adiciona 18 bytes extras):C # (.NET Core) , 66 + 18 = 84 bytes
Experimente online!
fonte
&
. O adicional&
é lá apenas para quebrar a comparação, se a primeira entrada é falso MSDNusing System;
? (Presumo envolvê-lo em umnamespace System.Linq
não é válido?)Javascript,
7363 bytesversão antiga
Guardado 10 bytes graças a @Shaggy
Golfe pela primeira vez! espero que eu não tenha estragado muito.
Mostrar snippet de código
fonte
filter
função:!(--x%(n+1)&&x%(n-1))
e através da criação de sua matriz assim:[...Array(n*n+1).keys()]
[1...n*n]
intervalo comArray(n*n).fill().map((x,i)=>i+1)
" -[...Array(n*n)].map((_,y)=>y+1)
é uma maneira mais curta de fazer isso, para referência futura.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pitão ,
2018 bytes( Aqui está a versão inicial .)
Suíte de teste.
Pitão , 18 bytes
Suíte de teste.
fonte
Perl 5 , 56 + 1 (-n) = 57 bytes
Experimente online!
fonte
perl -e
. A linha de comando para este exemplo seriaperl -ne
. Essa é uma diferença de +1.Java (OpenJDK 8) , 71 bytes
Experimente online!
Porto da resposta do escoteiro .
fonte
Japt , 16 bytes
Não consigo fazer melhor que isso, mas tenho certeza de que é possível. Tivemos que sacrificar 2 bytes pelo requisito desnecessário de usar a indexação 1.
Teste-o
fonte
Oitava, 32 bytes
Experimente online!
fonte
PHP,
5654 + 1 bytes+1 byte para
-R
sinalizadorimprime números precedidos por traços. Execute como pipe
-nR
ou experimente online .requer PHP 5.6 ou posterior para o
**
operador.Adicione um byte para o PHP antigo: Substitua
;$z**.5<$n=$argn
por$z=$argn;$z<$n*$n
.fonte
Ruby, 45 bytes
Funciona internamente como zero indexado. verifica se o
i
módulon+1
oun-1
é 0, se assim fori+1
.fonte