Lo sfondo
Quindi, conosciamo tutti la prova classica che va così:
a = b
a² = ab
a² - b² = ab - b²
(ab) (a + b) = b (ab)
(a + b) = b
b + b = b
2b = b
2 = 1 (Ah ah!)
Di naturalmente, l'errore è che non puoi dividere per 0. Dato che a = b, a - b = 0, quindi c'era una divisione nascosta per 0.
La sfida
Devi replicare questa prova. Prima di tutto, dichiara due numeri interi aeb (non importa come li chiami) uguale. Quindi dichiarare aMod e bMod come versioni modificabili di a e b e inizialmente pari a a e b, rispettivamente. Devi moltiplicarli entrambi per a, quindi sottrarre b * b da entrambi. È quindi necessario dividere per a - b e quindi dividerli per b (o a) per ottenere. Quindi, stampa aMod e bMod con un segno uguale tra loro.
The Underhanded
Naturalmente, poiché hai dichiarato aeb uguale, a - b = 0 e la divisione per 0 provoca un errore. Quindi devi falsificarlo in modo creativo. Inoltre, poiché si sta tentando di replicare la prova, il risultato di tutte le operazioni su aMod e bMod non deve essere uguale quando viene stampato. Non devono eguagliare esattamente 2 e 1, solo due numeri che non sono uguali.
Ecco un esempio:
#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;
}
Forse non il migliore, ma illustra il punto.
Bonus Underhanded
Invece di stampare il segno di uguale, puoi stampare solo le due variabili (aMod e bMod) e quindi avere un codice che sembra confrontare le due variabili per uguaglianza ma in realtà risiede che sono uguali (e stampa una forma di true
).
Ricorda, questo è un concorso di popolarità, quindi vince il maggior numero di voti.
Inoltre, una nuova versione della matematica chiamata Mathematics 2.0 ha fatto uso di scappatoie standard invalidando automaticamente una prova.