Definição
Uma matriz centrosimétrica é uma matriz quadrada simétrica em relação ao seu centro. Mais rigorosamente, uma matriz de tamanho n × n é centrossimétrica se, para qualquer a seguinte relação é satisfeita: A i ,
Exemplos de tais matrizes
Aqui está uma ilustração da simetria de matrizes como essas (emprestadas do artigo da Wikipedia acima mencionado):
Matriz centrossimétrica de comprimento lateral ( ):
E um comprimento de lado ímpar ( ):
Tarefa e especificações
Dada uma matriz quadrada de tamanho pelo menos , produza um de dois valores distintos e consistentes, decidindo se a matriz é centrossimétrica ou não. Você pode assumir que a matriz consistirá inteiramente de números inteiros positivos.
No entanto, seu código também deve ser centrossimétrico. Ou seja, ele deve ser um programa / função (ou equivalentes) que consiste em linhas, cada uma contendo n bytes na codificação de seu idioma, e deve atender à definição fornecida acima, mas com bytes em vez de números inteiros positivos. A pontuação do seu envio será o valor de n , com um n menor sendo melhor.
Você pode obter entrada e fornecer saída através de qualquer método padrão e em qualquer formato razoável, observando que essas brechas são proibidas por padrão. Você pode (opcionalmente) escolher o tamanho, , como entrada também (a menos que você aceite a entrada como uma lista 1D, nesse caso, você pode apenas levar n 2 como entrada adicional).
Casos de teste
Verdade:
[[1, 2], [2, 1]]
[[1, 2, 3], [5, 6, 5], [3, 2, 1]]
[[10, 5, 30], [2, 6, 2], [30, 5, 10]]
[[100, 100, 100], [100, 50, 100], [100, 100, 100]]
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [3, 2, 10, 2, 3], [9, 8, 7, 6, 5], [7, 6, 5, 4, 3]]
Falsy:
[[1, 2], [1, 2]]
[[1, 2, 10], [5, 6, 5], [11, 2, 1]]
[[14, 5, 32], [2, 6, 2], [30, 5, 16]]
[[19, 19, 19], [40, 50, 4], [19, 19, 19]]
[[1, 2, 20, 4], [7, 6, 7, 8], [8, 7, 6, 6], [3, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [4, 5, 10, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]]
#
), para que a metade inferior do código fosse um comentário.#
não vai funcionar porque comentários precedidas por#
são inline apenas: PRespostas:
JavaScript (ES6), tamanho
12119Todas as versões retornam false para centrosymmetric ou true para não-centrosymmetric.
Matriz unidimensional + comprimento, tamanho 9 (89 bytes)
Recebe entrada na sintaxe de curry
(length)(array)
, em que a matriz é unidimensional.Experimente online!
Matriz + largura, tamanho 11 (131 bytes)
Recebe entrada na sintaxe de currying
(width)(matrix)
.Experimente online!
Carga útil
Recipiente
Apenas matriz, tamanho 12 (155 bytes)
Esta é a minha solução original, que calcula a largura da matriz sozinha.
Experimente online!
Quão?
Precisamos de alguns tokens críticos que não podem ser divididos:
some
length
)=>
Os feeds de linha podem ser inseridos quase em qualquer outro lugar.
O código de carga útil desenrolado é lido como:
e está dentro da seguinte estrutura:
que, uma vez revertido, se torna um comentário de bloco válido:
fonte
Geléia , pontuação 2
Experimente online!
Recebe entrada como uma matriz quadrada achatada (vetor de tamanho ).n2
fonte
Befunge-93 , tamanho 24
Experimente online!
Entrada:
n
seguida pelos elementos da matriz, todos separados por espaços. NOTA: pode ser necessário usar um intérprete diferente se você tiver uma entrada grande o suficiente.Tenho certeza de que há uma maneira melhor de fazer isso, eu só queria tentar isso no Befunge. A parte do código real é a metade superior.
Quão?
O código é dividido em duas seções principais, a inicialização e a verificação .
Inicialização:
Esta seção do código grava a matriz de entrada logo abaixo do código como caracteres ASCII. Esta e a próxima seção usam as três células no canto superior esquerdo do código como dados. Eles são armazenados como
n, i, j
.Verificação:
As outras partes do código são lixo não lido para torná-lo centrossimétrico.
fonte
Sem comentários!
Recebe entrada como uma lista 1-D
Experimente online!
Recebe entrada como uma matriz 2-D
Experimente online!
Obrigado a potato44 por toda a ajuda no chat. E Lynn por jogar golfe fora de linha.
Explicação
A idéia geral aqui é simples, nós
concat
listamos e comparamos com a inversa. No entanto, como queremos ser centrossimétricos, precisamos seguir com cuidado. Primeiro, escrevemos o código como normalmente:Agora, para que nossas linhas reversas também sejam válidas Haskell, precisamos que o lado esquerdo de nossas equações pareça uma definição de função
tacnoc.)esrever>*<)==((
.O primeiro passo para corrigir isso é descartar parênteses.
No entanto, temos alguns novos problemas agora. Ambos
.
e==
quando revertidos são os mesmos, portanto, nossas linhas revertidas tentam redefinir os operadores (<*>
revertido é>*<
assim, estamos bem nessa frente)..
pode ser substituído por,<$>
pois as funções são functors. E podemos substituir==
por/=
, o que nega nossa produção, mas isso ainda está dentro das especificações. Agora temosA fim de reduzir o comprimento da linha, alias
concat
ereverse
.Agora apenas terminamos isso, tornando tudo centrossimétrico e quadrado.
A versão 1-D mais curta funciona da mesma maneira, exceto porque não há necessidade de
concat
salvar duas linhas removendo-a.fonte
<$>
também era<$>
.Python 2 , tamanho 10 (109 bytes)
Experimente online!
Python 2 anterior , tamanho 14 (209 bytes)
Experimente online!
fonte
-i-1
e-j-1
poderia ser simplesmente~i
e~j
Pitão, tamanho 6 (41 bytes)
Experimente aqui
Explicação
A primeira linha inverte a entrada e cada linha e verifica se ficamos com uma cópia da entrada.
O
.q
na segunda linha sai do programa, então tudo depois disso, assim como oq
anterior, é um no-op.fonte
APL (Dyalog Unicode) , pontuação
7654Programa completo. Solicita a expressão da matriz de stdin. Imprime 1 ou 0 e, em seguida, gera um erro consistente. Sem comentários!
Experimente online!
⎕
pronto para a expressão e avaliá-la,
RAVeL (achatar) quer←
armazena o resultado emr
(para r avelled)⌽r
espelhor
r≡
implicitamente imprimir ser
é idêntico ao≡
profundidade der
(dá 1)r⌽
user
para girar isso(isso sempre causará
RANK ERROR
ae sair porque uma matriz não é permitida como argumento à esquerda⌽
)fonte
Perl 6 , tamanho
9 87Experimente online!
Ok, mudei parareverse
é o gargalo aqui. Eu mudei para o tecnicamente mais longo, mas muito mais divisível[*-1 X-^*]
.[R,]
depois de ver a resposta de Brad Gilbert para outra pergunta.O código achatado é
{.flat eq [R,] .flat}
.Edit: Porra, eu percebi que nem preciso achatar a primeira lista, mas as tentativas de encurtá-la para um tamanho 6 falharam com apenas um byte a mais para caber ...
:(
Embora se a considerarmos como uma matriz unidimensional, é fácil ajustá-la no tamanho 6.
Experimente online!
fonte
Wolfram Language (Mathematica) (apenas REPL), tamanho 8 (71 bytes)
Retorna
True
para entrada centrosymmetric, eFalse
caso contrário.No Mathematica REPL, as linhas com erros de sintaxe são ignoradas (com uma barra vermelha grossa aparecendo na lateral da tela). Aqui, apenas as três primeiras linhas,
f=#[[c=-1;;1;;-1,c]]==#&
, são executadas.Este código captura a função no nome
f
.Infelizmente, o built-in
PalindromeQ
é muito longo.fonte
Pyt , tamanho 1
Experimente online!
Verifica se a entrada (na forma de linhas concatenadas) é um palíndromo.
fonte
Japt , tamanho
94 (11 bytes)Experimente online!
Recebe entrada unidimensional, verifica se é um palíndromo. Se desejar, você pode preencher as duas linhas vazias para obter algumas artes ascii.
A versão bidimensional antiga, gira a entrada duas vezes e verifica se é igual ao original:
Experimente online!
fonte
Casca , tamanho 3
Experimente online!Entrada como 1D-List. Cada linha define uma função, mas somente a da primeira linha é chamada.
Ṡ=↔
é um palíndromo que verifica se a entrada é igual a (=
) sua reversa (↔
).Casca , tamanho 4
Experimente online! Para entrada como matriz 2D, concatenamos (
Σ
) a lista de listas antes de verificar se é um palíndromo.fonte
MATL , pontuação 4
A entrada possui o formato
[1 2; 2 1]
, usando;
como separador de linhas.A saída é via STDERR ( permitido por padrão):
Para entrada centrossimétrica, é produzido um erro de erro consistente. Com as versões atuais do Linux e Octave no TIO, é produzida a seguinte saída STDERR (desconsiderando as linhas finais que começam com
Real time: ...
):O erro pode ser diferente dependendo das versões Linux e Octave, mas será consistente nas entradas.
Para entrada não centrossimétrica, nenhum erro é produzido e a saída STDERR no TIO é
Experimente online!Ou verifique todos os casos de teste:
Verifica o programa é centrossimétrico.
Explicação
%
é o símbolo de comentário, que faz com que o restante da linha seja ignorado. Novas linhas também são ignoradas. Então o código é apenasque faz o seguinte:
fonte
Haskell, tamanho
11,10,9, 8Toma a entrada como uma lista 2D! (Crédito a Ørjan Johansen)
fonte
<*>
deve ser>*<
. No 2D, há uma falta-
e a parte invertida não tem os espaços nos lugares certos.Python 2 , tamanho 8
Experimente online!
Recebe entrada como uma lista 1D de linhas concatenadas (de comprimenton2 ) e saídas via código de saída (0 para entradas simétricas, 1 caso contrário).
A lista é simplesmente verificada para ser um palíndromo. Se for, a cadeia de comparação
a[::-1]!=a<_
falha na!=
etapa e curto-circuito; caso contrário, a variável desconhecida_
é avaliada, travando o programa.fonte
R , tamanho 9
Experimente online!
As últimas três linhas são o programa atual que recebe uma matriz 1D como entrada e verifica se é igual ao seu reverso. Valor de verdade: FALSO, Valor de falsidade: VERDADEIRO.
R + pryr, tamanho 9
Experimente online!
fonte
C # (.NET Core) , pontuação
13 1110Experimente online!
Toma entrada como matriz 1D en 2 como comprimento; retornos
false
para centrosymmetric etrue
para não-centrosymmetric. Esta versão usa,System.Linq
mas não sei como ajustá-la no envio de código devido aos requisitos específicos do desafio. Código desenrolado:A seguir, meu envio anterior que não usa o LINQ:
C # (.NET Core) , pontuação
16 1513Experimente online!
Código desenrolado:
fonte
int
paravar
(assim tambémtni
pararav
), o segundo envio também funcionará em JavaScript.Ruby , pontuação
98Experimente online!
Um lambda tomando uma matriz achatada como entrada. Retorna true para centrosymmetric; false, caso contrário.
-1 graças a Mr.XCoder,
Desembalado:
fonte
Limpar \ limpo , tamanho 9
Obrigado a Ørjan Johansen !
Experimente online!
Limpo , tamanho 10
Experimente online!
fonte
m
.05AB1E , tamanho 3 (11 bytes )
Entrada como uma única lista.
Experimente online.
Eu acho que esse não conta ..; p
Entrada como uma única lista.
Experimente online.
Explicação:
Algumas alternativas de tamanho 3 (11 bytes ):
Matriz como entrada.
Experimente online.
Lista única como entrada.
Experimente online.
fonte
C (gcc) , 12 x 12
Experimente online!
fonte
> <>, Tamanho 6
Experimente online!
(Acontece que é uma dor passar valor múltiplo para -v in tio)
A entrada é tomada como uma matriz unidimensional como o estado inicial da pilha com -v. Sai sem saída se a matriz é centrossimétrica, sai com um erro (imprime "Algo cheira a peixe ...") se não.
Eu não estava totalmente feliz com esse formato de saída, então aqui está o tamanho 7, que gera 1 como verdadeiro e 0 como falso.
Experimente online!
fonte
{-?;
Stax , n = 3
Execute e depure
Explicação:
3 é o melhor possível, porque preciso de pelo menos três comandos: Copiar, reverter e comparar
Stax , n = 4
Execute e depure
Explicação:
fonte
Japt , tamanho 2 (5 bytes)
Tente
fonte
Java 10, tamanho 13 (181 bytes)
Experimente online.
Inspirado por @Charlie resposta # 's C .
Explicação Golfed:
fonte
C (gcc) , pontuação 11
Leva uma lista de int e n como argumentos. Retorna n como valor de verdade, 0 como falso.
Experimente online!
fonte
Javascript ES6, tamanho 8:
Javascript ES6, tamanho 7 (é válido?):
Teste:
ou com o lambda salvo na variável denominada
a
:fonte
Clojure, tamanho 9
Experimente online!
fonte