function twoLines(a,b,c,d,t) {
let l1o = b - a
let l2o = d - c
let r = 0
for(let l1=1;l1<=l1o;l1++) {
for(let i=0;i<=(l1o-l1);i++) {
let a_ = a + i
let b_ = a_ + l1
let l2 = (l1o + l2o - l1)
for(let c_ = Math.max(b_ + 1, c - (l2 - l2o)); c_<=c && c_+l2<=t;c_++) {
let d_ = c_ + l2
//console.log(`${a_}--${b_} (${b_-a_}) ${c_}--${d_} (${d_ - c_})`)
r++
}
}
}
return r
}
let mul = 1500
let abcd = Array.from({length:4}).map((e,i) => Math.floor(mul * i + Math.random()*mul))
let r = twoLines(...abcd,mul*4)
console.log(`a,b,c,d = ${abcd.join(',')} -> ${r} перестановок`)
ZnVuY3Rpb24gdHdvTGluZXMoYSxiLGMsZCx0KSB7CglsZXQgbDFvID0gYiAtIGEKCWxldCBsMm8gPSBkIC0gYwoJbGV0IHIgPSAwCglmb3IobGV0IGwxPTE7bDE8PWwxbztsMSsrKSB7IAoJCWZvcihsZXQgaT0wO2k8PShsMW8tbDEpO2krKykgewoJCQlsZXQgYV8gPSBhICsgaQoJCQlsZXQgYl8gPSBhXyArIGwxCgkJCWxldCBsMiA9IChsMW8gKyBsMm8gLSBsMSkKCQkJZm9yKGxldCBjXyA9IE1hdGgubWF4KGJfICsgMSwgYyAtIChsMiAtIGwybykpOyBjXzw9YyAmJiBjXytsMjw9dDtjXysrKSB7CgkJCQlsZXQgZF8gPSBjXyArIGwyCgkJCQkvL2NvbnNvbGUubG9nKGAke2FffS0tJHtiX30gKCR7Yl8tYV99KSAke2NffS0tJHtkX30gKCR7ZF8gLSBjX30pYCkKCQkJCXIrKwoJCQl9CgkJfQoJfQoJcmV0dXJuIHIKfQpsZXQgbXVsID0gMTUwMApsZXQgYWJjZCA9IEFycmF5LmZyb20oe2xlbmd0aDo0fSkubWFwKChlLGkpID0+IE1hdGguZmxvb3IobXVsICogaSArIE1hdGgucmFuZG9tKCkqbXVsKSkKbGV0IHIgPSB0d29MaW5lcyguLi5hYmNkLG11bCo0KQpjb25zb2xlLmxvZyhgYSxiLGMsZCA9ICR7YWJjZC5qb2luKCcsJyl9IC0+ICR7cn0g0L/QtdGA0LXRgdGC0LDQvdC+0LLQvtC6YCk=