Introdução
O XOR é um portão lógico digital que implementa um ou exclusivo. Na maioria das vezes, isso é mostrado como ^
. Os quatro resultados possíveis em binário:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Isso também pode ser visto como módulo 2 de adição no binário. Em decimal, precisamos converter o decimal em binário 35 = 100011
e 25 = 11001
. Para calcular o valor XOR, os colocamos um sobre o outro:
100011
11001 ^
--------
111010 = 58 in decimal
A tarefa : quando receber um valor inteiro N maior que 1, produza uma tabela XOR com o tamanho N + 1. Por exemplo, N = 5:
0 1 2 3 4 5
1 0 3 2 5 4
2 3 0 1 6 7
3 2 1 0 7 6
4 5 6 7 0 1
5 4 7 6 1 0
Você pode ver que existe um espaço na frente de cada número, porque o valor mais alto da tabela possui o comprimento 1. No entanto, se usarmos N = 9, obteremos a seguinte grade:
0 1 2 3 4 5 6 7 8 9
1 0 3 2 5 4 7 6 9 8
2 3 0 1 6 7 4 5 10 11
3 2 1 0 7 6 5 4 11 10
4 5 6 7 0 1 2 3 12 13
5 4 7 6 1 0 3 2 13 12
6 7 4 5 2 3 0 1 14 15
7 6 5 4 3 2 1 0 15 14
8 9 10 11 12 13 14 15 0 1
9 8 11 10 13 12 15 14 1 0
O valor mais alto tem o comprimento 2, portanto, o valor está alinhado à direita com o comprimento 3 (comprimento mais alto + 1).
Regras:
- O espaço em branco à esquerda não é obrigatório, apenas se usado (ou não) de forma consistente
- Você deve gerar uma tabela no formato mostrado acima.
- O preenchimento entre as colunas deve ser o menor possível
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
output an XOR table with the size N+1
Respostas:
MATL , 10 bytes
O compilador (e em particular este programa) agora parece funcionar no Octave, embora ainda precise de algum refinamento. Você pode usar provisoriamente esse commit do GitHub .
Editar (30/03/16) : Experimente online!
Exemplo
Explicação
fonte
Utilitários Bash + BSD, 45
Estou esperando há muito tempo para encontrar um uso
rs
. Parece ser bom.rs
pode precisar ser instalado nos sistemas Linux. Mas ele sai da caixa no OS X.$1
expande para N e, portanto,echo \$[{0..$1}^{0..$1}]
expande paraecho $[{0..N}^{0..N}]
eval
ed:$[0^0] $[0^1] $[0^2] ... $[0^N] ... $[N^N]
rs
(remodelar) reformula esta linha para N + 1 linhas.-j
justifica à direita e-g1
fornece uma largura de calha igual a 1. Isso garante que a tabela de saída final tenha uma largura mínima entre as colunas.Testei até N = 1000, o que levou 3,8 segundos. Teoricamente, N grande é possível, embora o bash fique sem memória em algum momento com o uso de memória (N + 1) ² da expansão do suporte.
fonte
JavaScript (ES6) 120
122Edite 2 bytes salvos thx ETHproductions
Uma função anônima. Nota: o número na tabela é limitado a 7 dígitos, mais do que razoável, dado o tamanho geral de uma tabela, permitindo números maiores
Agora, devo encontrar uma maneira mais curta de obter o tamanho máximo das colunas, evitando logaritmos
Teste
fonte
~m
para capturar um espaço extra. O uso de uma sequência de modelos pode salvar dois bytes:(z,j)=>`(7 spaces)${i^j}`.slice(~m)
(ignore this padding) ``abc`def`` (ignore this too)
abc`def
C, 114
128 152Editar contagem de espaço simplificada, inspirada no trabalho de Khaled A Khunaifer
Função CA que segue as especificações.
Experimente inserir n como entrada, padrão 9
Menos golfe
fonte
C, 103 bytes
fonte
Gelatina, não concorrente
7 bytes Esta resposta não é concorrente, pois usa recursos que pós-datam o desafio.
Experimente online!
Como funciona
fonte
R, 38 bytes
Normalmente, o R requer muitos bytes apenas para formatar a saída. Nesse caso, é exatamente o oposto.
outer
que geralmente se refere ao produto externo de duas matrizes, pode, quando fornecida, uma função executar isso nas margens dos vetores. Nesse caso, aplicamos a função XOR bit a bitbitwXor
.fonte
CJam,
2927 bytesTeste aqui.
Explicação
fonte
MathCAD, 187 bytes
O MathCAD lida com tabelas construídas facilmente - mas não possui absolutamente Xor bit a bit, nem conversores decimais para binários ou binários para decimais. As funções for iteram pelos valores possíveis. Os lugares i, a2, Xa e Xb são mantidos. O loop while se converte ativamente em binário e durante a conversão em binário também executa a função xor (a pequena cruz com o círculo ao redor). Ele armazena o número binário em um número de base 10 composto por 0 e 1. Este é então convertido antes de ser armazenado na matriz M através da função de soma.
Isso pode ser resolvido facilmente (mesmo trocando os espaços reservados por outros mais curtos), mas achei que iria postá-lo e ver se alguém pode jogar o conversor binário em decimal mais do que qualquer outra coisa.
fonte
k4, 50 bytes
Por exemplo:
fonte
C, 149 bytes
Detalhado
fonte
11..1
ao significativo no valor de entradan
, pode ser feito encontrando primeiro a potência mais próxima de 2 e, em seguida, xor com o número anterior,0001 xor 1110 = 1111
for(k=1;k<=n;)k*=2;k--;
. Agora vejo que é muito menor do que a minha tentativa C para o mesmo (o meu é melhor para o desempenho, mas o desempenho não importa neste desafio)2^k xor 2^k -1
favormax{2^k<=n}
ou a2^k -1
favormin{2^k>=n}
. para obter tudo11..1
lá dentroPython 3,
133131 bytesfonte
Mathematica, 108 bytes
Desconsidere o erro, é apenas
Thread
não sei o que está fazendo.fonte
Emacs Lisp, 193 bytes
Ungolfed:
A saída é enviada para o
*Message*
buffer, que seriastdout
sex
fosse usada dentro de um script.fonte
Python 2, 114 bytes
Demorou alguns anos para encontrar uma maneira de fazer preenchimento de largura variável
.format()
(alguns, não muito) e ajustá-lo da maneira certa, mas acho que tenho tudo para especificar agora. Poderia usar mais golfe nesse cálculo de largura.fonte
Objeto Caché , 127 bytes
Detalhado:
fonte
Pyke, 8 bytes (não concorrente)
Explicação:
Experimente aqui
fonte
Python 2, 77 bytes
fonte
J , 10 bytes
Experimente online!
fonte
Excel VBA, 95 bytes
Função de janela imediata VBE anônima que leva as entradas do intervalo
[A1]
e as saídas para o console.fonte
Pequeno Básico , 499 bytes
Um script que recebe a entrada do
TextWindow
objeto e gera a mesmaExperimente em SmallBasic.com Usa o Silverlight e, portanto, deve ser executado no IE ou Edge
Selecione o console preto, digite input número inteiro e pressione Enter.
fonte