Melhor resposta
Existem muitas respostas interessantes para esta … pergunta bizarra … pode muito bem tentar a sorte, suponho ?
Então, recebemos: 2 + 2 = 6 e 1 + 3 =?
Método 1:
Esta questão está de alguma forma marcada em Truques e quebra-cabeças matemáticos e suponho que podemos suspender toda a lógica matemática que conhecemos, digamos ceteris paribus.
Após uma inspeção mais detalhada, vemos que o único a diferença entre as duas equações é -1 (2 → 1) e +1 (2 → 3). Supondo que ceteris paribus conforme mencionado, a resposta também deve apresentar -1 e +1.
Portanto, possivelmente a resposta simples é
1 + 3 = 6
Método 2:
E como este é um quebra-cabeça, vamos ver as coisas de outra perspectiva. Embora outros métodos tenham começado a usar alfabetos, vou tentar uma técnica de substituição típica … embora possa ser falha.
Vamos supor que 2 = 3.
2u = 3, portanto, 1u = 1,5 e 3u = 4,5
Portanto, 1 + 3 = 1,5 + 4,5 = 6
Método 3:
Vemos que existem 4 números presentes (2, 2, 1, 3), dois dos quais são iguais (2) . Se fôssemos usar a multiplicação, o que aconteceria se os números fossem divididos em ambas as equações?
2 × 3 = 6. Restamos com 2 e 1.
Portanto, 2 × 1 = 2 = 1 + 3 = 2.
Há são tantas as respostas possíveis e tudo se resume à nossa criatividade em dobrar as leis matemáticas.
Atualização: Eu realmente gostei da abordagem de letras para o quebra-cabeça e as mãos para baixo, deve ser o método mais lógico, embora mais adequado para um quebra-cabeça.
Resposta
Parece que isso exige uma sobrecarga do símbolo +!
Que tal isso? Se você tiver uma expressão em que um determinado inteiro – chame-o de Coelho para fins de discussão – aparece em ambos os lados de +, é sua responsabilidade dobrar o Coelho, elevar o resultado ao quadrado e adicionar Coelho ao quadrado. Portanto, 7 + 7 significa que você deve dobrar 7, dando 14. Quadrado 14, resultando em 196. Finalmente, some 7 a 196, resultando em 203.
Essa parece ser a parte fácil. A parte interessante do quebra-cabeça, para mim, é como escrever uma definição desse método + sobrecarregado em Scala, de forma que o corpo da definição possa usar + com seu significado comum de adição simples, não uma referência recursiva.
Vou ter que coçar a cabeça sobre isso.
Atualização: A seguinte caixa de diálogo REPL do Scala ilustra uma maneira de dar um novo significado, no contexto de um novo tipo de dados chamado Rabbit.
scala> case class Rabbit(i: Int) {def +(y:Rabbit):Int=4*i*i+y.i}
defined class Rabbit
scala> Rabbit(7)
res5: Rabbit = Rabbit(7)
scala> res5+res5
res6: Int = 203
scala> (1 to 7).map(Rabbit(\_)).map(r=>r+r)
res7: scala.collection.immutable.IndexedSeq[Int] = Vector(5, 18, 39, 68, 105, 150, 203)