- Joined
- Sep 26, 2009
- Messages
- 9,529
You can make text tags with large font which makes it unnecessary to filter out characters like that
library BigInt requires BI
endlibrary
Put largest 2 digits of number being divided together
digit1*base+digit2 = combined digit
divide the combined digit by the largest dividend digit
combined/largestDividend = first guess
loop
multiply the first guess by the 2nd largest dividend digit if there is one
If there isn't, exit
2nd largest digit * first guess = some product
divide that by the base
some product / base = some quotient
divide that quotient by the largest dividend digit
some quotient / largest dividend digit = guess off
exitwhen prev guess off == guess off
set first guess = first guess + (prevGuessOff-guessOff)
set prevGuessOff = guessOff
endloop
multiply first 2 digits together
3*46339+1538 = 140555
do that / first digit
140555/21 = 6693
do that * second digit
179914533
divide by 46339
3882
divide by first digit
3882/21 = 184
subtract from first guess
6693 - 184 = 6509
actual: 6513
repeat
6509 * 26881 = 174968429
174968429 / 46339 = 3775
3775/21 = 179
184 - 179 = 5 (exitwhen this is 0)
new: 179
6693 - 179 = 6514
repeat
6514 * 26881 = 175102834
175102834 / 46339 = 3778
3778/21 = 179
179 - 179 = 0
set so[0]=5
set so[1]=2
set so[2]=3
set so[3]=11
set so[4]=2
set so[5]=7
set so[6]=3
loop
exitwhen (toSubtract.prev.digit*base + toSubtract.prev.prev.digit <= remainder.prev.digit*base + remainder.prev.prev.digit)
set guess1 = guess - ((toSubtract.prev.digit*base + toSubtract.prev.prev.digit) - (remainder.prev.digit*base + remainder.prev.prev.digit))/divisor.prev.digit
static if DEBUG_MSGS then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,10,"Guess 1: "+I2S(guess1))
endif
exitwhen (0 >= guess1 or base <= guess1 or guess1 == guess)
call toSubtract.multFast(base, divisor, guess1)
if (guess1 + 5 > guess and guess1 - 5 < guess) then
set guess = guess1
exitwhen true
endif
set guess = guess1
static if DEBUG_MSGS then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,10,"To Subtract 1: "+toSubtract.toString())
endif
if (remainder.size > toSubtract.size) then
set guess2 = guess + ((remainder.prev.digit*base + remainder.prev.prev.digit) - (toSubtract.prev.digit))/divisor.prev.digit
else
if (remainder.prev.digit > toSubtract.prev.digit) then
set guess2 = guess + ((remainder.prev.digit*base + remainder.prev.prev.digit) - (toSubtract.prev.digit*base + toSubtract.prev.prev.digit))/divisor.prev.digit
else
set guess2 = guess + (remainder.prev.prev.digit - toSubtract.prev.prev.digit)/divisor.prev.digit + (divisor.prev.prev.digit + base/2)/base
endif
endif
static if DEBUG_MSGS then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,10,"Guess 2: "+I2S(guess2))
endif
exitwhen (base <= guess2 or 0 >= guess2 or guess1 == guess2)
call toSubtract.multFast(base, divisor, guess2)
if (guess2 + 5 > guess and guess2 - 5 < guess) then
set guess = guess2
exitwhen true
endif
set guess = guess2
static if DEBUG_MSGS then
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,10,"To Subtract 2: "+toSubtract.toString())
endif
endloop
if condition then
// code
else
exitwhen true
endif
exitwhen not condition
// code