A "matriz ascendente" é uma matriz infinita de números inteiros (0 incluídos), em que qualquer elemento é o menor elemento disponível que não foi usado anteriormente na respectiva linha e coluna:
| 1 2 3 4 5 6 ...
--+----------------
1 | 0 1 2 3 4 5 ...
2 | 1 0 3 2 5 4 ...
3 | 2 3 0 1 6 7 ...
4 | 3 2 1 0 7 6 ...
5 | 4 5 6 7 0 1 ...
6 | 5 4 7 6 1 0 ...
. | ...............
Sua tarefa é escrever um programa que produza o elemento encontrado na linha e coluna especificada pela entrada. (entrada e saída padrão)
Casos de teste:
5 3 -> 6
2 5 -> 5
Aplicam-se as regras do Código Golf - o código mais curto vence.
PS Mesmo que isso tenha uma natureza algorítmica, o código pode ser muito, muito conciso.
EDIT: Eu não esperava ver a solução xor tão cedo. Eu estava realmente esperando ver 10 posts com uma abordagem algorítmica e ENTÃO a solução xor. Agora, tendo em mente que não é muito divertido ver como escrever xor em diferentes idiomas, recomendo que você também tente uma abordagem algorítmica.
Então, sim, acho que ninguém pode superar a marca de cinco caracteres agora - portanto, parabenizo Ilmari Karonen pela solução mais inteligente e mais curta. Mas há um novo desafio à frente: escreva a solução algorítmica mais curta .
fonte
Respostas:
GolfScript, 5 caracteres
De fato, essa tarefa é muito simples quando você reconhece o padrão. O único bit incómodo é a indexação baseada em 1 - se os índices de entrada fossem baseados em zero, esta solução de 2 caracteres seria suficiente:
Para explicar isso aos leitores não familiarizados com o GolfScript, o
~
comando avalia a entrada, deixando os dois números na pilha.^
então XORs os dois números mais altos na pilha juntos, deixando o resultado para a saída. Para lidar com a entrada baseada em 1, são necessários mais dois comandos:(
diminui o número mais alto da pilha em um, enquanto\
troca os dois itens principais da pilha.fonte
^
? Mencionei a página de incorporados do GolfScript e a diferença simétrica ; usar esta operação com dois conjuntos de matrizes faz sentido, mas não entendo como funciona para apenas dois números separados.^
operador retorna seu XOR bit a bit .Mathematica
1044Editar
Minha primeira resposta foi baseada em um mal-entendido sobre a natureza do desafio, conforme observado por Ilmari. Aqui está outra tentativa.
Uso
fonte
K, 31
Roubei a lógica XOR de Ilmari Karonen, que eu nunca teria me visto.
fonte
PHP, 38
Apenas uma implementação simples do XOR de Ilmari Karonen
<?php echo --$_GET['a']^--$_GET['b']?>
Uso:
... / xor.php? a = 4 & b = 7
imprimirá 6
fonte
Haskell 174
Achei que eu faria uma solução que não dependesse do XOR. Com preguiça de jogar corretamente.
Edit: Eu percebi um dia depois que isso é apenas o cálculo de XOR. Portanto, se isso conta como uma solução algorítmica, o de Ilmari Karonen também deveria.
fonte
Python 2, 36
Eu acho que desde que estou começando a aprender Python que este seria o momento perfeito para enviar minha primeira resposta (e ninguém respondeu usando Python) e talvez eu possa receber algum feedback.
Obrigado @IlmariKaronen pelo atalho muito legal.
Obrigado @Gareth pelo código abaixo.
Python 3, 56
O programa original que eu havia escrito.
IDEONE com 2 e 5
IDEONE com 3 e 3
fonte
input
já avalia a entrada paraint()
que não seja necessário. Além disso, como você está recebendo um int diretamente,input()
você pode fazer isso-1
imediatamente. Você também pode se livrar completamente das variáveis intermediárias e seguir em frenteprint(input()-1^input()-1)
. Se a importação é ou não necessária - outros usuários do Python neste site não a incluem para programas que usaminput()
, mas eu não sou um programador de Python, então não sei dizer se é necessário ou não.print(input()-1^input()-1)
. Obrigado pela ajuda!sys
?MATL , 2 bytes
Experimente online!
O MATL adia o desafio por vários anos, mas, ei, indexação baseada em 1 natural e uma função xor bit a bit torna isso agradável e arrumado!
fonte
Perl 5 , 12 bytes
Experimente online!
fonte
Javascript 13 bytes
fonte
Japt , 5 bytes
Experimente online!
fonte