|
|
@@ -15,28 +15,83 @@ describe('Calc test', () => {
|
|
|
})
|
|
|
|
|
|
it('Two points', () => {
|
|
|
- let low = 300_000
|
|
|
- let high = 1_000_000
|
|
|
- let lastLow = low
|
|
|
- let lastHigh = high
|
|
|
+ let value = 333333
|
|
|
+ let low: number = 0
|
|
|
+ let high: number = 1000000
|
|
|
+ let prevLow: number = low
|
|
|
+ let prevHigh: number = high
|
|
|
|
|
|
let checkNumber = low
|
|
|
|
|
|
function check(checkNumber: number) {
|
|
|
- return checkNumber <= 521_123
|
|
|
+ function final_check(checkNumber: number) {
|
|
|
+ return checkNumber <= value
|
|
|
+ }
|
|
|
+
|
|
|
+ // [,,,,,c(,,,,,,,)]
|
|
|
+ let too_low = false
|
|
|
+ for (let i = 1; i <= 10; i++) {
|
|
|
+ too_low = too_low || (final_check(checkNumber + i))
|
|
|
+ }
|
|
|
+ if (too_low) return 'too_low'
|
|
|
+
|
|
|
+ // [,,,,,(c,,,,,,,)]
|
|
|
+ let too_high = true
|
|
|
+ for (let i = 0; i < 10; i++) {
|
|
|
+ too_high = too_high && (!final_check(checkNumber + i))
|
|
|
+ }
|
|
|
+ if (too_high) return 'too_high'
|
|
|
+
|
|
|
+ return 'ok'
|
|
|
}
|
|
|
|
|
|
+ let count = 0
|
|
|
while (true) {
|
|
|
let checkRst = check(checkNumber)
|
|
|
- logger.debug(`[${low}, ${high}], c: ${checkNumber}, ${checkRst}`)
|
|
|
-
|
|
|
- if (checkRst) {
|
|
|
+ logger.debug(`[${low}, ${high}], c: ${checkNumber}, v: ${value}, ${checkRst}. [${++count}]`)
|
|
|
|
|
|
+ if (checkRst == 'ok') {
|
|
|
+ break
|
|
|
} else {
|
|
|
+ let tempHigh = high
|
|
|
+ let tempLow = low
|
|
|
+
|
|
|
+ if (checkNumber == low) {
|
|
|
+ if (checkRst == 'too_high') {
|
|
|
+ high = tempLow
|
|
|
+ low = prevLow
|
|
|
+
|
|
|
+ prevHigh = tempHigh
|
|
|
+ prevLow = tempLow
|
|
|
+
|
|
|
+ checkNumber = high
|
|
|
+ } else if (checkRst == 'too_low') {
|
|
|
+ low = low + Math.floor((high - low) / 2)
|
|
|
+
|
|
|
+ prevLow = tempLow
|
|
|
+
|
|
|
+ checkNumber = low
|
|
|
+ }
|
|
|
+ } else if (checkNumber == high) {
|
|
|
+ if (checkRst == 'too_high') {
|
|
|
+ high = low + Math.floor((high - low) / 2)
|
|
|
+
|
|
|
+ prevHigh = tempHigh
|
|
|
+
|
|
|
+ checkNumber = high
|
|
|
+ } else if (checkRst == 'too_low') {
|
|
|
+ low = tempHigh
|
|
|
+ high = prevHigh
|
|
|
+
|
|
|
+ prevHigh = tempHigh
|
|
|
+ prevLow = tempLow
|
|
|
|
|
|
+ checkNumber = low
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- logger.debug(checkNumber)
|
|
|
+ logger.debug(`Found value, is: ${checkNumber}`)
|
|
|
})
|
|
|
})
|