昨日HSP3で作ったHit&Blowのint配列使用版。HSPは配列周りの仕様がとてつもなく貧弱なので愚直にforeachを回し続ける。
昨日HSP3で作ったHit&Blowのint配列使用版。HSPは配列周りの仕様がとてつもなく貧弱なので愚直にforeachを回し続ける。
#runtime "hsp3cl" #cmpopt varinit 1 randomize #module Program #defcfunc getDigit sdim ln repeat mes "桁数を入力してください > ",1 input ln,,2 digit=int(ln) if 1<=digit & digit<=9: break mes "1-9の数字を入力してください。" loop return digit #deffunc refSeq int _digit,array _seq dim seq,10 foreach seq seq.cnt=cnt loop repeat length(seq)-1,1: i=length(seq)-cnt r=rnd(i+1) tmp=seq.i seq.i=seq.r seq.r=tmp loop dim _seq,_digit foreach _seq _seq.cnt=seq.cnt loop return #deffunc refInputSeq int _digit,int _chkCnt,array _seq sdim seq numList="0123456789" sdim ln repeat mes strf("[%d] ",_chkCnt),2 input ln,,2 sdim seq,,strlen(ln) foreach seq seq.cnt=strmid(ln,cnt,1) loop isDigit=_digit=length(seq) isNum=1 foreach seq if -1=instr(numList,,seq.cnt){ isNum=0 break } loop isUnique=1 foreach seq i=cnt foreach seq if i!cnt && seq.i=seq.cnt { isUnique=0 break } loop if 0=isUnique: break loop if isDigit & isNum & isUnique: break mes "入力が不正です。" loop foreach seq _seq.cnt=seq.cnt loop return ln #deffunc main digit=getDigit() dim ans refSeq digit,ans repeat dim user refInputSeq digit,cnt,user hit=0 blow=0 foreach user if ans.cnt=user.cnt { hit++ } else { i=cnt foreach ans if user.i=ans.cnt { blow++ break } loop } loop mes strf("hit: %d blow: %d",hit,blow) if hit=digit: break loop mes "Congratulation!" sdim ln input ln,,2 return #global main