超星学习通数独外挂

超星学习通数独游戏网址:

http://game.yd.chaoxing.com/games/sudoku/happy?productId=3

如果手动输入数,则需按规则输入到str变量中,代码如下:

 

 1 #从左到右,从上到下,三数一组输入;以下为示例str
 2 str="000 007 300 087 100 049 304 600 580 000 018 000 500 006 000 090 002 000 032 000 051 000 200 700 049 000 060"
 3 
 4 import numpy as np
 5 from random import choice
 6 
 7 #第一步,定义函数,找出指定空格里可能的数(候选数)
 8 def candidate(mat,arr,col):#输入矩阵,行序号和列序号,定位
 9     remain=list(range(1,10))
10     #定义数组,储存不可能的数
11     forbid=[]
12     for i in mat[arr,...]:#每行不能重复
13         if i not in forbid:
14             forbid.append(i)
15     for j in mat[...,col]:#每列不能重复
16         if j not in forbid:
17             forbid.append(j)
18     for m in mat[arr//3*3:arr//3*3+3,col//3*3:col//3*3+3]:#九宫格内不能重复
19         for n in m:
20             if n not in forbid:
21                 forbid.append(n)
22     #除去不可能的数,剩下可能数
23     for k in forbid:
24         if k!=0:
25             remain.remove(k)
26     return remain
27     #返回的remain可能有多个侯选数
28 
29 #第二步,构思侯选数最少则优先填数的策略
30 def fill(mat):
31 #按照从左到右,从上到下的顺序遍历空格
32     for arr,i in enumerate(mat,0):
33         for col,j in enumerate(i,0):
34             if j==0:
35                 candi=candidate(mat,arr,col)
36                 #如果侯选数1个,则放心填入,更新候选数方阵
37                 if len(candi)==1:
38                     mat[arr,col]=candi[0]
39                 #若候选数有多个,则寻找下一个空格
40                 if len(candi)>1:
41                     continue
42     return mat
43 
44 #判断是否充分迭代,是否不存在候选数为1个的空格
45 def recession(mat):
46     mat_pre=mat.copy()
47     mat=fill(mat)
48     while (mat_pre!=mat).any():#注意不等于的时候用any
49         mat_pre=mat.copy()
50         mat=fill(mat)
51     return mat
52 
53 
54 #第三步,试探性猜数
55 
56 #定义猜数函数
57 def guess(mat):
58     seq_li=[]
59     for arr,i in enumerate(mat,0):
60         for col,j in enumerate(i,0):
61             if j==0:
62                 candi=candidate(mat,arr,col)
63                 #若候选数有多个,则寻找下一个空格
64                 if len(candi)>0:
65                     sequence=choice(candi)
66                     mat[arr,col]=sequence
67                     #记录猜数值序列
68                     seq_li.append(sequence)
69                     #试探性猜它为第一个侯选数,进行充分迭代
70                     mat=recession(mat)
71     #print("seq_li\n:",seq_li)
72     return mat
73 
74 def execute(str):
75     #将str转化为ndarray对象
76     flat_li=[int(i) for i in list(str.replace(" ",""))]
77     mat=np.array(flat_li).reshape(9,9)
78     print("初始矩阵:\n",mat)
79     mat=recession(mat)
80     print("单数填充策略结束:\n",mat)
81     #创建mat一百个副本
82     chances=[]
83     for i in range(100):
84         chances.append(mat.copy())
85     #若失败,则重猜
86     i=0
87     while 0 in mat:
88         mat=guess(chances[i])
89         i+=1
90     print("猜策略结束:\n",mat)
91     return mat
92 execute(str)

 

 

 

效果如下:

 

 

 

以上可在学习通app里面的破解数独;

 

但实际上,网页版的超星数独的HTML页面里就已经含有了答案,答案在开发者工具的source栏目中sudokuData数据集里面;

这个sudokuData有5行,代表不同5个不同难度,最后一行是骨灰级;

每行有21个字符串,代表21个关卡,每个字符串即为每道题的内容和答案;

字符串中前81个字符为题目内容,后81个为答案,因此网页版数独没有计算答案的必要;

 

如若没有答案,又不想手动输入,可以调用以下代码:(需安装selenium模块和相关软件)

其中sudoku模块即以上代码的文件命名,需要注意,这两个代码文件需在同一个工作目录,且sudoku最后一行执行代码execute(str)可以删除

 1 import sudoku
 2 import time
 3 sudokuData = [
 4     ["50932081426314870941875023663728149595047316018069537239186254704650792072593468157932681426314875941875923663728149595247316818469537239186254784651792372593468116940", "50478913636712480989153672003524167878200341514687529067945230145831096220396854752478913636712485989153672493524167878269341514687529367945238145831796221396854716939", "09840162035482697121075934892351078684569721367038200456917843213294086740706315979843162535482697121675934892351478684569721367138259456917843213294586748726315916938", "39460201571859063205271389428036504714027956857614832986140790343795128690583647039468271571859463265271389428936514714327956857614832986142795343795128692583647116937", "62309170557924613840107362976218059313890546095406780221075938409541827684763205162389174557924613848157362976218459313892546795436781221675938439541827684763295116936", "92063785070542060336498512789251340601076428964789053143810976215927634027034891592163785478542169336498512789251347651376428964789253143815976215927634827634891516935", "65791348003020471541257893029083610776512034808174562994608250157849026302365789465791348283926471541257893629483615776512934838174562994638257157849126312365789416934", "12743068569025731003481672948106059797514020326097514885069307034972185601658493212743968569825731453481672948136259797514826326397514885269347134972185671658493216933", "52648317903710584040809723527936451860491002308107096084305169216280945779524638152648317993712584641869723527936451865491872338157296484375169216283945779524638116932", "60718520995130286708379614083206749156021430871483965037502198409607052342895371064718523995134286728379614583256749156921437871483965237562198419647852342895371616931", "30528476028059730179463185003706952046275319815940863764137098002081547650804621331528476928659734179463185283716952446275319815942863764137298592381547657894621316930", "43060957119637520875208139027954018386471302501089276494516703260193045038025460943862957119637524875248139627954618386471392551389276494516783262193845738725461916929", "76012943002135890735070618268753104919026057850208761381549300697081035423467589076812943542135896735974618268753124919326457854298761381549372697681235423467589116928", "00732501981946020552089147638074956009561238446208379020695014717023605895807462364732581981946723552389147638174956279561238446258379123695814717423695895817462316927", "94510283000746802586035070123981657415072469060409318248163720970694530809320146794517283631746892586235974123981657415872469367459318248163725972694531859328146716926", "74560931003045796868930200580397412627013859491450680046120578359876324002704105974568931213245796868931247585397412627613859491452683746129578359876324132784165916925", "49035170606700810430174609060351927807548290392867045121986734505603482083490501749235178656729813438174659264351927817548296392867345121986734575613482983492561716924", "51080402782796004340017285620158369093564107064829053108070936536245871975901048051683492782796514349317285627158369493564127864829753118472936536245871975931648216923", "03710654045072090012904307806085739459320470670863925108430216060298543037546102983719654245672891312954367826185739459321478674863925198437216561298543737546182916922", "03801649726780051010473526874010308061398470202965013490246130545107862907650284053821649726784951319473526874512398661398475282965713498246137545137862937659284116921", "20456071909027103471690480238961254010709528345078396150312049804035702060184030523456871989527163471693485238961254716749528345278396157312649894835712662184937516920"],
 5     ["04871056030605900050786412370940501663490185202503890790318247580234769147009623824871356931625978459786412378942531663497185212563894796318247585234769147159623843694", "73906201580215367001694702800040820062431958718060594306528179047059013029073480673986241584215367951694732895347826162431958718762594336528179447859613229173485643687", "70060843204610390592347080656921408313095762040283605908100956739750124005478030171569843284612397592347581656921478313895762447283615928134956739756124865478239143687", "49786013506210509451097480270528390000674125808109634762835947015940700330060802049786213586213579451397486274528391693674125828159634762835947115942768337461852943687", "95040102042095371031087045010423609808304967226908734180269510763172008509530806095746182342895371631687245917423659858314967226958734184269513763172498579531826443687", "30980501487540169304063007598005642100420076072018450903706815269050230720831794636987521487542169314263987598375642151429376872618453943796815269154238725831794643687", "80301976026174830900706241800510780071208493508092514762089050103820169410945600384351976226174835995736241849513782671268493538692514762489357153827169417945628343687", "05800416360008349543961500054380291787045003292637100436420700109703820628510607075892416361278349543961572854386291787145963292637185436429758119753824628514637943687", "00984760340602087987390602005840270103175008079410035294057016016528493038069120552984761341632587987391652465843279123175948679416835294257316816528493738769124543686", "23805900169100235054761002907209010018620740500314800631087406082930570476492053823875964169148235754761382947259618318623749595314827631587496282936571476492153843686", "03005214884207395000084927308326740009100463776039100515800630000941056242690578193765214884217395661584927358326741929158463776439182515872639437941856242693578143686", "07461532905693810093002050650306089274928100502850074119785240046037001038004600787461532925693817493142758651376489274928163562859374119785246346537921838214695743686", "86750041220047600553002176960930705005296810018320469002864300137009080441578093086753941229147638553482176964931725875296814318325469792864357137619582441578293643686", "65040298120198654009800102030510907090637415017006039470064823556320740882000370065743298123198654749875162334512987698637415217286539471964823556329741882451376943686", "00642918529010800781500624008096350115904730067301009452760490330800072006037245873642918529415863781573624948296357115984736267321589452768491334859172696137245843686", "63708059220067938480000016700421063810004870550200741937049105092605304001502690363718459225167938484953216779421563816394872558236741937849125692675384141582697343686", "01700842504030570802014736020407690176001924359103268015006389000698053298005400031769842564932571882514736923487695176851924359143268715276389447698153298325417643686", "84009500630014208507538004202405801060341720870090060003106407920753906106907152384279513639614278517538694292465831765341729871892365453126487928753946146987152343686", "20470691516040500757013906448009360101600030832060805904095278080237009070380054223478691516942583757813926448529367191654732832761845964195278385237419679386154243685", "86420390000395768097000823018002506300730015800687140204070001969150204070019452686421397521395768497564823118942576342736915835687149254278631969153284773819452643685", "05936070410600409303405108661050240909084602054217000897108503200521390702300780025936871418672459373495128661853247939784612554217936897148563286521394742369785143685"],
 6     ["69105000340026059035049078000002943500504097803407816280371460006708201010060582769185724347826359135249178678612943521534697893457816282371465956798231414963582754694", "01300957002704809008930060423090480087410003010528306700803625130205100905109230641362957862754819358931762423697481587416593219528346794873625136285174975149238654685", "70495802002813407003076004808304060707058600125630109030569000209241000564700501976495812392813457653176294818324965747958623125637189431569748289241376564782531954685", "06001090443179620808700210680013479537050902001000748000230500005862104910390056226581397443179625898745213682613479537458962151926748369234581775862134914397856254685", "00189547087460090302904306098020460774200609015008030031500000600752813020806170563189547287461295352974386198325461774213659815698732431547928646752813929836174554685", "20367000990035042648600250006003009230816904574008501001070395083750100400482007125367418997135842648691253716543789232816974574928561361274395883759126459482637154685", "04697102009186240082005061906050023000520684001003700008302579447908300205270030034697152859186247382735461996451823773529684121843796568312579447968315215274938654685", "93406007800000490371638002460853200730180020525000183010040005950069704006915070293426517882571496371638952469853241734187629525794183617342865958269734146915378254684", "91740350800025030950298000400009064749000680072604001337061008510052003026570800191746352864825137953298716485139264749317685272684591337461928518952473626573849154684", "89027610015200074636050100843165809000530086090610000400970248000000357227308000989427613515283974636754192843165829772539486198612735451976248364891357227348561954684", "00010408000805002415400806900081240021507903600753690290070030050100369747360020879216458363895712415432876936981247521547983684753691292678534158124369747369125854684", "08060135760038500053000080134620701890206847000000469276040010949001000502305970028964135767138592453497286134629751895216847381753469276542318949871623512385974654684", "00096008140801300090104803518902500004307052000730006009420007653649700270280605037596248146851329792174863518962574364317952825738416989425137653649781271283695454684", "20001607500500026108620004990080260035006490000870940350000173070108300483054719029341687547539826118627534991483265735716498262875941354962173876198352483254719654684", "17306590205900016082614070020800060430001807071000600098005040053009402700238059017386594245973216882614975329857361436541827971492638598725143653169482764238759154684", "30020967170010020415206709051000270902000800680000034043080096000530400808159043734825967176918325415246789351463278992374851687691534243782196569537412828159643754684", "25109030098000065074085300251400800000006000086701902310000206447013600900047523025169734898324165774685319251432897632976481586751942313598276447213658969847523154684", "40060017308601009039107006090080103604250070980049725000805200700400800550004632042568917378631459239127586495782143614256378986349725163815294727493861551974632854683", "63704009000017063404103070010300790000050820025809006000205084101508902638020000963784219582917563454193678216342795879456821325839146797265384141578932638621457954683", "00805320151002680300084060000000240805400071010957402637000090400030906769500703046875329151792684392384167573619245825463871918957432637126598484231956769548713254683", "36071004000086010018034960793100750442500070380050000000328047060095302000000609036971524875486213918234965793162758442519876387653491259328147664795382121847639554683"],
 7     ["40030200090200083003581060259008001320053008607000640004005007060974100005790016448136259796247583173581964259628471321453798687319642514865327962974135835792816432694", "00170005240720500902500070001082950407460390800000036016000080700810069304938000063179845248726513992543178631682957457461392889257436116395284725814769374938621532689", "60259017039100054075010490010300900508061000000032040003080060780000600207603280464259317839127854675816492312348976548761523996532748123984165781475639257693281432689", "09835041060304800000400003000063400700690000450920710090052000126000078500587100279835241665314827912476953881263495737691582454928716398752634126149378543587169232689", "01950000070609015305301670000000100003200840007064280020006007806708904039042000541957328672689415385321679468473152913295846797564283124136597856718934239842761532689", "02600814770000480584070600000087000100026040820000905300239051030060100909005030092653814771392486584571693243987562157126349826814975368239751435468127919745238632689", "50009260003900020070053009008700690590035008200100004040370086107001042081046000054819267313967425872653819438724691596435178225198734649372586167581342981246953732689", "70490200500103520430071460807005010060310800201000080000009000609630008000704002976498231598163527432571469827845916365317894241926385784259173659632748113784652932689", "00030090000001657000900023002000374000400906570085002057348100200869010006100048065734291838291657441957823682516374913472986579685432157348169224869715396123548732689", "00040018661480000039801040000004000003790250010957026007020000390370062080005000072543918661482593739861745225614837943796251818957326457129684394378162586235479132688", "17000380000050130400248000900100708000309246760035009020570000006000504000820960017492385689657132435248671992164758358319246764735829121576493876983514243821967532688", "60920300000050032600580010008700001006109084000015000072004590000030720400092076067921348581457932623586419798743651256179284334215867972864593119638725445392176832688", "00810460001007080300050802042090070000020700990600508203900007064005310000040103039812465721567984376453892142398671585124736997631548213986257464275319858749123632688", "10000007074390160000806004058000006900100350000940800231200500000732045000000620012653497874398162595826714358417236927169358463945871231274589686732945149581623732688", "03180004270420690000040000050376809000050400000010350005000286717090002000800000963185974278423691529547163854376829191752438686219357445931286717698542332864715932688", "00040003840320100080036700000200605960071280000000910008705409000010300050090002017649523845328197682936741531284675969571284374853916228765439196412358753197862432688", "50084631008317000060400205000000070080620413500000709005000000006072900009040000352784631998317526461493285714958372687629413523561749845136897236872954179245168332688", "00835020070000180020080010004007530902093600090040060009000456800002000100100070061835927473924185625486719384617532912593648797348261539271456846752893158169374232688", "10040007070536040003009700000905081006000295401300062000208003000000508000000004619642837572536149843859716224975681386713295451384962765298473137461528998127354632688", "00009000700705409003970000008001005070030001051000694000000813000806020026040008014529386782765439163978142548691275379234561851387694297452813635816927426143758932687", "40309000007000000016032800063001458000000000070068520030600941000000075000005200948379162527954683116532897463291458759823714671468529335687941292146375884715236932687"],
 8     ["00030080400004100042607001000800034065071000000902005696000708030000500000509200079135682458324167942697851327856934165471329813982475696213748531748596284569213721694", "70090008006300040000003006000762900100040597810000802000015000750204000000000003075496128326358741998123476584762935132641597819537862463915284757284319641879653221691", "50603000170000100201008000069000408700150300023096000405000702000980040000009000052673984178345196291468273569521438784157329623796815435814762916982547347239651821691", "90080000000240600900570063000008750000030572000000200160820010000301094000400000096182347537245681984579163223618759418934572645796238169827415352361894771453926821691", "00000730008710004930460058000001800050000600009000200003200005100020070004900006096548731228715364931462958747631892552179643889354217673296485165823179414987526321691", "00000008010800370000050710020009041004900006000630052000500260000000003000040087245716928319824375636258719427369541854982136781637452978593264162471893593145687221691", "00900000800087006005093041249070000002710000000050000000000102008035060000640000363921457814287536975893641249572318632716894586154923757369182428435769191648275321691", "80000000000100302090607000000074103900069507000000800430801020000050000002000605087215439654196372893687214528574163941369587269723851435841926716452798372938645121691", "00400005301093000070801000000024001009007006030068090208000040000000050000006300796482715321593674873851462987624931559237186434168597268375249142719853615946328721691", "00005000008090100000430009000029030000800060000040000700013206000050071280000054029685743138594127617432689576129835445871362992346518754713296863958471281267954321691", "00002000003046700870000020009003070000000100445008002900060050000000560100031000064582917313246795878915324689623471527359186445178632991864253732497568156731849221690", "00200009076030205080009400009000000000000001000047000000000010003000500618403002554276139876938245181359467269521378447895621332147856925684913793712584618463792521690", "00030000000000007000007080020004000600400050800020301080010900200076090050903010078132465994681527335297684127854139613469752869528371486715943241376298552943816721690", "20000000000300008014060000900050700680001029700000004000040500006000030050002300028517946369325478114763852992154783685431629773689214537246591846978135251892367421690", "00000007000100504609600000080009000700000000072000300010000900200050600808034100025816497337198524649623758181349265756971832472465381913587946294752613868234179521690", "01000050700000000120000060030807000000204300000405800300000900000950000604000000291648253748536729127319568435827146979264315816495872363172984582951437654783691221690", "00209600006000032080000006048000009007000900000050000000740001800001050000070003075239648116987432583425176948563219727614985391358724639742561864891357252176893421690", "53000700000000060040001208000000000000000100000000000029013000004087030200500609053968724181259467347631258972896341596345172815472893629713586464187935238524619721690", "00006008700600000050000000020039170800000401009000000070400030000020000005043000043296518798617345257184263924539176886752491319378652472461839531925784665843927121690", "00000306000087020000900004070000900000000000000070060083000000400502010000010805048729356151687429332951684776835941294268137515374268983196572469542713827413895621690", "00009000000900200000000000090502000310000080006000005404080070000700010000100630041659328775968243138214756997542861313496587226873195464381972582735419659127634821689"]
 9 ]
10 
11 from selenium import webdriver
12 driver=webdriver.Chrome()
13 driver.get("http://game.yd.chaoxing.com/sudoku/question?level=4")
14 
15 lis=driver.find_elements("xpath","/html/body/div[1]/div[3]/ul/li")
16 
17 def select(i):
18     #输入str,求解;为无视答案,只取前81个字符,记录题目
19     ans=sudoku.execute(str=sudokuData[4][i][:81])
20     #遍历每一行
21     for arr,li in enumerate(lis,0):
22         spans=li.find_elements("xpath","./span")
23         #遍历每一个
24         for col,span in enumerate(spans,0):
25             span.click()
26             choices=driver.find_element("xpath","/html/body/div[1]/div[4]")
27             i=ans[arr,col]
28             #xpath从1开始数数
29             choices.find_element("xpath",f"./span[{i}]").click()
30     #点击下一关
31     time.sleep(1.5)
32     driver.find_element("xpath","//*[@id=\"next\"]").click()
33     
34     time.sleep(1.5)
35 
36 for i in range(21):
37     select(i)
38 time.sleep(200)

 

写在最后

这次破解数独游戏的代码编写可以说是比较漫长的,其中我产生许多对代码、模块的误解,导致一次次失败;

包括但不限于ndarray对象默认为全局变量的性质,深浅拷贝性质和递归算法的折磨;

这说明了编写程序前,明确程序需求,调查模块内容对象性质是十分有必要甚至必须的

posted @ 2022-12-06 15:47  不撞楠乔  阅读(1181)  评论(0)    收藏  举报