#!/usr/bin/Rscript
# Practical Limits.
MAX_ABCD = 10000
MAX_N = 20
# Generate (a, b, c, d) such that MAX >= a >= b >= c >= d >= 0.
generate_abcd = function () { sort(runif(4, 0, MAX_ABCD), decreasing = TRUE) }
# Generate n such that MAX_N >= n >= 1.
generate_n = function () { runif(1, 1, MAX_N) }
# TEST CONJECTURE: a^n - b^n + c^n - d^n >= (a - b + c - d)^n
test = function (void) {
# Generate the parameters at random.
n = generate_n()
abcd = generate_abcd()
a = abcd[1]
b = abcd[2]
c = abcd[3]
d = abcd[4]
# Evaluate the expression in the conjecture.
expr = a^n - b^n + c^n - d^n - (a - b + c - d)^n
# Print failure (if any).
if (expr < 0) {
print(paste("abcd:", a, b, c, d, "n:", n, "expr:", expr))
}
# Result of test.
ifelse ((expr >= 0), TRUE, FALSE)
}
# Run multiple iterations of the test.
MAX_ITER = 10000
success = mean(sapply(1:MAX_ITER, test))
print(paste("Conjecture Success Percentage:", success * 100, "%"))
IyEvdXNyL2Jpbi9Sc2NyaXB0CgojIFByYWN0aWNhbCBMaW1pdHMuCk1BWF9BQkNEID0gMTAwMDAKTUFYX04gICAgPSAyMAoKIyBHZW5lcmF0ZSAoYSwgYiwgYywgZCkgc3VjaCB0aGF0IE1BWCA+PSBhID49IGIgPj0gYyA+PSBkID49IDAuCmdlbmVyYXRlX2FiY2QgPSBmdW5jdGlvbiAoKSB7IHNvcnQocnVuaWYoNCwgMCwgTUFYX0FCQ0QpLCBkZWNyZWFzaW5nID0gVFJVRSkgfQoKIyBHZW5lcmF0ZSBuIHN1Y2ggdGhhdCBNQVhfTiA+PSBuID49IDEuCmdlbmVyYXRlX24gPSBmdW5jdGlvbiAoKSB7IHJ1bmlmKDEsIDEsIE1BWF9OKSB9CgojIFRFU1QgQ09OSkVDVFVSRTogYV5uIC0gYl5uICsgY15uIC0gZF5uID49IChhIC0gYiArIGMgLSBkKV5uCnRlc3QgPSBmdW5jdGlvbiAodm9pZCkgewoKICAgICMgR2VuZXJhdGUgdGhlIHBhcmFtZXRlcnMgYXQgcmFuZG9tLgogICAgbiAgICA9IGdlbmVyYXRlX24oKQogICAgYWJjZCA9IGdlbmVyYXRlX2FiY2QoKQogICAgYSAgICA9IGFiY2RbMV0KICAgIGIgICAgPSBhYmNkWzJdCiAgICBjICAgID0gYWJjZFszXQogICAgZCAgICA9IGFiY2RbNF0KCiAgICAjIEV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGluIHRoZSBjb25qZWN0dXJlLgogICAgZXhwciA9IGFebiAtIGJebiArIGNebiAtIGRebiAtIChhIC0gYiArIGMgLSBkKV5uCgogICAgIyBQcmludCBmYWlsdXJlIChpZiBhbnkpLgogICAgaWYgKGV4cHIgPCAwKSB7CiAgICAgICAgcHJpbnQocGFzdGUoImFiY2Q6IiwgYSwgYiwgYywgZCwgIm46IiwgbiwgImV4cHI6IiwgZXhwcikpIAogICAgfQoKICAgICMgUmVzdWx0IG9mIHRlc3QuCiAgICBpZmVsc2UgKChleHByID49IDApLCBUUlVFLCBGQUxTRSkgCn0KCiMgUnVuIG11bHRpcGxlIGl0ZXJhdGlvbnMgb2YgdGhlIHRlc3QuCk1BWF9JVEVSID0gMTAwMDAKc3VjY2VzcyA9IG1lYW4oc2FwcGx5KDE6TUFYX0lURVIsIHRlc3QpKQoKcHJpbnQocGFzdGUoIkNvbmplY3R1cmUgU3VjY2VzcyBQZXJjZW50YWdlOiIsIHN1Y2Nlc3MgKiAxMDAsICIlIikp