O fundo
Então, todos nós sabemos a prova clássica que é assim:
a = b
a² = ab
a² - b² = ab - b²
(ab) (a + b) = b (ab)
(a + b) = b
b + b = b
2b = b
2 = 1 (Ha ha!)
De claro, o erro é que você não pode dividir por 0. Como a = b, a - b = 0, houve uma divisão oculta por 0.
O desafio
Você precisa replicar essa prova. Primeiro, declare dois números inteiros aeb (não importa como você os chama) iguais. Em seguida, declare aMod e bMod como versões modificáveis de aeb e inicialmente iguais a eeb, respectivamente. Você deve multiplicar os dois por a e subtrair b * b de ambos. Você deve então dividir por a - b e depois dividi-los por b (ou a) para obter. Em seguida, imprima aMod e bMod com um sinal de igual entre eles.
The Underhanded
Obviamente, como você declarou aeb igual a, a - b = 0 e a divisão por 0 causa um erro. Então você deve fingir de forma criativa. Além disso, como você está tentando replicar a prova, o resultado de todas as operações no aMod e no bMod não deve ser igual quando impresso. Eles não precisam ser exatamente 2 e 1, apenas dois números que não são iguais.
Aqui está um exemplo:
#include <iostream>
#define subtract(a, b) a - b
using namespace std;
int main()
{
int a = 4, b = 4;
int a_2 = a, b_2 = b;
a_2 *= a;
b_2 *= b;
a_2 -= b * b;
b_2 -= b * b;
a_2 = a_2 / subtract(a, b);
b_2 = b_2 / subtract(-b, -a); // a - b == (-b) - (-a)
a_2 /= a;
b_2 /= a;
cout << a_2 << " = " << b_2 << " because I did the same operations on both of them.";
return 0;
}
Talvez não seja o melhor, mas ilustra o ponto.
Bônus secreto
Em vez de imprimir o sinal de igual, você pode imprimir apenas as duas variáveis (aMod e bMod) e, em seguida, ter um código que pareça comparar as duas variáveis em termos de igualdade, mas na realidade é que elas são iguais (e imprimem alguma forma de true
).
Lembre-se, este é um concurso de popularidade, portanto, o maior número de votos positivos vence.
Além disso, uma nova versão da matemática chamada Matemática 2.0 fez uso de brechas padrão para invalidar automaticamente uma prova.
fonte
Respostas:
Javascript
Resultado:
Observe que 0/0 = NaN
Sugestão
fonte
Python 2
Tenho certeza de que é óbvio, já que todo mundo conhece Python, mas aqui está minha tentativa:
Ele produz
True
.Dica:
fonte
Rubi
ideona
Dica:
Explicação:
fonte
GolfScript
Atenção: este programa está trapaceando um pouco, pois não imprime aMod e bMod
Experimente aqui !
Então o que está acontecendo?
fonte
Prolog
A saída quando
areEqual(4,4)
é chamada (ou qualquer outro par de números realmente):Por quê?
fonte
Javascript
Saída:
http://jsbin.com/furino/2/edit?js,output JsBin não parece capaz de executar esse código. Use o console do navegador.
Por quê?
Outro JavaScript: ele não segue exatamente as regras, só gera se as variáveis forem iguais ou não.
Por quê?
fonte
NaN
não é igual àsNaN
especificações de flutuação do IEEE. De fato, uma maneira rápida de testar se você tem umNaN
em C é compará-lo consigo mesmo. Portanto, isso se aplica a todos os idiomas, não apenas ao JS.Fantom
Resultado:
Por quê?
fonte
a
igualb
no final.C
A falácia de prova clássica exige um mal-entendido clássico da sintaxe C. Infelizmente, eu conheci alguns desenvolvedores "de alto nível" que estão convencidos de que C está quebrado por causa de resultados semelhantes a este código. Se você sabe como o C funciona, torna-se bastante óbvio, mas se você viu o código e assumiu que era um idioma diferente, talvez não.
É claro que não funciona tão bem quando escrito de forma mais lingüística com
#include <stdio.h>
e int lançados na frente das declarações.fonte