Esse desafio foi inspirado em um blog de programação que eu frequento. Veja o post original aqui: Um quebra-cabeça de programação
Desafio
Defina uma função f:Q->Q
tal que f(f(n)) = -n
para todos os números diferentes de zero n
e onde Q
está o conjunto de números racionais.
Detalhes
Em qualquer idioma que você preferir, defina uma função ou programa f
que aceite como parâmetro um número n
e retorne ou produza um número f(n)
.
A entrada pode ser fornecida por qualquer mecanismo que seja mais natural para o seu idioma: argumento de função, leitura de STDIN, argumento de linha de comando, posição da pilha, entrada de voz, sinais de gangue, etc.
A saída deve ser um valor de retorno de uma função / programa ou impresso em STDOUT.
Gostaria de restringir respostas a funções que não tiram vantagem do estado do programa ou da memória / dados globais visíveis de fora da função f
. Por exemplo, manter um contador fora do f
que conta quantas vezes f
foi chamado e apenas fazer uma negação com base nessa contagem não é muito desafiador ou interessante para ninguém. As decisões tomadas f
devem depender apenas de dados dentro f
do escopo lexical.
No entanto, essa restrição provavelmente é inadequada para alguns idiomas orientados a pilha ou outros tipos de idiomas que não distinguem esses tipos de dados ou escopos. Por favor, use seu melhor julgamento para manter o espírito desse desafio.
Pontuação
Aplicam-se regras comuns de golfe com código - sua pontuação é o número de bytes no seu código-fonte.
A resposta mínima requer que o domínio e o codomain f
sejam um subconjunto dos racionais Q
. Se você restringir seu domínio e seu código f
aos números inteiros Z
, sua pontuação será o limite de 90% do número de bytes no seu código-fonte.
Tiebreak
Em caso de empate, o seguinte será usado na ordem:
- Menor número de símbolos que não sejam espaços em branco para impressão no código-fonte
- Data e hora do envio da resposta mais cedo
Editar
Você não é obrigado a suportar números de tamanho arbitrário. Por favor, interprete os conjuntos Z
e Q
como tipos de dados no idioma escolhido (geralmente inteiro e ponto flutuante, respectivamente).
Se sua solução depende inteiramente da estrutura subjacente ou padrão de bits de um tipo de dados, descreva suas limitações e como está sendo usada.
f:Q->Q
significa?
f
é uma função que mapeia membros de Q
(números racionais) para outros membros (possivelmente o mesmo) de Q
. veja en.wikipedia.org/wiki/Function_(mathematics)#Notation