Os grupos são uma estrutura amplamente utilizada em matemática e têm aplicações em ciência da computação. Esse desafio de código é sobre o menor número de caracteres para criar uma tabela de grupo para o grupo de aditivos Z n .
Como a tabela é construída: Para Z n , os elementos são {0, 1, 2, ..., n-1}. A tabela terá n linhas e n colunas. Para a i-ésima entrada da tabela, o valor é i + j mod n. Por exemplo, em Z 3 , a 1-2ª entrada (2ª linha, 3ª coluna se você contar a linha / coluna inicial como 1) é (1 + 2)% 3 = 0 (consulte a saída de amostra).
Entrada: um número inteiro positivo, n
Saída: uma tabela que é uma apresentação textual de Z n , construída como descrito acima, e exibida como mostrado abaixo nas saídas de amostra. Os espaços são opcionais
Entrada de amostra: 3
Saída de amostra:
0 1 2
1 2 0
2 0 1
Entrada de amostra: 5
Saída de amostra:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
Respostas:
APL (10)
(Supondo
⎕IO=0
. Funciona em ngn / apl por padrão, outros APLs tendem a precisar de um⎕IO←0
primeiro.)Explicação:
⍳⍵
: os números [0..⍵)∘.+⍨
: criar uma tabela de soma⍵|
: números na tabelamod
⍵fonte
⊢|⍳∘.+⍳
ou os trens não funcionaram na versão de julho de 2014 da ngn?GolfScript (13 caracteres)
Pelo seu comentário sobre a resposta de Claudiu, entendo que não é necessário espaço em branco entre os elementos de uma linha. Sobre esse entendimento:
Demonstração online
Dissecação:
Se for necessário espaço em branco, por 20 caracteres:
fonte
Python 2, 66 bytes
Gira a lista popeando e anexando novamente.
Python 3, 53 bytes
Usa o mesmo método que @ mbomb007, mas abusando
print
como uma função.fonte
*R,=
é uma construção estranha ... Serve apenas para converterrange
a saída em uma tupla?*R
range
é um objeto iterável que pode ser descompactado e reembalado, coletando tudoR
. Deve ser equivalenteR=list(range(n))
, sendo o primeiro mais conciso.05AB1E ,
108 bytesExperimente online!
Explicação
Resposta anterior: 10 bytes
Experimente online!
Minha primeira tentativa no golfe em 05AB1E.
Explicação da resposta anterior
fonte
FݨN._ðý,
e fiqueݨsGDÀ})»
à vontade para fazer qualquer pergunta no bate-papo 05AB1E e dê uma olhada na página de dicas do 05AB1E, se você ainda não o fez. :)Gelatina , 4
Experimente online!
fonte
Pyth , 16
Imprime a tabela com espaço em branco apropriado.
Explicação:
fonte
J, 20
Lendo de stdin e produzindo uma matriz 2D (que renderiza o mesmo que a amostra na pergunta).
Se uma função usando uma string for suficiente
(|+/~@i.)@".
,. Se uma função que aceita um número inteiro for suficiente,|+/~@i.
deve ser suficiente.Explicação:
f g
em J (para as funções f, g) denota um "gancho", que é uma função composta que executa a entrada através de g (uma função unária) e depois a entrada e o resultado de g através de f (uma função binária). A resposta é um garfo com componentes|
(módulo) e+/~@i.
. A última parte é "tabela de somas composta com lista de índices até" (i.
é um pouco comorange
em Python).fonte
|+/~@i.
, o que deve ser aceitável pelas regras padrão aqui.Oitava, 23
fonte
Python 2, 67
Experimente os dois aqui
Eu uso a divisão de lista para "girar" os
n
tempos da lista , imprimindo-a sempre. (68 caracteres)Consegui conseguir um personagem mais curto que o anterior com um truque estranho. (67 caracteres)
fonte
def f(n):*R,=range(n);[print(*R[i:]+R[:i])for i in R]
. Eu não acho que o splat realmente funcionaria sem parênteses.Matlab (28)
fonte
x86-64 Código da Máquina (Linux),
8064 bytesEu esperava que essa solução fosse apenas alguns bytes mais curta para poder superar alguns dos outros envios neste post. Existe a possibilidade de, se eu usar algumas das versões de 32 ou 16 bits dos registradores, poder cortar alguns bytes.A conversão de muitos registros para as versões de endereçamento de 32 bits economizou 16 bytes.Basicamente, essa função é chamada de um programa C / C ++ que passou n por rdi e um ponteiro para uma alocação por rsi. O ponteiro que o rsi possui é na verdade 1 byte do final da alocação, já que a tabela é construída ao contrário. Isso facilita a conversão de um número inteiro para caracteres ASCII imprimíveis (feito com o número x mod 10 e a conversão do resultado em ASII).
Para ver o código do wrapper C ++ e comentários sobre o assembly, confira meu repositório .
fonte
Pari / GP , 26 bytes
Experimente online!
fonte
matrix(m,n,X,Y,expr)
gera umamXn
matriz de expressãoexpr
, a variável de linhaX
passando de1
param
e a variável de colunaY
indo de1
paran
.MathGolf ,
108 bytesExperimente online!
-2 bytes graças a Jo King
Explicação
Vou usar exemplo de entrada
3
para a explicaçãoVocê também pode fazer
r░y\(Åo╫
, o que diminui o número de loops em 1 e ignora o descarte após o loop.fonte
q
para remover a duplicação?o
. Embora o melhor que eu pudesse descobrir dessa maneira fosse esse . Também pode ter 10 bytes, mas estou no celular.C - 96
fonte
Golfscript, 20 caracteres
Um trabalho terrivelmente preguiçoso.
Execute aqui . (A primeira linha é simular stdin).
Explicação :
Quando o programa termina, a pilha contém cada uma das matrizes com novas linhas entre elas. O intérprete gera o que resta na pilha, fornecendo o resultado desejado.
fonte
CJam, 14 caracteres
Teste aqui.
Explicação
A idéia é repetir a string de
0
paraN-1
, mas dividi-la em blocos deN+1
. Essa incompatibilidade desloca a linha para a esquerda a cada vez. Por fim, precisamos nos livrar do caráter estranho e juntar tudo com novas linhas.Aqui está o código explodido, junto com o conteúdo da pilha para entrada
3
.O resultado é impresso automaticamente no final do programa. (Observe que o conteúdo da pilha para a etapa final é tecnicamente uma matriz mista contendo números e caracteres de nova linha, não uma sequência contendo apenas caracteres.)
Como alternativa, 11 caracteres
Com a adição recente
ew
(isso é mais recente que o desafio - ele retorna todas as substrings sobrepostas de determinado comprimento), pode-se fazer 11 bytes:Aqui está como este funciona:
fonte
l~_,\{_(+N\}*;
. Gostaria de saber se podemos fazer melhor com isso embora.ew
pode funcionar, mas é mais recente que o desafio.MATL , 6 bytes
Experimente online!
fonte
Excel VBA, 77 bytes
Função de janela imediata VBE anônima que leva a entrada, como inteiro, n, do intervalo
[A1]
e as saídas para o intervaloA2.Resize(n,n)
.fonte
Perl 6 , 23 bytes
Experimente online!
Bloco de código anônimo que pega um número e imprime a matriz no formato especificado com espaços. Se pudermos retornar alguma coisa, ela
.put
poderá ser removida.Explicação:
fonte
Carvão vegetal , 13 bytes
Experimente online! Link é a versão detalhada do código. Nota: Espaço à direita. Explicação:
fonte
APL (NARS), 15 caracteres, 30 bytes
teste:
aqui o idioma não precisa de comentários ...
fonte
Japt
-R
, 5 bytesTente
Se o uso de vírgula como separador não for válido, adicione um byte para nenhum separador:
Tente
Ou 2 bytes para usar um espaço:
Tente
fonte
R , 37 bytes
Cria um vetor de 0 a n-1 e adiciona sequencialmente 1, depois 2 ... então n, e modula a matriz pelo comprimento do vetor, que é n.
Experimente online!
fonte
Quarto (gforth) , 53 bytes
Experimente online!
Explicação
Loop aninhado que gera uma nova linha a cada n números
Código Explicação
fonte