Latar belakang
Jadi, kita semua tahu bukti klasik yang seperti ini:
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!)
Dari Tentu saja, kesalahannya adalah Anda tidak dapat membaginya dengan 0. Karena a = b, a - b = 0, jadi ada pembagian tersembunyi oleh 0.
Tantangan
Anda harus meniru bukti ini. Pertama, nyatakan dua bilangan bulat a dan b (tidak masalah apa yang Anda sebut) sama. Kemudian deklarasikan aMod dan bMod sebagai versi yang dapat dimodifikasi dari a dan b dan awalnya masing-masing sama dengan a dan b. Anda harus mengalikan keduanya dengan a, lalu kurangi b * b dari keduanya. Anda kemudian harus membaginya dengan a - b dan kemudian membaginya dengan b (atau a) untuk mendapatkan. Kemudian, cetak aMod dan bMod dengan tanda yang sama di antara mereka.
Si curang
Tentu saja, karena Anda menyatakan a dan b sama dengan, a - b = 0, dan membaginya dengan 0 menyebabkan kesalahan. Jadi, Anda harus memalsukannya secara kreatif. Juga, karena Anda mencoba mereplikasi buktinya, hasilnya pada semua operasi pada aMod dan bMod tidak boleh sama dengan ketika dicetak. Mereka tidak harus sama dengan 2 dan 1, hanya dua angka yang tidak sama.
Berikut ini sebuah contoh:
#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;
}
Mungkin bukan yang terbaik, tetapi menggambarkan intinya.
Bonus curang
Alih-alih mencetak tanda sama dengan, Anda dapat mencetak hanya dua variabel (aMod dan bMod), dan kemudian memiliki kode yang muncul untuk membandingkan dua variabel untuk kesetaraan tetapi dalam kenyataannya terletak bahwa mereka sama (dan mencetak beberapa bentuk true
).
Ingat, ini adalah kontes popularitas, jadi jumlah upvotes terbanyak menang.
Juga, versi baru matematika yang disebut Mathematics 2.0 telah memanfaatkan celah standar secara otomatis membatalkan bukti.
sumber
Jawaban:
JavaScript
Keluaran:
Perhatikan bahwa 0/0 = NaN
Petunjuk
sumber
Python 2
Saya cukup yakin itu sudah jelas karena semua orang tahu Python, tapi inilah upaya saya:
Ini menghasilkan
True
.Petunjuk:
sumber
Rubi
ideone
Petunjuk:
Penjelasan:
sumber
GolfScript
Peringatan: program ini sedikit curang, karena tidak mencetak aMod dan bMod
Coba di sini !
Jadi apa yang terjadi?
sumber
Prolog
Output ketika
areEqual(4,4)
dipanggil (atau beberapa angka lainnya benar-benar):Mengapa?
sumber
JavaScript
Output:
http://jsbin.com/furino/2/edit?js,output JsBin tampaknya tidak dapat menjalankan kode ini. Gunakan konsol browser sebagai gantinya.
Mengapa?
Satu lagi JavaScript: Tidak persis mengikuti aturan, itu hanya menghasilkan jika variabelnya sama atau tidak.
Mengapa?
sumber
NaN
tidak samaNaN
dengan spesifikasi float IEEE. Sebenarnya, cara cepat untuk menguji apakah Anda memiliki nilaiNaN
C adalah membandingkannya dengan dirinya sendiri. Jadi ini berlaku untuk semua bahasa, bukan hanya JS.Fantom
Keluaran:
Mengapa?
sumber
a
sama denganb
pada akhirnya.C
Kesalahan bukti klasik membutuhkan kesalahpahaman sintaksis klasik C. Sayangnya saya telah bertemu dengan beberapa pengembang "tingkat tinggi saja" yang yakin C rusak karena hasil yang mirip dengan kode ini. Jika Anda tahu bagaimana C bekerja, itu menjadi sangat jelas, tetapi jika Anda melihat kode dan menganggapnya bahasa yang berbeda, mungkin tidak.
Tentu saja itu tidak berfungsi dengan baik ketika ditulis dengan lebih idiomatis
#include <stdio.h>
dan int dilemparkan di depan deklarasi.sumber