Hit&Blow int配列版 from HSP3

昨日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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX