昨日HSP3で作ったHit&Blowのint配列使用版。HSPは配列周りの仕様がとてつもなく貧弱なので愚直にforeachを回し続ける。
昨日HSP3で作ったHit&Blowのint配列使用版。HSPは配列周りの仕様がとてつもなく貧弱なので愚直にforeachを回し続ける。
#runtime "hsp3cl"#cmpopt varinit 1randomize#module Program#defcfunc getDigitsdim lnrepeatmes "桁数を入力してください > ",1input ln,,2digit=int(ln)if 1<=digit & digit<=9: breakmes "1-9の数字を入力してください。"loopreturn digit#deffunc refSeq int _digit,array _seqdim seq,10foreach seqseq.cnt=cntlooprepeat length(seq)-1,1: i=length(seq)-cntr=rnd(i+1)tmp=seq.iseq.i=seq.rseq.r=tmploopdim _seq,_digitforeach _seq_seq.cnt=seq.cntloopreturn#deffunc refInputSeq int _digit,int _chkCnt,array _seqsdim seqnumList="0123456789"sdim lnrepeatmes strf("[%d] ",_chkCnt),2input ln,,2sdim seq,,strlen(ln)foreach seqseq.cnt=strmid(ln,cnt,1)loopisDigit=_digit=length(seq)isNum=1foreach seqif -1=instr(numList,,seq.cnt){isNum=0break}loopisUnique=1foreach seqi=cntforeach seqif i!cnt && seq.i=seq.cnt {isUnique=0break}loopif 0=isUnique: breakloopif isDigit & isNum & isUnique: breakmes "入力が不正です。"loopforeach seq_seq.cnt=seq.cntloopreturn ln#deffunc maindigit=getDigit()dim ansrefSeq digit,ansrepeatdim userrefInputSeq digit,cnt,userhit=0blow=0foreach userif ans.cnt=user.cnt {hit++}else {i=cntforeach ansif user.i=ans.cnt {blow++break}loop}loopmes strf("hit: %d blow: %d",hit,blow)if hit=digit: breakloopmes "Congratulation!"sdim lninput ln,,2return#globalmain