############################################################################ # # File: vpredrep.icn # # Subject: Procedure to produce predecessors of versum number # # Author: Ralph E. Griswold # # Date: May 11, 1998 # ############################################################################ # # EXPERIMENTAL VERSION # # vpred(i) generates the "primary" numbers whose reverse sum is # i; primary is as defined for versum seeds. # # # vpred_all(i) generates all the numbers whose reverse sum is i. # # isversum(i) checks for versum numbers only; returns i if # successful. # # This one uses lists for memory -- and resets the memory with each # call of vpred(). # ############################################################################ # # Links: eqvseeds, strings # ############################################################################ link eqvseeds link strings global vpred_done # table of first predecessors global nopreds # no-predecessor record global limit_ # limit on calls to vpred_() procedure vpred(s, i) #: primary predecessors of versum number local t, firstp static done initial done := vpred_init() if reject(s) then fail limit_ := (\i | 2 ^ 31) # limit on calls to vpred_() vpred_done := copy(done) # avoid build-up from successive calls if s[1] == ("-" | "0") then fail every t := vpred_(s, i) do # i limits depth if t[1] ~== "0" then suspend t end procedure vpred_(s) local t, v, p, i, u static count initial count := 0 count +:= 1 if count > limit_ then { write("\n*** exceeded limit on calls to vpred_()") exit() } s := string(s) if not(upto('123456789', s)) then return s # zeros or empty string v := vpred_done[s] if \v then { suspend !v fail } p := case s[1] of { # select procedure "0" : vpred_i0 "1" : vpred_i1 default : vpred_in } u := set() every t := string(p(s)) do { if s[1] == "0" == t[1] == t[-1] then insert(u, t) else if (t + reverse(t)) == s then { insert(u, t) } # else write(&errout, "bogon: ", t, " from ", image(p)) } if *u > 0 then { u := sort(u) suspend !u vpred_done[s] := u } else vpred_done[s] := nopreds # no-predecessor record end procedure reject(s) local first, second, last first := s[1] last := s[-1] if first > 1 then { # "2..." ... "9..." if last == (first | (first - 1)) then fail else return } else { # "1..." and may be bimorphic if last == "1" then fail # "1...1" always possible second := s[2] case second of { "0" : if last == ("0" | "9") then fail else return "1" : if last == "0" then fail else return "2" : if last == "2" then fail else return "9" : if last == "8" then fail else return default : if last == (second | (second - 1)) then fail else return } } end procedure vpred_i0(s) # initial 0 local lzeros, middle suspend (s[-1] == "0") & ("0" || vpred_noinc(s[2:-1]) || "0") end procedure vpred_i1(s) # initial 1 local last, middle, mtail, zmid last := s[-1] middle := s[2:-1] mtail := middle[2:0] zmid := right(minus1(mtail), *mtail, "0") # may fail, leaving zmid null if last == "0" then suspend { ("1" || vpred_noinc(\zmid) || "9") | ("1" || vpred_inc("1" || \zmid) || "9") | ("1" || vpred_noinc(minus1(middle)) || "9") | ("0" || vpred_inc("1" || middle) || last) | right(s / 2, *s, "0") } else if last == "1" then suspend { ("1" || vpred_noinc(middle) || "0") | ("2" || vpred_noinc(\zmid) || "9") | ("2" || vpred_noinc(minus1("1" || mtail)) || "9") | ("2" || vpred_inc("1" || \zmid) || "9") } else suspend { # last digit > 1 ((last + 1) || vpred_noinc(\zmid) || "9") | ((last + 1) || vpred_noinc(minus1("1" || mtail)) || "9") | ((last + 1) || vpred_inc("1" || \zmid) || "9") | (last || vpred_inc("1" || mtail) || "0") } end procedure vpred_in(s) # initial > 1 local first, middle, last, t, f, l first := s[1] middle := s[2:-1] last := s[-1] if first == last then { if first % 2 = 0 then suspend (first / 2) || vpred_noinc(middle) || (first / 2) else suspend ((first / 2) + 1) || vpred_noinc(middle) || (first / 2) } else if first == (last + 1) then { if first % 2 = 0 then suspend (first / 2) || vpred_inc("1" || middle) || ((first / 2) - 1) else suspend (first / 2) || vpred_inc("1" || middle) || (first / 2) } else fail end procedure vpred_inc(s) # predecessor produces carry local t suspend 1(t := vpred_(s), *s = (*t + 1)) end procedure vpred_noinc(s) # predecessor doesn't produce carry local t suspend 1(t := vpred_(s), *t = *s) end procedure isversum(s) local i, strip1, strip2, p, middle, pred, midpred, head if s[1] ~== s[-1] then { if vpred(s) then return s else fail } i := *s / 2 + 1 if s == reverse(s) then { # handle palindromes if *s % 2 = 0 then return s else if s[i] % 2 = 0 then return s else fail } strip1 := s[1:i] strip2 := reverse(s)[1:i] strip1 ? { # look for common substrings every head := =strip2[1:(*strip2 + 1) to 1 by -1] do { p := *head + 1 middle := s[p:-p + 1] if *middle = 0 then return s if middle[1] == "0" then midpred := vpred_(middle) | next else midpred := right(vpred(middle), *middle, "0") | next pred := strip1[1:p] || midpred || repl("0", p - 1) if s == pred + reverse(pred) then return s else next } } if vpred(s) then return s else fail # if all else fails end procedure vpred_init() local tbl tbl := table() nopreds := [] # common empty list for no predecessors tbl["0"] := ["0"] tbl["1"] := nopreds tbl["2"] := ["1"] tbl["3"] := nopreds tbl["4"] := ["2"] tbl["5"] := nopreds tbl["6"] := ["3"] tbl["7"] := nopreds tbl["8"] := ["4"] tbl["9"] := nopreds tbl["00"] := ["00"] tbl["01"] := nopreds tbl["02"] := nopreds tbl["03"] := nopreds tbl["04"] := nopreds tbl["05"] := nopreds tbl["06"] := nopreds tbl["07"] := nopreds tbl["08"] := nopreds tbl["09"] := nopreds tbl["10"] := ["5"] tbl["11"] := ["10"] tbl["12"] := ["6"] tbl["13"] := nopreds tbl["14"] := ["7"] tbl["15"] := nopreds tbl["16"] := ["8"] tbl["17"] := nopreds tbl["18"] := ["9"] tbl["19"] := nopreds tbl["20"] := nopreds tbl["21"] := nopreds tbl["22"] := ["20"] tbl["23"] := nopreds tbl["24"] := nopreds tbl["25"] := nopreds tbl["26"] := nopreds tbl["27"] := nopreds tbl["28"] := nopreds tbl["29"] := nopreds tbl["30"] := nopreds tbl["31"] := nopreds tbl["32"] := nopreds tbl["33"] := ["30"] tbl["34"] := nopreds tbl["35"] := nopreds tbl["36"] := nopreds tbl["37"] := nopreds tbl["38"] := nopreds tbl["39"] := nopreds tbl["40"] := nopreds tbl["41"] := nopreds tbl["42"] := nopreds tbl["43"] := nopreds tbl["44"] := ["40"] tbl["45"] := nopreds tbl["46"] := nopreds tbl["47"] := nopreds tbl["48"] := nopreds tbl["49"] := nopreds tbl["50"] := nopreds tbl["51"] := nopreds tbl["52"] := nopreds tbl["53"] := nopreds tbl["54"] := nopreds tbl["55"] := ["50"] tbl["56"] := nopreds tbl["57"] := nopreds tbl["58"] := nopreds tbl["59"] := nopreds tbl["60"] := nopreds tbl["61"] := nopreds tbl["62"] := nopreds tbl["63"] := nopreds tbl["64"] := nopreds tbl["65"] := nopreds tbl["66"] := ["60"] tbl["67"] := nopreds tbl["68"] := nopreds tbl["69"] := nopreds tbl["70"] := nopreds tbl["71"] := nopreds tbl["72"] := nopreds tbl["73"] := nopreds tbl["74"] := nopreds tbl["75"] := nopreds tbl["76"] := nopreds tbl["77"] := ["70"] tbl["78"] := nopreds tbl["79"] := nopreds tbl["80"] := nopreds tbl["81"] := nopreds tbl["82"] := nopreds tbl["83"] := nopreds tbl["84"] := nopreds tbl["85"] := nopreds tbl["86"] := nopreds tbl["87"] := nopreds tbl["88"] := ["80"] tbl["89"] := nopreds tbl["90"] := nopreds tbl["91"] := nopreds tbl["92"] := nopreds tbl["93"] := nopreds tbl["94"] := nopreds tbl["95"] := nopreds tbl["96"] := nopreds tbl["97"] := nopreds tbl["98"] := nopreds tbl["99"] := ["90"] tbl["000"] := ["000"] tbl["001"] := nopreds tbl["002"] := nopreds tbl["003"] := nopreds tbl["004"] := nopreds tbl["005"] := nopreds tbl["006"] := nopreds tbl["007"] := nopreds tbl["008"] := nopreds tbl["009"] := nopreds tbl["010"] := nopreds tbl["011"] := nopreds tbl["012"] := nopreds tbl["013"] := nopreds tbl["014"] := nopreds tbl["015"] := nopreds tbl["016"] := nopreds tbl["017"] := nopreds tbl["018"] := nopreds tbl["019"] := nopreds tbl["020"] := ["010"] tbl["021"] := nopreds tbl["022"] := nopreds tbl["023"] := nopreds tbl["024"] := nopreds tbl["025"] := nopreds tbl["026"] := nopreds tbl["027"] := nopreds tbl["028"] := nopreds tbl["029"] := nopreds tbl["030"] := nopreds tbl["031"] := nopreds tbl["032"] := nopreds tbl["033"] := nopreds tbl["034"] := nopreds tbl["035"] := nopreds tbl["036"] := nopreds tbl["037"] := nopreds tbl["038"] := nopreds tbl["039"] := nopreds tbl["040"] := ["020"] tbl["041"] := nopreds tbl["042"] := nopreds tbl["043"] := nopreds tbl["044"] := nopreds tbl["045"] := nopreds tbl["046"] := nopreds tbl["047"] := nopreds tbl["048"] := nopreds tbl["049"] := nopreds tbl["050"] := nopreds tbl["051"] := nopreds tbl["052"] := nopreds tbl["053"] := nopreds tbl["054"] := nopreds tbl["055"] := nopreds tbl["056"] := nopreds tbl["057"] := nopreds tbl["058"] := nopreds tbl["059"] := nopreds tbl["060"] := ["030"] tbl["061"] := nopreds tbl["062"] := nopreds tbl["063"] := nopreds tbl["064"] := nopreds tbl["065"] := nopreds tbl["066"] := nopreds tbl["067"] := nopreds tbl["068"] := nopreds tbl["069"] := nopreds tbl["070"] := nopreds tbl["071"] := nopreds tbl["072"] := nopreds tbl["073"] := nopreds tbl["074"] := nopreds tbl["075"] := nopreds tbl["076"] := nopreds tbl["077"] := nopreds tbl["078"] := nopreds tbl["079"] := nopreds tbl["080"] := ["040"] tbl["081"] := nopreds tbl["082"] := nopreds tbl["083"] := nopreds tbl["084"] := nopreds tbl["085"] := nopreds tbl["086"] := nopreds tbl["087"] := nopreds tbl["088"] := nopreds tbl["089"] := nopreds tbl["090"] := nopreds tbl["091"] := nopreds tbl["092"] := nopreds tbl["093"] := nopreds tbl["094"] := nopreds tbl["095"] := nopreds tbl["096"] := nopreds tbl["097"] := nopreds tbl["098"] := nopreds tbl["099"] := nopreds tbl["100"] := ["050"] tbl["101"] := ["100"] tbl["102"] := nopreds tbl["103"] := nopreds tbl["104"] := nopreds tbl["105"] := nopreds tbl["106"] := nopreds tbl["107"] := nopreds tbl["108"] := nopreds tbl["109"] := nopreds tbl["110"] := ["19", "055"] tbl["111"] := nopreds tbl["112"] := nopreds tbl["113"] := nopreds tbl["114"] := nopreds tbl["115"] := nopreds tbl["116"] := nopreds tbl["117"] := nopreds tbl["118"] := nopreds tbl["119"] := nopreds tbl["120"] := ["060"] tbl["121"] := ["29", "110"] tbl["122"] := nopreds tbl["123"] := nopreds tbl["124"] := nopreds tbl["125"] := nopreds tbl["126"] := nopreds tbl["127"] := nopreds tbl["128"] := nopreds tbl["129"] := nopreds tbl["130"] := ["065"] tbl["131"] := nopreds tbl["132"] := ["39"] tbl["133"] := nopreds tbl["134"] := nopreds tbl["135"] := nopreds tbl["136"] := nopreds tbl["137"] := nopreds tbl["138"] := nopreds tbl["139"] := nopreds tbl["140"] := ["070"] tbl["141"] := ["120"] tbl["142"] := nopreds tbl["143"] := ["49"] tbl["144"] := nopreds tbl["145"] := nopreds tbl["146"] := nopreds tbl["147"] := nopreds tbl["148"] := nopreds tbl["149"] := nopreds tbl["150"] := ["075"] tbl["151"] := nopreds tbl["152"] := nopreds tbl["153"] := nopreds tbl["154"] := ["59"] tbl["155"] := nopreds tbl["156"] := nopreds tbl["157"] := nopreds tbl["158"] := nopreds tbl["159"] := nopreds tbl["160"] := ["080"] tbl["161"] := ["130"] tbl["162"] := nopreds tbl["163"] := nopreds tbl["164"] := nopreds tbl["165"] := ["69"] tbl["166"] := nopreds tbl["167"] := nopreds tbl["168"] := nopreds tbl["169"] := nopreds tbl["170"] := ["085"] tbl["171"] := nopreds tbl["172"] := nopreds tbl["173"] := nopreds tbl["174"] := nopreds tbl["175"] := nopreds tbl["176"] := ["79"] tbl["177"] := nopreds tbl["178"] := nopreds tbl["179"] := nopreds tbl["180"] := ["090"] tbl["181"] := ["140"] tbl["182"] := nopreds tbl["183"] := nopreds tbl["184"] := nopreds tbl["185"] := nopreds tbl["186"] := nopreds tbl["187"] := ["89"] tbl["188"] := nopreds tbl["189"] := nopreds tbl["190"] := ["095"] tbl["191"] := nopreds tbl["192"] := nopreds tbl["193"] := nopreds tbl["194"] := nopreds tbl["195"] := nopreds tbl["196"] := nopreds tbl["197"] := nopreds tbl["198"] := ["99"] tbl["199"] := nopreds tbl["200"] := nopreds tbl["201"] := ["150"] tbl["202"] := ["101"] tbl["203"] := nopreds tbl["204"] := nopreds tbl["205"] := nopreds tbl["206"] := nopreds tbl["207"] := nopreds tbl["208"] := nopreds tbl["209"] := nopreds tbl["210"] := nopreds tbl["211"] := nopreds tbl["212"] := nopreds tbl["213"] := nopreds tbl["214"] := nopreds tbl["215"] := nopreds tbl["216"] := nopreds tbl["217"] := nopreds tbl["218"] := nopreds tbl["219"] := nopreds tbl["220"] := nopreds tbl["221"] := ["160"] tbl["222"] := ["111"] tbl["223"] := nopreds tbl["224"] := nopreds tbl["225"] := nopreds tbl["226"] := nopreds tbl["227"] := nopreds tbl["228"] := nopreds tbl["229"] := nopreds tbl["230"] := nopreds tbl["231"] := nopreds tbl["232"] := nopreds tbl["233"] := nopreds tbl["234"] := nopreds tbl["235"] := nopreds tbl["236"] := nopreds tbl["237"] := nopreds tbl["238"] := nopreds tbl["239"] := nopreds tbl["240"] := nopreds tbl["241"] := ["170"] tbl["242"] := ["121"] tbl["243"] := nopreds tbl["244"] := nopreds tbl["245"] := nopreds tbl["246"] := nopreds tbl["247"] := nopreds tbl["248"] := nopreds tbl["249"] := nopreds tbl["250"] := nopreds tbl["251"] := nopreds tbl["252"] := nopreds tbl["253"] := nopreds tbl["254"] := nopreds tbl["255"] := nopreds tbl["256"] := nopreds tbl["257"] := nopreds tbl["258"] := nopreds tbl["259"] := nopreds tbl["260"] := nopreds tbl["261"] := ["180"] tbl["262"] := ["131"] tbl["263"] := nopreds tbl["264"] := nopreds tbl["265"] := nopreds tbl["266"] := nopreds tbl["267"] := nopreds tbl["268"] := nopreds tbl["269"] := nopreds tbl["270"] := nopreds tbl["271"] := nopreds tbl["272"] := nopreds tbl["273"] := nopreds tbl["274"] := nopreds tbl["275"] := nopreds tbl["276"] := nopreds tbl["277"] := nopreds tbl["278"] := nopreds tbl["279"] := nopreds tbl["280"] := nopreds tbl["281"] := ["190"] tbl["282"] := ["141"] tbl["283"] := nopreds tbl["284"] := nopreds tbl["285"] := nopreds tbl["286"] := nopreds tbl["287"] := nopreds tbl["288"] := nopreds tbl["289"] := nopreds tbl["290"] := nopreds tbl["291"] := nopreds tbl["292"] := nopreds tbl["293"] := nopreds tbl["294"] := nopreds tbl["295"] := nopreds tbl["296"] := nopreds tbl["297"] := nopreds tbl["298"] := nopreds tbl["299"] := nopreds tbl["300"] := nopreds tbl["301"] := nopreds tbl["302"] := ["151"] tbl["303"] := ["102"] tbl["304"] := nopreds tbl["305"] := nopreds tbl["306"] := nopreds tbl["307"] := nopreds tbl["308"] := nopreds tbl["309"] := nopreds tbl["310"] := nopreds tbl["311"] := nopreds tbl["312"] := nopreds tbl["313"] := nopreds tbl["314"] := nopreds tbl["315"] := nopreds tbl["316"] := nopreds tbl["317"] := nopreds tbl["318"] := nopreds tbl["319"] := nopreds tbl["320"] := nopreds tbl["321"] := nopreds tbl["322"] := ["161"] tbl["323"] := ["112"] tbl["324"] := nopreds tbl["325"] := nopreds tbl["326"] := nopreds tbl["327"] := nopreds tbl["328"] := nopreds tbl["329"] := nopreds tbl["330"] := nopreds tbl["331"] := nopreds tbl["332"] := nopreds tbl["333"] := nopreds tbl["334"] := nopreds tbl["335"] := nopreds tbl["336"] := nopreds tbl["337"] := nopreds tbl["338"] := nopreds tbl["339"] := nopreds tbl["340"] := nopreds tbl["341"] := nopreds tbl["342"] := ["171"] tbl["343"] := ["122"] tbl["344"] := nopreds tbl["345"] := nopreds tbl["346"] := nopreds tbl["347"] := nopreds tbl["348"] := nopreds tbl["349"] := nopreds tbl["350"] := nopreds tbl["351"] := nopreds tbl["352"] := nopreds tbl["353"] := nopreds tbl["354"] := nopreds tbl["355"] := nopreds tbl["356"] := nopreds tbl["357"] := nopreds tbl["358"] := nopreds tbl["359"] := nopreds tbl["360"] := nopreds tbl["361"] := nopreds tbl["362"] := ["181"] tbl["363"] := ["132"] tbl["364"] := nopreds tbl["365"] := nopreds tbl["366"] := nopreds tbl["367"] := nopreds tbl["368"] := nopreds tbl["369"] := nopreds tbl["370"] := nopreds tbl["371"] := nopreds tbl["372"] := nopreds tbl["373"] := nopreds tbl["374"] := nopreds tbl["375"] := nopreds tbl["376"] := nopreds tbl["377"] := nopreds tbl["378"] := nopreds tbl["379"] := nopreds tbl["380"] := nopreds tbl["381"] := nopreds tbl["382"] := ["191"] tbl["383"] := ["142"] tbl["384"] := nopreds tbl["385"] := nopreds tbl["386"] := nopreds tbl["387"] := nopreds tbl["388"] := nopreds tbl["389"] := nopreds tbl["390"] := nopreds tbl["391"] := nopreds tbl["392"] := nopreds tbl["393"] := nopreds tbl["394"] := nopreds tbl["395"] := nopreds tbl["396"] := nopreds tbl["397"] := nopreds tbl["398"] := nopreds tbl["399"] := nopreds tbl["400"] := nopreds tbl["401"] := nopreds tbl["402"] := nopreds tbl["403"] := ["152"] tbl["404"] := ["103"] tbl["405"] := nopreds tbl["406"] := nopreds tbl["407"] := nopreds tbl["408"] := nopreds tbl["409"] := nopreds tbl["410"] := nopreds tbl["411"] := nopreds tbl["412"] := nopreds tbl["413"] := nopreds tbl["414"] := nopreds tbl["415"] := nopreds tbl["416"] := nopreds tbl["417"] := nopreds tbl["418"] := nopreds tbl["419"] := nopreds tbl["420"] := nopreds tbl["421"] := nopreds tbl["422"] := nopreds tbl["423"] := ["162"] tbl["424"] := ["113"] tbl["425"] := nopreds tbl["426"] := nopreds tbl["427"] := nopreds tbl["428"] := nopreds tbl["429"] := nopreds tbl["430"] := nopreds tbl["431"] := nopreds tbl["432"] := nopreds tbl["433"] := nopreds tbl["434"] := nopreds tbl["435"] := nopreds tbl["436"] := nopreds tbl["437"] := nopreds tbl["438"] := nopreds tbl["439"] := nopreds tbl["440"] := nopreds tbl["441"] := nopreds tbl["442"] := nopreds tbl["443"] := ["172"] tbl["444"] := ["123"] tbl["445"] := nopreds tbl["446"] := nopreds tbl["447"] := nopreds tbl["448"] := nopreds tbl["449"] := nopreds tbl["450"] := nopreds tbl["451"] := nopreds tbl["452"] := nopreds tbl["453"] := nopreds tbl["454"] := nopreds tbl["455"] := nopreds tbl["456"] := nopreds tbl["457"] := nopreds tbl["458"] := nopreds tbl["459"] := nopreds tbl["460"] := nopreds tbl["461"] := nopreds tbl["462"] := nopreds tbl["463"] := ["182"] tbl["464"] := ["133"] tbl["465"] := nopreds tbl["466"] := nopreds tbl["467"] := nopreds tbl["468"] := nopreds tbl["469"] := nopreds tbl["470"] := nopreds tbl["471"] := nopreds tbl["472"] := nopreds tbl["473"] := nopreds tbl["474"] := nopreds tbl["475"] := nopreds tbl["476"] := nopreds tbl["477"] := nopreds tbl["478"] := nopreds tbl["479"] := nopreds tbl["480"] := nopreds tbl["481"] := nopreds tbl["482"] := nopreds tbl["483"] := ["192"] tbl["484"] := ["143"] tbl["485"] := nopreds tbl["486"] := nopreds tbl["487"] := nopreds tbl["488"] := nopreds tbl["489"] := nopreds tbl["490"] := nopreds tbl["491"] := nopreds tbl["492"] := nopreds tbl["493"] := nopreds tbl["494"] := nopreds tbl["495"] := nopreds tbl["496"] := nopreds tbl["497"] := nopreds tbl["498"] := nopreds tbl["499"] := nopreds tbl["500"] := nopreds tbl["501"] := nopreds tbl["502"] := nopreds tbl["503"] := nopreds tbl["504"] := ["153"] tbl["505"] := ["104"] tbl["506"] := nopreds tbl["507"] := nopreds tbl["508"] := nopreds tbl["509"] := nopreds tbl["510"] := nopreds tbl["511"] := nopreds tbl["512"] := nopreds tbl["513"] := nopreds tbl["514"] := nopreds tbl["515"] := nopreds tbl["516"] := nopreds tbl["517"] := nopreds tbl["518"] := nopreds tbl["519"] := nopreds tbl["520"] := nopreds tbl["521"] := nopreds tbl["522"] := nopreds tbl["523"] := nopreds tbl["524"] := ["163"] tbl["525"] := ["114"] tbl["526"] := nopreds tbl["527"] := nopreds tbl["528"] := nopreds tbl["529"] := nopreds tbl["530"] := nopreds tbl["531"] := nopreds tbl["532"] := nopreds tbl["533"] := nopreds tbl["534"] := nopreds tbl["535"] := nopreds tbl["536"] := nopreds tbl["537"] := nopreds tbl["538"] := nopreds tbl["539"] := nopreds tbl["540"] := nopreds tbl["541"] := nopreds tbl["542"] := nopreds tbl["543"] := nopreds tbl["544"] := ["173"] tbl["545"] := ["124"] tbl["546"] := nopreds tbl["547"] := nopreds tbl["548"] := nopreds tbl["549"] := nopreds tbl["550"] := nopreds tbl["551"] := nopreds tbl["552"] := nopreds tbl["553"] := nopreds tbl["554"] := nopreds tbl["555"] := nopreds tbl["556"] := nopreds tbl["557"] := nopreds tbl["558"] := nopreds tbl["559"] := nopreds tbl["560"] := nopreds tbl["561"] := nopreds tbl["562"] := nopreds tbl["563"] := nopreds tbl["564"] := ["183"] tbl["565"] := ["134"] tbl["566"] := nopreds tbl["567"] := nopreds tbl["568"] := nopreds tbl["569"] := nopreds tbl["570"] := nopreds tbl["571"] := nopreds tbl["572"] := nopreds tbl["573"] := nopreds tbl["574"] := nopreds tbl["575"] := nopreds tbl["576"] := nopreds tbl["577"] := nopreds tbl["578"] := nopreds tbl["579"] := nopreds tbl["580"] := nopreds tbl["581"] := nopreds tbl["582"] := nopreds tbl["583"] := nopreds tbl["584"] := ["193"] tbl["585"] := ["144"] tbl["586"] := nopreds tbl["587"] := nopreds tbl["588"] := nopreds tbl["589"] := nopreds tbl["590"] := nopreds tbl["591"] := nopreds tbl["592"] := nopreds tbl["593"] := nopreds tbl["594"] := nopreds tbl["595"] := nopreds tbl["596"] := nopreds tbl["597"] := nopreds tbl["598"] := nopreds tbl["599"] := nopreds tbl["600"] := nopreds tbl["601"] := nopreds tbl["602"] := nopreds tbl["603"] := nopreds tbl["604"] := nopreds tbl["605"] := ["154"] tbl["606"] := ["105"] tbl["607"] := nopreds tbl["608"] := nopreds tbl["609"] := nopreds tbl["610"] := nopreds tbl["611"] := nopreds tbl["612"] := nopreds tbl["613"] := nopreds tbl["614"] := nopreds tbl["615"] := nopreds tbl["616"] := nopreds tbl["617"] := nopreds tbl["618"] := nopreds tbl["619"] := nopreds tbl["620"] := nopreds tbl["621"] := nopreds tbl["622"] := nopreds tbl["623"] := nopreds tbl["624"] := nopreds tbl["625"] := ["164"] tbl["626"] := ["115"] tbl["627"] := nopreds tbl["628"] := nopreds tbl["629"] := nopreds tbl["630"] := nopreds tbl["631"] := nopreds tbl["632"] := nopreds tbl["633"] := nopreds tbl["634"] := nopreds tbl["635"] := nopreds tbl["636"] := nopreds tbl["637"] := nopreds tbl["638"] := nopreds tbl["639"] := nopreds tbl["640"] := nopreds tbl["641"] := nopreds tbl["642"] := nopreds tbl["643"] := nopreds tbl["644"] := nopreds tbl["645"] := ["174"] tbl["646"] := ["125"] tbl["647"] := nopreds tbl["648"] := nopreds tbl["649"] := nopreds tbl["650"] := nopreds tbl["651"] := nopreds tbl["652"] := nopreds tbl["653"] := nopreds tbl["654"] := nopreds tbl["655"] := nopreds tbl["656"] := nopreds tbl["657"] := nopreds tbl["658"] := nopreds tbl["659"] := nopreds tbl["660"] := nopreds tbl["661"] := nopreds tbl["662"] := nopreds tbl["663"] := nopreds tbl["664"] := nopreds tbl["665"] := ["184"] tbl["666"] := ["135"] tbl["667"] := nopreds tbl["668"] := nopreds tbl["669"] := nopreds tbl["670"] := nopreds tbl["671"] := nopreds tbl["672"] := nopreds tbl["673"] := nopreds tbl["674"] := nopreds tbl["675"] := nopreds tbl["676"] := nopreds tbl["677"] := nopreds tbl["678"] := nopreds tbl["679"] := nopreds tbl["680"] := nopreds tbl["681"] := nopreds tbl["682"] := nopreds tbl["683"] := nopreds tbl["684"] := nopreds tbl["685"] := ["194"] tbl["686"] := ["145"] tbl["687"] := nopreds tbl["688"] := nopreds tbl["689"] := nopreds tbl["690"] := nopreds tbl["691"] := nopreds tbl["692"] := nopreds tbl["693"] := nopreds tbl["694"] := nopreds tbl["695"] := nopreds tbl["696"] := nopreds tbl["697"] := nopreds tbl["698"] := nopreds tbl["699"] := nopreds tbl["700"] := nopreds tbl["701"] := nopreds tbl["702"] := nopreds tbl["703"] := nopreds tbl["704"] := nopreds tbl["705"] := nopreds tbl["706"] := ["155"] tbl["707"] := ["106"] tbl["708"] := nopreds tbl["709"] := nopreds tbl["710"] := nopreds tbl["711"] := nopreds tbl["712"] := nopreds tbl["713"] := nopreds tbl["714"] := nopreds tbl["715"] := nopreds tbl["716"] := nopreds tbl["717"] := nopreds tbl["718"] := nopreds tbl["719"] := nopreds tbl["720"] := nopreds tbl["721"] := nopreds tbl["722"] := nopreds tbl["723"] := nopreds tbl["724"] := nopreds tbl["725"] := nopreds tbl["726"] := ["165"] tbl["727"] := ["116"] tbl["728"] := nopreds tbl["729"] := nopreds tbl["730"] := nopreds tbl["731"] := nopreds tbl["732"] := nopreds tbl["733"] := nopreds tbl["734"] := nopreds tbl["735"] := nopreds tbl["736"] := nopreds tbl["737"] := nopreds tbl["738"] := nopreds tbl["739"] := nopreds tbl["740"] := nopreds tbl["741"] := nopreds tbl["742"] := nopreds tbl["743"] := nopreds tbl["744"] := nopreds tbl["745"] := nopreds tbl["746"] := ["175"] tbl["747"] := ["126"] tbl["748"] := nopreds tbl["749"] := nopreds tbl["750"] := nopreds tbl["751"] := nopreds tbl["752"] := nopreds tbl["753"] := nopreds tbl["754"] := nopreds tbl["755"] := nopreds tbl["756"] := nopreds tbl["757"] := nopreds tbl["758"] := nopreds tbl["759"] := nopreds tbl["760"] := nopreds tbl["761"] := nopreds tbl["762"] := nopreds tbl["763"] := nopreds tbl["764"] := nopreds tbl["765"] := nopreds tbl["766"] := ["185"] tbl["767"] := ["136"] tbl["768"] := nopreds tbl["769"] := nopreds tbl["770"] := nopreds tbl["771"] := nopreds tbl["772"] := nopreds tbl["773"] := nopreds tbl["774"] := nopreds tbl["775"] := nopreds tbl["776"] := nopreds tbl["777"] := nopreds tbl["778"] := nopreds tbl["779"] := nopreds tbl["780"] := nopreds tbl["781"] := nopreds tbl["782"] := nopreds tbl["783"] := nopreds tbl["784"] := nopreds tbl["785"] := nopreds tbl["786"] := ["195"] tbl["787"] := ["146"] tbl["788"] := nopreds tbl["789"] := nopreds tbl["790"] := nopreds tbl["791"] := nopreds tbl["792"] := nopreds tbl["793"] := nopreds tbl["794"] := nopreds tbl["795"] := nopreds tbl["796"] := nopreds tbl["797"] := nopreds tbl["798"] := nopreds tbl["799"] := nopreds tbl["800"] := nopreds tbl["801"] := nopreds tbl["802"] := nopreds tbl["803"] := nopreds tbl["804"] := nopreds tbl["805"] := nopreds tbl["806"] := nopreds tbl["807"] := ["156"] tbl["808"] := ["107"] tbl["809"] := nopreds tbl["810"] := nopreds tbl["811"] := nopreds tbl["812"] := nopreds tbl["813"] := nopreds tbl["814"] := nopreds tbl["815"] := nopreds tbl["816"] := nopreds tbl["817"] := nopreds tbl["818"] := nopreds tbl["819"] := nopreds tbl["820"] := nopreds tbl["821"] := nopreds tbl["822"] := nopreds tbl["823"] := nopreds tbl["824"] := nopreds tbl["825"] := nopreds tbl["826"] := nopreds tbl["827"] := ["166"] tbl["828"] := ["117"] tbl["829"] := nopreds tbl["830"] := nopreds tbl["831"] := nopreds tbl["832"] := nopreds tbl["833"] := nopreds tbl["834"] := nopreds tbl["835"] := nopreds tbl["836"] := nopreds tbl["837"] := nopreds tbl["838"] := nopreds tbl["839"] := nopreds tbl["840"] := nopreds tbl["841"] := nopreds tbl["842"] := nopreds tbl["843"] := nopreds tbl["844"] := nopreds tbl["845"] := nopreds tbl["846"] := nopreds tbl["847"] := ["176"] tbl["848"] := ["127"] tbl["849"] := nopreds tbl["850"] := nopreds tbl["851"] := nopreds tbl["852"] := nopreds tbl["853"] := nopreds tbl["854"] := nopreds tbl["855"] := nopreds tbl["856"] := nopreds tbl["857"] := nopreds tbl["858"] := nopreds tbl["859"] := nopreds tbl["860"] := nopreds tbl["861"] := nopreds tbl["862"] := nopreds tbl["863"] := nopreds tbl["864"] := nopreds tbl["865"] := nopreds tbl["866"] := nopreds tbl["867"] := ["186"] tbl["868"] := ["137"] tbl["869"] := nopreds tbl["870"] := nopreds tbl["871"] := nopreds tbl["872"] := nopreds tbl["873"] := nopreds tbl["874"] := nopreds tbl["875"] := nopreds tbl["876"] := nopreds tbl["877"] := nopreds tbl["878"] := nopreds tbl["879"] := nopreds tbl["880"] := nopreds tbl["881"] := nopreds tbl["882"] := nopreds tbl["883"] := nopreds tbl["884"] := nopreds tbl["885"] := nopreds tbl["886"] := nopreds tbl["887"] := ["196"] tbl["888"] := ["147"] tbl["889"] := nopreds tbl["890"] := nopreds tbl["891"] := nopreds tbl["892"] := nopreds tbl["893"] := nopreds tbl["894"] := nopreds tbl["895"] := nopreds tbl["896"] := nopreds tbl["897"] := nopreds tbl["898"] := nopreds tbl["899"] := nopreds tbl["900"] := nopreds tbl["901"] := nopreds tbl["902"] := nopreds tbl["903"] := nopreds tbl["904"] := nopreds tbl["905"] := nopreds tbl["906"] := nopreds tbl["907"] := nopreds tbl["908"] := ["157"] tbl["909"] := ["108"] tbl["910"] := nopreds tbl["911"] := nopreds tbl["912"] := nopreds tbl["913"] := nopreds tbl["914"] := nopreds tbl["915"] := nopreds tbl["916"] := nopreds tbl["917"] := nopreds tbl["918"] := nopreds tbl["919"] := nopreds tbl["920"] := nopreds tbl["921"] := nopreds tbl["922"] := nopreds tbl["923"] := nopreds tbl["924"] := nopreds tbl["925"] := nopreds tbl["926"] := nopreds tbl["927"] := nopreds tbl["928"] := ["167"] tbl["929"] := ["118"] tbl["930"] := nopreds tbl["931"] := nopreds tbl["932"] := nopreds tbl["933"] := nopreds tbl["934"] := nopreds tbl["935"] := nopreds tbl["936"] := nopreds tbl["937"] := nopreds tbl["938"] := nopreds tbl["939"] := nopreds tbl["940"] := nopreds tbl["941"] := nopreds tbl["942"] := nopreds tbl["943"] := nopreds tbl["944"] := nopreds tbl["945"] := nopreds tbl["946"] := nopreds tbl["947"] := nopreds tbl["948"] := ["177"] tbl["949"] := ["128"] tbl["950"] := nopreds tbl["951"] := nopreds tbl["952"] := nopreds tbl["953"] := nopreds tbl["954"] := nopreds tbl["955"] := nopreds tbl["956"] := nopreds tbl["957"] := nopreds tbl["958"] := nopreds tbl["959"] := nopreds tbl["960"] := nopreds tbl["961"] := nopreds tbl["962"] := nopreds tbl["963"] := nopreds tbl["964"] := nopreds tbl["965"] := nopreds tbl["966"] := nopreds tbl["967"] := nopreds tbl["968"] := ["187"] tbl["969"] := ["138"] tbl["970"] := nopreds tbl["971"] := nopreds tbl["972"] := nopreds tbl["973"] := nopreds tbl["974"] := nopreds tbl["975"] := nopreds tbl["976"] := nopreds tbl["977"] := nopreds tbl["978"] := nopreds tbl["979"] := nopreds tbl["980"] := nopreds tbl["981"] := nopreds tbl["982"] := nopreds tbl["983"] := nopreds tbl["984"] := nopreds tbl["985"] := nopreds tbl["986"] := nopreds tbl["987"] := nopreds tbl["988"] := ["197"] tbl["989"] := ["148"] tbl["990"] := nopreds tbl["991"] := nopreds tbl["992"] := nopreds tbl["993"] := nopreds tbl["994"] := nopreds tbl["995"] := nopreds tbl["996"] := nopreds tbl["997"] := nopreds tbl["998"] := nopreds tbl["999"] := nopreds return tbl end procedure vpred_all(i) #: all predecessors of versum number suspend eqvseeds(vpred(i)) end $define MinusLimit 500 procedure minus1(s) local result, digit, i if *s < MinusLimit then { if s <= 0 then fail else return string(s - 1) } if (s[1] == "-") | not(upto(s, '123456789')) then fail result := "" every digit := s[i := *s to 1 by -1] do { if (digit - 1) >= 0 then { result := s[1:i] || (digit - 1) || result if result[1] == "0" & *result > 1 then result := result[2:0] return result } else result := "9" || result } fail end