Advertisement
Earthcomputer

Untitled

Jun 12th, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 26.93 KB | None | 0 0
  1.     //// Matthew Magic Lattice Code ////
  2.  
  3.     final private static long[][] bvec = {
  4.             {0L, 11L, 277363943098L, 11718085204285L, 49720483695876L, 102626409374399L, 25707281917278L, 25979478236433L, 119857157322168L, 7793386925923L, 178846570520370L, 134446122677333L, 9515536787004L, 178633786306455L, 205245332352342L, 225423142277545L},
  5.             {0L, 11L, 277363943098L, 11718085204285L, 49720483695876L, 102626409374399L, 25707281917278L, 25979478236433L, 7793386925923L, 178846570520370L, 134446122677333L, 9515536787004L, 178633786306455L, 205245332352342L, 225423142277545L, 61979012111104L},
  6.             {0L, 11L, 277363943098L, 11718085204285L, 49720483695876L, 102626409374399L, 25707281917278L, 25979478236433L, 178846570520370L, 134446122677333L, 9515536787004L, 178633786306455L, 205245332352342L, 225423142277545L, 61979012111104L, 100991144656651L},
  7.             {0L, 11L, 277363943098L, 11718085204285L, 49720483695876L, 102626409374399L, 25707281917278L, 25979478236433L, 134446122677333L, 9515536787004L, 178633786306455L, 205245332352342L, 225423142277545L, 61979012111104L, 100991144656651L, 39819082660282L}
  8.     };
  9.     final private static long[][][] mm1 = {
  10.             {
  11.         {1, -2, 2, 3, -1, 5, 2, -5, 2, -1, -1, 3, 0, -3, 0, -3},
  12.         {3, -6, 4, 5, 6, 3, 2, 4, 2, 2, -2, 1, 3, 0, -2, -6},
  13.         {-1, -6, 1, 3, 1, 1, 1, 3, -6, 0, -4, -2, 0, 0, -2, -2},
  14.         {4, 3, 0, 0, -2, 1, -6, 1, -2, -1, -4, -2, 0, 3, -2, 0},
  15.         {-7, 6, -2, -3, -4, -3, -6, -1, 0, -4, 3, 0, -3, 3, 1, 2},
  16.         {4, -7, 0, 7, 6, -4, -5, 3, -7, -3, 0, 0, -3, 3, -3, -2},
  17.         {0, 2, 6, -4, -1, 3, 1, 5, 0, 0, 3, -2, -3, 0, -2, 2},
  18.         {1, 1, -6, 2, 1, 2, 0, -1, 3, 1, -2, 4, 0, 0, -2, -1},
  19.         {-3, 3, 2, 1, 0, 3, 1, 0, -1, -3, 1, 3, 0, -1, 4, 3},
  20.         {0, 2, 2, 2, -3, 0, 1, 0, 2, 4, 2, 0, 1, -1, -1, 1},
  21.         {5, -8, 2, 4, 2, 3, 1, 2, 0, 2, -1, 4, 1, 4, -2, 0},
  22.         {-6, 5, -3, -1, 4, -6, -4, -4, -2, -1, -4, -3, -4, 1, -2, 1},
  23.         {1, -5, 3, -1, 3, -3, -2, 3, -1, -4, -5, -3, -1, -1, -5, -1},
  24.         {-3, 0, -1, 3, 2, 4, 2, 0, 1, -2, -1, -2, 1, 1, -1, 2},
  25.         {-5, -1, -4, -1, 2, -1, -4, -4, 0, -1, -2, 0, -1, -5, 1, 0},
  26.         {-6, 1, 2, -4, 0, 0, 0, -2, 1, -1, 1, 3, 5, 0, -2, 0},
  27.             },
  28.             {
  29.         {1, -2, -2, 0, -3, 0, 3, 0, 0, 1, -3, 2, 5, 2, 0, 0},
  30.         {5, 2, -2, 3, 3, 1, 1, -2, -1, -2, 1, -4, 0, -3, -3, 0},
  31.         {2, 5, 2, -1, 1, 4, -4, 1, 0, -5, -6, 0, 4, 5, 0, 3},
  32.         {2, 2, 4, 5, -3, 2, 4, -1, -2, 2, 3, 0, -4, -1, 0, 0},
  33.         {-4, -3, 4, 3, -2, 4, 4, 6, -2, -3, 0, 2, 1, 2, 3, 0},
  34.         {-3, 0, 2, -3, 4, 5, 1, 3, 2, 2, -1, -3, -1, -2, 3, -3},
  35.         {-6, 6, 6, 4, 2, 8, -3, 2, 3, -6, -3, 2, 1, 2, 3, -3},
  36.         {4, -6, -5, -6, 4, -2, -2, -4, 5, 1, 2, -4, -2, 1, 0, -3},
  37.         {4, -1, -1, -3, 0, -1, -3, -1, -3, 2, 3, -1, 3, 1, -1, 0},
  38.         {5, -1, 1, 0, 0, -6, 1, 0, 3, 0, -1, 4, 3, -5, -1, 1},
  39.         {1, 3, -2, 1, 2, 2, -5, 0, 1, -4, -4, -1, 3, 1, 4, 1},
  40.         {-1, 1, 6, 4, -2, 1, 1, 0, -2, -4, -4, 0, 0, 1, 1, -4},
  41.         {-2, -1, -1, 2, 0, 4, -1, 1, 0, -1, -3, 2, -2, -1, -1, -1},
  42.         {-2, 2, 3, 1, -6, 1, 1, -1, 0, -1, 2, -2, -2, -2, 1, 1},
  43.         {4, 0, -3, 2, -4, -4, 3, 3, -3, 5, 3, -1, -3, -2, -5, -1},
  44.         {-14, -3, 4, 8, -4, 1, -1, 5, 3, 1, -5, 4, 2, 1, 0, 5},
  45.             },
  46.             {
  47.         {-4, -1, 1, -3, -8, 1, -1, -2, 1, 3, -2, -5, -4, 5, -1, 0},
  48.         {4, 3, 2, 0, -2, -1, -3, 2, 1, 2, 0, -2, 3, 2, 3, 0},
  49.         {-6, 2, 2, 2, -2, -2, -2, 1, -1, 3, 1, 0, 1, -1, 0, -3},
  50.         {2, -2, -1, 1, 2, 0, -2, -1, -1, 4, -1, 1, 2, -1, -2, 0},
  51.         {-1, 0, -1, -4, -3, -2, 1, 4, 3, -1, -3, -4, -1, 1, 1, 0},
  52.         {5, 0, 2, -2, 2, 1, -3, 6, -2, -1, 1, -3, -4, 3, 3, 3},
  53.         {6, 2, 0, -6, -4, -3, -2, 0, 4, 2, -2, -2, -5, 1, 4, 3},
  54.         {5, -9, 1, -2, 0, 3, -1, 0, 3, -4, 6, -2, 1, 0, -2, 3},
  55.         {-3, -2, 5, 1, 0, 5, 0, -4, 1, 0, 0, 2, 2, -2, 0, -1},
  56.         {1, -2, -5, -2, -3, -3, 5, 1, 0, 2, -2, 2, -4, 3, 4, -1},
  57.         {-6, 3, 3, -1, -3, 2, -2, 0, -3, 2, -3, 0, 1, 0, 1, 4},
  58.         {-1, 2, 0, -8, -4, -5, 0, -1, 0, -1, -2, -1, -2, 2, 2, 1},
  59.         {-6, 6, 2, 2, -4, -6, 6, 1, -7, 3, -6, 2, -3, -2, 0, -1},
  60.         {0, -4, 2, 9, 1, 2, -3, 4, -2, -3, -3, 4, -2, 4, -1, 1},
  61.         {-1, 1, -5, 2, -1, 0, -1, 1, -5, 0, 1, 3, 1, -4, -5, -5},
  62.         {1, -3, -4, -1, 1, -4, 4, 0, -4, -3, -1, -3, -2, -3, 1, 0},
  63.             },
  64.             {
  65.         {0, 4, -4, 3, 4, 1, -1, 2, 3, 0, -6, 3, -2, -2, 0, -1},
  66.         {-1, 3, -2, -3, -4, 4, 1, 1, -5, -1, -2, -2, 0, 2, -5, 3},
  67.         {2, -3, -2, 1, -3, 0, -1, 0, -5, -3, -3, -3, 1, 3, -2, 0},
  68.         {-1, 1, 2, 5, 3, 2, 1, 0, 0, -2, 3, 0, -1, 0, 1, -2},
  69.         {9, -8, 7, 0, -8, 10, 3, -4, -5, -3, 0, -8, -3, 5, 1, 1},
  70.         {2, -1, 5, -2, 2, 0, 3, -2, 3, -1, 1, 0, 1, -5, -1, 3},
  71.         {-4, -7, -1, -1, -4, -4, -4, 3, 2, 5, -2, -3, -2, 5, -3, 4},
  72.         {-14, 2, -6, -5, 1, -7, -5, 4, -1, 5, -6, 1, 6, -2, -1, -2},
  73.         {-4, 2, -3, 4, 0, -5, 1, 1, 3, 5, -1, 3, -2, 2, 2, 4},
  74.         {1, -1, -3, -1, -3, -2, -2, 6, -4, 2, 0, -2, -3, 2, -3, 1},
  75.         {-4, 1, 2, -1, 1, -3, -5, 4, 1, 2, -2, 1, -2, 2, 0, 2},
  76.         {6, -9, 2, 1, -12, 1, -5, 0, -4, -3, 2, -4, -6, 3, -2, 0},
  77.         {-2, -1, -1, -1, 2, -1, 0, -2, 3, -1, 4, -3, -3, -2, 2, -1},
  78.         {3, -3, 1, -4, -3, 1, 1, -4, -7, -1, -2, 0, 1, 0, -4, -5},
  79.         {4, -2, 1, 1, 3, 3, 3, -1, 0, -2, 2, 3, -1, -1, 4, 1},
  80.         {3, 2, 2, 3, 5, 4, -2, -4, 0, 2, 0, 2, 0, -4, 3, 0},
  81.             }
  82.     };
  83.     final private static long[][][] magicLattice = {
  84.             {
  85.         {2831853573499L, -10115395295393L, -17086483407501L, 10629433564151L, -19236361448917L, 8711702814287L, -151938047581L, 1096604648551L, -1933252488933L, -6998011311489L, -5383844392429L, -6014911986665L, 2176674572235L, -4041906629777L, -6603768577981L, -2749316755833L},
  86.         {152438453387L, 4440185717039L, -3708563948797L, 10241783599687L, -8900026756549L, 5096499430687L, 4046275921971L, 13251388968887L, 13411167903275L, 5225729063503L, -22083535893085L, 9419693375591L, -5679693826597L, -3862714355649L, -15375382846253L, 4950381330391L},
  87.         {10599345064920L, 8673892604664L, -5485592720488L, 3710436392888L, 909197209944L, -3833056636296L, 2832480333080L, -21543817608392L, 12978157283544L, 12056994690040L, 9756334321816L, 11367453262008L, 7029750177368L, -9576125105288L, -4137308200424L, 1965847204920L},
  88.         {4206181801067L, 5580565642127L, 1799822939619L, -1440913046617L, 7312395098139L, 9197130335615L, -14831120076525L, 1857446410007L, 12147848227339L, 30842065471663L, -5435826426749L, -753533475385L, 5484405219259L, 11971535357087L, -5282466197069L, -10379290027209L},
  89.         {-8787378980908L, 10814071749956L, -18670199329292L, -370207012636L, -19325718568684L, 9812025789828L, 11375293176116L, -2913157876956L, 3591445074260L, -17028411778876L, 216803648372L, 13870425329764L, -11716035734892L, 7230627438852L, 8766341473972L, 7051114738340L},
  90.         {8669877516286L, 2043232520998L, 4705862214446L, 14567393070742L, -3130042680866L, -798608992378L, 20831185086478L, 1439755444726L, -6750464272834L, -15455097410458L, 3503040564078L, -5384481099306L, -20495114437602L, 16358430821574L, 14718675948622L, 2571433163062L},
  91.         {5687891873177L, -10411987271643L, 10314594504129L, -21930428595923L, -9322608005591L, -5050625409675L, -3835722381103L, 9570214987517L, 1480779465593L, -8469758103419L, -9068142549343L, 6702126110861L, 5509071741449L, 1920465638357L, -30428946640975L, -1176968203171L},
  92.         {-25037905414071L, 14196308577557L, 11831485165553L, -3130108006499L, 11205689562073L, -4775764186779L, 3811396935169L, 19065847442541L, 15767654778921L, 6577339600757L, -7791947992367L, -13462063650563L, 11715121906105L, -7747933376059L, -284947386655L, -9064099423283L},
  93.         {-1773338939625L, 15680768161483L, -22040689691025L, -7539413227709L, 18477492709767L, -16064533333893L, -8514032382369L, -1380856612749L, -3928726957257L, 8121231579243L, 12041746646927L, -2572080795165L, 19820824670119L, 8652111795227L, 4034868711807L, -16118648664813L},
  94.         {-10837773618907L, 7343425546945L, 9305338403373L, 3559538316073L, -6833337385355L, -8972230347311L, 9582614425597L, -4196012016455L, -8183154310779L, 16286018347937L, 17345969017229L, 14043608606473L, -21931750132523L, -12596515857231L, 16087017504093L, -2280981254503L},
  95.         {2831237184133L, -4965513549663L, -14017921682803L, -8990499343351L, -865471169067L, 24867648205233L, 13870917709405L, -4650287395943L, -19667775308059L, -295636466303L, -13200104636947L, -14292738454551L, -18569060145099L, 12380771761297L, 4072281640893L, 11592612381049L},
  96.         {995660657789L, -2425970792647L, 4177734936901L, -6153496326047L, 1881434070861L, 1498321781193L, 1064297781397L, 25310978545009L, 25037714649565L, 2991135852825L, 10554555454885L, 3392330904897L, 5235275371181L, -28529274920535L, -5498210293003L, 9780009117777L},
  97.         {-14527819893697L, 1021291354323L, -5722296785961L, 14562019093643L, -13745162594001L, 5270097179395L, -18948656502201L, -7837652612549L, 853682330463L, 6344526758259L, -12362894577673L, -15839556364757L, -919603998129L, 12602126714275L, 575341533287L, 25170738015707L},
  98.         {-25881596923L, 5671501773857L, 174616231949L, 1617807209353L, 16481616840533L, -9110575039183L, -6574052142115L, -11685315345639L, -11759298297755L, -19771361875711L, 22080688872301L, 13122330319721L, -11705946914379L, 7399991515153L, -20469820095171L, -803860117255L},
  99.         {-10072677432798L, 16482918216826L, -2232669965326L, 85039401482L, 9019712504386L, -16728013618662L, -16725783477998L, -23533907042134L, 17404251291618L, -16479768330438L, 9202133632946L, -873441971510L, -7878392407038L, -10050795620134L, 8037290709202L, -21751489538710L},
  100.         {-16301400604061L, -24206168181209L, -12976412845925L, 1759693061119L, -15941880404589L, 739562328471L, 470922078027L, -3974957851409L, 16936101366019L, 19219000444999L, 21823166484539L, 485572340511L, 12232634070579L, 15773390382519L, 12748043909355L, -293654684145L}},
  101.             {
  102.         {-521496922366L, -3213975455782L, 13849110701010L, 22431818427498L, 7741890733346L, 1565183957882L, -2972165337358L, 12879816280330L, 7203813750426L, 14353232485266L, 11207954442538L, -967100611870L, 6398216046138L, -3160306105678L, 8279160639946L, -3744146796798L},
  103.         {4343999562922L, -4686732871582L, 453081664954L, -4870527880142L, -16311290665654L, 734581202050L, 14574899064666L, -17450111842990L, -17055058055646L, -5601409191814L, 1742556545010L, -8654189550070L, -18298994151870L, 135297695258L, 10092312628498L, -9376204899158L},
  104.         {-14329805852336L, -2679415120112L, 14555581012432L, 13377919458704L, -387649964464L, 10336334692368L, -3615203383600L, 4198213969552L, 15344420392208L, 12223740374992L, -16699691500656L, 15434605362256L, -7856368398832L, 179192274128L, -8771614268272L, 7699698086224L},
  105.         {2201602154318L, 12220245551158L, -11447061273858L, 20263660919334L, 1008066020910L, -8668268743274L, 7134977266910L, 7300236793478L, 3495716337526L, -1289965952706L, 19798123567974L, 4519840681582L, -7111380666154L, -14365522544866L, 7203205934022L, 13134114539342L},
  106.         {-13681752073506L, 10646247826566L, -2827477405426L, 2805691840246L, -547950613826L, 4757075125990L, -3170814266386L, -7115528687530L, -6405026170426L, -2132339131058L, -5365622247882L, -983934766850L, -10717307285466L, -32505704561618L, -12904253695082L, 868198925022L},
  107.         {12876059317353L, 7623798163125L, 6505685154065L, 13126480024125L, 4182352417273L, 8398521343237L, 6000065009953L, 3297201854733L, 15386968061205L, -1932785862671L, -6138014574691L, -15010709218343L, 28329966178661L, 9436209751553L, -7807856864147L, -1463165542295L},
  108.         {18980815724173L, 9650587168777L, -401506612779L, -1372043096655L, 5605545712221L, 2875641055129L, -4669136047579L, -8179826468927L, -31442740819991L, -5123474983883L, -15920177702767L, -4376265671747L, -15952582656647L, -3976429641083L, -7406043402079L, -8911810192755L},
  109.         {-13398172629085L, -5687891873177L, 10411987271643L, -10314594504129L, 21930428595923L, 9322608005591L, 5050625409675L, 3835722381103L, -1480779465593L, 8469758103419L, 9068142549343L, -6702126110861L, -5509071741449L, -1920465638357L, 30428946640975L, 1176968203171L},
  110.         {9665538174075L, -382738271649L, 8883597151347L, 8413896744695L, -1248608610005L, 699712788815L, 21895482867875L, 26750733989735L, -12463961557633L, 14057596018963L, -1992150194409L, -15259839066421L, -12170844098961L, 9220465655619L, 12351442280839L, 7848465584251L},
  111.         {10860538015122L, -12435537980630L, -984468101918L, 26749811064890L, -20493366283086L, 20208598309834L, -3380324396798L, -1616244504102L, 13992809854954L, -2067847525726L, 6182065525498L, -1960210370446L, -3971149378422L, -14911243185470L, 5242866485402L, 10563478668690L},
  112.         {-5046239741171L, 6104228483721L, -13591460529579L, -917470596047L, 13891980869341L, -14081772170727L, 22441602575013L, 4079944410689L, 15523688831593L, -676902087499L, -6518409122031L, -20128048918467L, -14628509452295L, 5334909733637L, 1471539080993L, -2743011707123L},
  113.         {1803909671963L, -19651344463489L, -6983409720045L, 6125065526039L, 93494833867L, -15450332020113L, 10371203105603L, -10935787186809L, -957131749217L, 10753323894195L, -7435264835785L, -12964984761237L, 22040254878607L, -13984518451741L, -8905975686233L, -11030743920613L},
  114.         {24992561962428L, 17085695430924L, -8651283330532L, -11748398336532L, -768907035268L, 4498602530252L, 12869008461788L, -5815453488980L, 23231284853644L, 4024871428764L, -2586184850324L, -1778583057924L, -16173649893300L, 2960997363804L, -4341161181396L, 5716299050428L},
  115.         {4733635633228L, -11954451675044L, 13161812440876L, 12052903658940L, 3113296713996L, -13912656694756L, 7502102822380L, 14307100435836L, -8587924629284L, -16864513114708L, -3697198478788L, 551936689036L, -23064877151588L, -18859258123156L, 8278556619260L, 2209319661644L},
  116.         {367832409264L, -19494354895120L, -16186925716432L, 17921306374256L, 6861003997104L, 5952798309872L, -10680935678160L, -3171322804368L, -7002566635280L, -388462766544L, 39989853229680L, 289414019504L, -10822154260496L, -2916503664336L, -8209561040528L, -5939309878096L},
  117.         {-12643338056095L, 5488882926925L, 19354938060745L, 12494980509333L, 6853510460273L, -1398061486819L, -22786650160295L, -4702938586395L, -7545941854035L, 2761796177833L, -43917721355L, -19045027527087L, -403913263491L, 3867124302137L, -15725153502395L, 7570606439009L}},
  118.             {
  119.         {1643255379276L, 19570826148188L, -21324610546644L, 4569190817468L, -4721277288948L, 2755955307292L, 6962378140396L, 4499681087100L, 6130564283052L, -3038775442628L, -12922517075828L, -2394496423012L, 9937080334700L, -67951265028L, 7889298015564L, -1082429945508L},
  120.         {521496922366L, 3213975455782L, -13849110701010L, -22431818427498L, -7741890733346L, -1565183957882L, 2972165337358L, -12879816280330L, -14353232485266L, -11207954442538L, 967100611870L, -6398216046138L, 3160306105678L, -8279160639946L, 3744146796798L, -12092195008474L},
  121.         {-1079843697408L, 4136605141248L, 3971561428224L, 6737348325632L, 2012547423488L, 12989408008448L, -3144764463872L, 10079260573952L, 21773762721024L, -11628944568064L, -18409458369280L, 11115100289280L, 21142296773888L, 1008003440896L, -8988963320576L, -9499932014336L},
  122.         {4906592301475L, 9260951098471L, 6866212190683L, -14080773872577L, -11317885826861L, -16548946324521L, 9978101849227L, -1107030226641L, -13590608410245L, -4657073779873L, 1063489352051L, -25158708895753L, 789453358635L, 11588512416335L, -7098054183517L, 11780913268839L},
  123.         {-6574338976808L, -21382792232200L, 1836646192024L, 19586601232312L, 1381047908696L, 15660566051448L, -12941347293928L, -18707454596296L, -1159147194216L, -6934362527560L, -12315361515944L, 7080781980536L, -7591582668264L, -4561082008520L, -16906259958824L, -466160033032L},
  124.         {7209910343600L, 200946169328L, -22023180675280L, -10794104488080L, 6366626374320L, 12649027511536L, -3109158397392L, -8005625117072L, 19548265701680L, 8208903504240L, 12168636808368L, -19344907176208L, -7264665746384L, -8121816733584L, 14277518776240L, -5918122019344L},
  125.         {372078372775L, 1803909671963L, -19651344463489L, -6983409720045L, 6125065526039L, 93494833867L, -15450332020113L, 10371203105603L, -957131749217L, 10753323894195L, -7435264835785L, -12964984761237L, 22040254878607L, -13984518451741L, -8905975686233L, -11030743920613L},
  126.         {-13399997093885L, -3076204299449L, 7850347546427L, 2469046933023L, 29837649151283L, 15161550866615L, -4870080520213L, 11623080737039L, -3970181854501L, 8612704936255L, 4695963566547L, -9115559012137L, 8592894492043L, -1143046384081L, 7496488381443L, -16405378289849L},
  127.         {-6689495120447L, -13466597664467L, 7733150017065L, -5486661413515L, 18613258158289L, -16837727478019L, 15479224434617L, -419736676411L, -6807466370551L, -3479633679403L, -7205531842639L, -12234013029283L, -4602170601063L, 1539490346021L, -10632309722687L, -14149437418195L},
  128.         {3820678175756L, -5289020753636L, 11740552640748L, 30344931984508L, -662179376948L, 8138708020956L, 1682027797420L, 3217062793276L, -3688116664468L, 12495073374460L, 1776799515468L, -15507265376420L, 7488351719980L, -13200519756612L, -6800831517684L, -11617565488868L},
  129.         {-917818347740L, -3159497856428L, 21245139615172L, -21429610535820L, -25325167133340L, 4284849617812L, -2510175889916L, 18916964726708L, -19238688831164L, 6869870922228L, 767673742564L, -6104506376940L, 845424761220L, -13033379367628L, -1240860221660L, -9229119710636L},
  130.         {-18980815724173L, -9650587168777L, 401506612779L, 1372043096655L, -5605545712221L, -2875641055129L, 4669136047579L, 8179826468927L, 5123474983883L, 15920177702767L, 4376265671747L, 15952582656647L, 3976429641083L, 7406043402079L, 8911810192755L, -23366437829641L},
  131.         {-7981186978612L, 30687272934108L, -9945966471252L, 9376866507836L, 9262626893196L, -13662101050212L, -22502067280276L, 6971844994044L, -1562998469076L, 3761698869436L, 11087900280844L, 9314848978204L, -1789535763220L, -2644033118084L, -1425163649844L, -147882480932L},
  132.         {15007554734528L, 8710904522432L, -14038954311744L, 2485097194688L, -11851155446336L, 4878431310528L, -29402165560384L, -6142850273088L, -14564620417088L, 6845332327616L, -10826756133440L, 20311448664768L, -2514448677952L, 4167241701568L, -11695497606720L, -15103858071872L},
  133.         {-9661801468646L, 16511957258258L, 17800866874282L, -15841713321118L, -8890417879878L, 2552975621938L, 6908785792074L, -11785151176830L, 18512580188266L, 21255225188642L, 14080716973946L, -4239493797134L, -19016952515318L, 1817696227650L, -5444510489318L, 24592435963922L},
  134.         {-7444456069658L, -10701939685650L, -6399082264746L, -2043714608226L, -9495268696506L, -13810544506930L, 9975037617846L, 17198720204670L, -32817215974762L, -2482408821282L, 33285189614470L, -12187633009650L, 4474691823094L, 82834075070L, -14065439494682L, -3226525782290L}},
  135.             {
  136.         {-1121758456910L, -16356850692406L, 7475499845634L, -27001009244966L, -3020613444398L, -4321139265174L, -3990212803038L, -17379497367430L, -8169178999910L, 13889617687698L, -4003719623126L, -6776774229022L, -8211209374918L, -4145151218766L, -11009765062966L, 5950543536130L},
  137.         {-4001012083183L, 4511124368189L, -1986098219271L, -13420918137339L, 1865429173793L, -7163637300723L, -25046157881975L, -9473221273259L, 7670123885157L, 1077129605889L, 13027480493421L, -4638879107735L, 1858847970229L, -5743417884143L, -28183377336515L, 1006368948985L},
  138.         {-4906592301475L, -9260951098471L, -6866212190683L, 14080773872577L, 11317885826861L, 16548946324521L, -9978101849227L, 1107030226641L, 4657073779873L, -1063489352051L, 25158708895753L, -789453358635L, -11588512416335L, 7098054183517L, -11780913268839L, -4368265420251L},
  139.         {3820678175756L, -5289020753636L, 11740552640748L, 30344931984508L, -662179376948L, 8138708020956L, 1682027797420L, 3217062793276L, 12495073374460L, 1776799515468L, -15507265376420L, 7488351719980L, -13200519756612L, -6800831517684L, -11617565488868L, 8246677915884L},
  140.         {-372078372775L, -1803909671963L, 19651344463489L, 6983409720045L, -6125065526039L, -93494833867L, 15450332020113L, -10371203105603L, -10753323894195L, 7435264835785L, 12964984761237L, -22040254878607L, 13984518451741L, 8905975686233L, 11030743920613L, 9524972397185L},
  141.         {8860393724201L, 20123306511477L, -26128685028399L, 10785320136189L, 4551980524217L, -12859306574139L, 16639472695265L, 6475884310733L, -19420804695203L, -8131546295143L, -15060892419291L, 3531909278913L, -8934157650899L, -8521988414167L, 14873381693557L, 7451493865425L},
  142.         {6688413421234L, -3013029286454L, -8174069974270L, 11637713939418L, 14108517107666L, 14214211469418L, -6081323734750L, 4874191163258L, 19416857946778L, 11201536196498L, -12946691130070L, -10424971852062L, 157343906362L, 10533371979442L, 6174072989130L, -21757209619710L},
  143.         {6629767353040L, -10312303615344L, -13666801068208L, 10665016167696L, 7428162842576L, 5614042872720L, -4672200278960L, 10125923962384L, -13745512744176L, 27845434590672L, -2981506770544L, -291191176624L, -18911721743344L, -15879195503920L, 8358998778512L, -14649773320368L},
  144.         {12840568619630L, -6052842054442L, -18168816776418L, -12012464508986L, -2845217195186L, -6360842824650L, 14095382093566L, -9969181956570L, -15512379679482L, -18142316970098L, -11348260904074L, 682565934398L, -4431276562586L, -12840242648466L, -13162113162026L, -12558355041506L},
  145.         {-4553767035648L, -8897160636160L, -26425748544256L, -3205932072704L, 10034338475264L, -5841875425024L, 11237072205056L, 2150404575488L, 7747051954432L, 21335873260800L, -16058720515840L, -9693407161088L, -9581979717376L, 6778042539264L, -13328748209920L, 18190621025536L},
  146.         {-24107240372569L, 7617695719195L, -12704613957505L, 7243836674067L, -15887076644329L, -11827669035573L, 7222146541935L, -8069408367037L, -10787638062925L, 4102264794679L, -12236191819925L, 3183949781647L, 1651432081635L, -7030102918489L, 3891615253275L, 5450695365759L},
  147.         {1134794542989L, 11239639993609L, -19199373319467L, 3180994589361L, -17311705539747L, -7789118294887L, 7713882610469L, -1731981194047L, 795477581201L, -18216893588291L, 3546958285433L, 13660546427781L, -20091201174111L, 12491306519437L, 30443829451017L, -4999173275947L},
  148.         {-17640330418058L, -8618763731394L, 9005956871270L, -6963704499346L, -5675554080298L, -4955959516130L, 5543957189830L, 3355023440974L, -18660504742994L, -7775348329194L, -21368584987042L, -5338679057914L, -28837012758386L, -20717028872074L, -7901417314754L, 4105824943206L},
  149.         {-9927791033416L, 480257025368L, 6199022941816L, -8743175241448L, -2958083733704L, -31883977907496L, 13597281183224L, -21996142249320L, -5767356107240L, -16910030989256L, 17305410510808L, -17620758159624L, -2708344406120L, 5021554598840L, -858241383080L, -10696236984712L},
  150.         {-5613352104623L, -15691871178371L, 3781824143417L, -19465714094523L, 19250412925281L, -9235984536499L, -27066903295287L, 15534275505557L, 12504980404901L, 2743352112705L, 11334993084333L, 1454516718249L, 7563113209845L, -13738588980911L, 13761446522237L, -1035029369799L},
  151.         {-10741645166054L, 20648562399506L, 21772428302506L, -9104364995486L, -6877870456390L, 15542383630386L, 3764021328202L, -1705890602878L, 9626280620578L, -4328741395334L, 6875606492146L, 2125344258570L, 2825699668546L, -14433473809894L, 15092503949586L, 12051684593834L}}
  152.     };
  153.     static private long[] items = new long[16];
  154.     static private final int numberOfCarts = 32;
  155.     static private final int bitsPerItem = 5;
  156.  
  157.     public static long crackSeed(ArrayList<Integer> data, int numFails) {
  158.         for (int j = 0; j < data.size(); j++) {
  159.             items[j] = data.get(j);
  160.         }
  161.         long[] penultimateMaxVector = new long[items.length];
  162.         long[] penultimateMinVector = new long[items.length];
  163.         for (int j = 0; j < items.length; j++) {
  164.             long[] maxes = new long[items.length];
  165.             long[] mins = new long[items.length];
  166.             for (int k = 0; k < items.length; k++) {
  167.                 if (mm1[numFails][k][j] < 0) {
  168.                     mins[k] = (items[k] + 1) << (48 - bitsPerItem);
  169.                     maxes[k] = (items[k]) << (48 - bitsPerItem);
  170.                 } else {
  171.                     maxes[k] = (items[k] + 1) << (48 - bitsPerItem);
  172.                     mins[k] = (items[k]) << (48 - bitsPerItem);
  173.                 }
  174.                 mins[k] = (mins[k] - bvec[numFails][k]);
  175.                 maxes[k] = (maxes[k] - bvec[numFails][k]);
  176.             }
  177.             BigInteger maxVal = dotBig(maxes, mm1[numFails], j);
  178.             BigInteger minVal = dotBig(mins, mm1[numFails], j);
  179.             maxVal = maxVal.shiftRight(48);
  180.             minVal = minVal.shiftRight(48);
  181.             minVal = minVal.add(BigInteger.ONE);
  182.             penultimateMaxVector[j] = maxVal.longValue();
  183.             penultimateMinVector[j] = minVal.longValue();
  184.  
  185.         }
  186.         try {
  187.             return dumbIterate(penultimateMinVector, penultimateMaxVector, numFails)[items.length - 1];
  188.         } catch (NullPointerException e) {
  189.         }
  190.         return Long.MAX_VALUE;
  191.     }
  192.  
  193.     private static long[] dumbIterate(long[] mins, long[] maxes, int numFails) {
  194.         long[] temp = new long[mins.length];
  195.         for (int i = 0; i < mins.length; i++) {
  196.             temp[i] = mins[i];
  197.         }
  198.         while (temp != null) {
  199.             if (isDesiredSeed(addVectors(matmult(temp, magicLattice[numFails]), bvec[numFails]), items)) {
  200.                 return (addVectors(matmult(temp, magicLattice[numFails]), bvec[numFails]));
  201.             }
  202.             temp = getNextPoint(temp, mins, maxes);
  203.         }
  204.         return null;
  205.     }
  206.  
  207.     private static long[] getNextPoint(long[] components, long[] mins, long[] maxes) {
  208.         for (int i = 0; i < components.length; i++) {
  209.             components[i] += 1;
  210.             if (components[i] > maxes[i]) {
  211.                 components[i] = mins[i];
  212.             } else {
  213.                 return components;
  214.             }
  215.         }
  216.  
  217.         return null;
  218.     }
  219.  
  220.     private static boolean isDesiredSeed(long[] seedVec, long[] items) {
  221.         for (int i = 0; i < seedVec.length; i++) {
  222.             if (((seedVec[i] >> (48 - bitsPerItem)) % numberOfCarts) != items[i]) {
  223.                 return false;
  224.             }
  225.         }
  226.         return true;
  227.     }
  228.  
  229.     private static BigInteger toBigInt48(long n) {
  230.         if ((n & 0x800000000000L) != 0)
  231.             return BigInteger.valueOf(n | 0xffff000000000000L);
  232.         else
  233.             return BigInteger.valueOf(n & 0xffffffffffffL);
  234.     }
  235.  
  236.     private static BigInteger dotBig(long[] v, long[][] mat, int col) {
  237.         BigInteger result = BigInteger.ZERO;
  238.         for (int i = 0; i < v.length; i++) {
  239.             result = result.add(BigInteger.valueOf(v[i]).multiply(toBigInt48(mat[i][col])));
  240.         }
  241.         return result;
  242.     }
  243.  
  244.     private static long[] matmult(long[] vec, long[][] mat) {
  245.         long[] result = new long[mat.length];
  246.         for (int i = 0; i < mat.length; i++) {
  247.             for (int j = 0; j < mat.length; j++) {
  248.                 result[i] += vec[j] * mat[j][i];
  249.                 result[i] &= ((1L << 48) - 1);
  250.             }
  251.         }
  252.         return result;
  253.     }
  254.  
  255.     private static long[] addVectors(long[] a, long[] b) {
  256.         long[] result = new long[a.length];
  257.         for (int i = 0; i < a.length; i++) {
  258.             result[i] = (a[i] + b[i]) & ((1L << 48) - 1);
  259.         }
  260.         return result;
  261.     }
  262.  
  263.     private static long getSeed(Random rand) {
  264.         try {
  265.             Field field = Random.class.getDeclaredField("seed");
  266.             field.setAccessible(true);
  267.             return ((AtomicLong) field.get(rand)).get();
  268.         } catch (ReflectiveOperationException e) {
  269.             e.printStackTrace();
  270.             return 0;
  271.         }
  272.     }
  273.  
  274.     private static long circularDiff(long a, long b) {
  275.         long da = (b - a) % (1L << 48);
  276.         long diff = 2 * da % (1L << 48) - da;
  277.         return diff;
  278.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement