61 lines
968 B
Text
61 lines
968 B
Text
TYPE Result=[BYTE success,sum,highCount]
|
|
BYTE FUNC GenerateAttrib()
|
|
BYTE i,v,min,sum
|
|
|
|
min=255 sum=0
|
|
FOR i=0 TO 3
|
|
DO
|
|
v=Rand(6)+1
|
|
IF v<min THEN
|
|
min=v
|
|
FI
|
|
sum==+v
|
|
OD
|
|
RETURN (sum-min)
|
|
|
|
PROC Generate(BYTE ARRAY a BYTE len Result POINTER res)
|
|
BYTE i,v,count
|
|
|
|
res.highCount=0 res.sum=0
|
|
FOR i=0 TO len-1
|
|
DO
|
|
v=GenerateAttrib()
|
|
IF v>=15 THEN
|
|
res.highCount==+1
|
|
FI
|
|
res.sum==+v
|
|
a(i)=v
|
|
OD
|
|
IF res.highCount<2 OR res.sum<75 THEN
|
|
res.success=0
|
|
ELSE
|
|
res.success=1
|
|
FI
|
|
RETURN
|
|
|
|
PROC Main()
|
|
DEFINE count="6"
|
|
BYTE ARRAY a(count)
|
|
Result res
|
|
BYTE i
|
|
|
|
res.success=0
|
|
WHILE res.success=0
|
|
DO
|
|
Generate(a,count,res)
|
|
Print("attribs: ")
|
|
FOR i=0 TO count-1
|
|
DO
|
|
PrintB(a(i))
|
|
IF i<count-1 THEN
|
|
Put(',)
|
|
FI
|
|
OD
|
|
PrintF(" sum=%B highCount=%B ",res.sum,res.highCount)
|
|
IF res.success THEN
|
|
PrintE("success")
|
|
ELSE
|
|
PrintE("failed")
|
|
FI
|
|
OD
|
|
RETURN
|