I updated the test script to check for all valid solutions when it's given random numbers, and also to tun 20 random tests instead of one. It's fast: only 2 seconds, so it's not THAT much overhead added to your function! Also, I added a version number to the 1st line printed (it now says: "Game 24 v 1.1")

code:
[d:\work\admin\kixtart\kixgolf4]timer /1 on %+ kix32 test.kix %+ timer /1 off
Timer 1 on: 14:37:54

Game24 KiXtart Golf running under KiXtart v4.11

In => 1, 2, 3, 4; Out => = => WRONG!!
In => 2, 2, 6, 8; Out => = => WRONG!!
In => 4, 4, 6, 6; Out => = => Correct!!
In => 3, 3, 8, 8; Out => = => Correct!!
In => 0, 4, 8, 9; Out => = => NOT in solution set!!
In => 8, 8, 3, 1; Out => = => Correct!!
In => 5, 1, 5, 6; Out => = => Correct!!
In => 8, 8, 4, 3; Out => = => NOT in solution set!!
In => 9, 9, 4, 8; Out => = => Correct!!
In => 6, 9, 4, 9; Out => = => Correct!!
In => 0, 7, 0, 6; Out => = => NOT in solution set!!
In => 1, 8, 1, 1; Out => = => Correct!!
In => 6, 8, 3, 2; Out => = => Correct!!
In => 1, 5, 4, 8; Out => = => Correct!!
In => 2, 9, 7, 8; Out => = => Correct!!
In => 5, 8, 2, 7; Out => = => Correct!!
In => 1, 0, 3, 7; Out => = => Correct!!
In => 1, 1, 7, 7; Out => = => NOT in solution set!!
In => 5, 6, 0, 3; Out => = => NOT in solution set!!
In => 2, 9, 9, 1; Out => = => NOT in solution set!!
In => 5, 3, 9, 0; Out => = => Correct!!
In => 0, 1, 7, 8; Out => = => NOT in solution set!!
In => 5, 9, 7, 0; Out => = => NOT in solution set!!
In => 0, 7, 6, 6; Out => = => NOT in solution set!!
In => 3, 4, 7, 7; Out => = => WRONG!!
In => 1, 2, 8, 9; Out => = => WRONG!!
In => 3, 3, 7, 7; Out => = => WRONG!!

kix32 Kixgolf3.kix $f=test.kix

KixGolf v3.0.3 score = 38, running under KiXtart v4.11
Timer 1 off: 14:37:57 Elapsed: 0:00:02,83

[d:\work\admin\kixtart\kixgolf4]

Here it is:

code:
BREAK ON

Global $Target, $Valid

$Target = 24
$ErrorMargin = 0.0001
$Valid = "003800460128013601370138013901450146014701480155015602260234"
+ "023602380239024402460248025702580266026802690288033403350337"
+ "033803390344034603480349035803590366036703680378038803890445"
+ "044604470448045604660467046804690478048805660569058806890699"
+ "078908881118112611271128112911341135113611371138113911441145"
+ "114611471148114911551156115711581166116811691188122412251226"
+ "122712281229123312341235123612371238123912441245124612471248"
+ "124912551256125712581259126612671268126912771278127912881289"
+ "133313341335133613371338133913441345134613471348134913561357"
+ "135813591366136713681369137713781379138813891399144414451446"
+ "144714481449145514561457145814591466146714681469147714781479"
+ "148814891555155615591566156715681569157815791588158915991666"
+ "166816691679168816891699177917881789179918881889222322242225"
+ "222722282229223322342235223622372238223922442245224622472248"
+ "224922552256225722582259226622672268226922772278228822892333"
+ "233523362337233823392344234523462347234823492355235623572358"
+ "235923662367236823692377237823792388238923992444244524462447"
+ "244824492455245624572458245924662467246824692477247824792488"
+ "248924992557255825592566256725682569257725782579258825892666"
+ "266726682669267826792688268926992778278827892888288928993333"
+ "333433353336333733383339334433453346334733483349335533563357"
+ "335933663367336833693377337833793389339934443445344634473448"
+ "344934553456345734583459346634683469347734783479348934993556"
+ "355735583559356635673568356935783579358835893599366636673668"
+ "366936773678367936883689369937773778377937883789379938883889"
+ "389939994444444544464447444844494455445644574458446844694477"
+ "447844794488448945554556455745584559456645674568456945774578"
+ "457945884589459946664667466846694677467846794688468946994777"
+ "477847884789479948884889489955555556555955665567556855775578"
+ "558855895599566656675668566956775678567956885689569957795788"
+ "578958885889666666686669667966886689678967996888688968997889"

$rc=SETOPTION('Explicit','ON')
$rc=SETOPTION('NoVarsInString','ON')
$rc=SRND(@MSECS)

? 'Game24 v 1.1 KiXtart Golf running under KiXtart v'@KIX
? ''
Dim $i

test24(1,2,3,4,1)
test24(2,2,6,8,1)
test24(4,4,6,6,2)
test24(3,3,8,8,2)
for $i = 1 to 20
test24(RND(9),RND(9),RND(9),RND(9),3)
next
test24(3,4,7,7,1)
test24(1,2,8,9,1)
test24(3,3,7,7,1)
? ""

; Inputs: $i1..$i4 => 4 numbers to pass to game24
; $behaviour = 1 -> Expected result
; $behaviour = 2 -> Expected to fail
; $behaviour = 3 -> Don't know (random)
function test24($i1,$i2,$i3,$i4,$behaviour)
DIM $rc, $out, $result, $error, $str, $i, $found, $temp, $nums[4], $numbers

$str = 'In => '+$i1+', '+$i2+', '+$i3+', '+$i4+'; Out => '
$out=Game24($i1,$i2,$i3,$i4)
$i = 1
while $i <= Len($out)
if ( SubStr($out,$i,1) >= '0' ) and ( SubStr($out,$i,1) <= '9' )
$out = Left($out,$i) + '.0' + SubStr($out,$i+1)
$i = $i + 2;
endif;
$i = $i + 1;
loop
$error=Execute("$$result=("+$out+")")
$result=Trim($result)
$str = $str + $out + " = " + $result
if ( $behaviour = 3 )
; $str = $str + " => Not sure..."
; sort numbers used, so as to check array of possible solutions
$nums[0] = $i1
$nums[1] = $i2
$nums[2] = $i3
$nums[3] = $i4
do
$found = 0
for $i = 0 to 2
if $nums[$i] > $nums[$i+1]
$found = 1
$temp = $nums[$i+1]
$nums[$i+1] = $nums[$i]
$nums[$i] = $temp
endif
next
until $found == 0
$numbers = "" + $nums[0] + $nums[1] + $nums[2] + $nums[3]
; check for presence in array
$found = 0
$i = 1
while ( $found == 0 ) and ( $i < Len($Valid) )
if ( SubStr( $Valid, $i, 4 ) == $numbers )
$found = 1
endif
$i = $i + 4
loop
if $found
$str = $str + " => Correct!!"
else
$str = $str + " => NOT in solution set!!"
endif
else
if ( ($behaviour=1) and ($result>=$Target-$ErrorMargin)
and ($result<=$Target+$ErrorMargin) )
or ( ($behaviour=2) and ($result='') )
$str = $str + " => Correct!!"
else
$str = $str + " => WRONG!!"
endif
endif
? $str
endfunction

Dim $shellcommand
$shellcommand='kix32 Kixgolf3.kix $f='+@scriptname
? $shellcommand
Shell $shellcommand

; Operators: 64 combinations
; +++ ++- ++* ++/ +-+ +-- +-* +-/ +*+ +*- +** +*/ +/+ +/- +/* +//
; -++ -+- -+* -+/ --+ --- --* --/ -*+ -*- -** -*/ -/+ -/- -/* -//
; *++ *+- *+* *+/ *-+ *-- *-* *-/ **+ **- *** **/ */+ */- */* *//
; /++ /+- /+* /+/ /-+ /-- /-* /-/ /*+ /*- /** /*/ //+ //- //* ///

; Digits: 24 permutations
; abcd abdc acbd acdb adbc adcb
; bacd badc bcad bcda bdac bdca
; cabd cadb cbad cbda cdab cdba
; dabc dacb dbac dbca dcab dcba

; Parentheses: 5 combinations
; a b c d
; a b (c d)
; (a b)(c d)
; a(b c d)
; (a b c)d

; 0 need (ab)cd
; 0 need a(bc)d
; 0 need ab(cd)
; ------------------
; 1 need (abc)d
; ------------------
; 3 need a(bcd)
; 13 need (ab)(cd)
; ------------------
; 131 need at least one '+'
; 174 need at least one '-'
; 306 need at least one '*'
; 36 need at least one '/'
;!
function game24($a,$b,$c,$d)

endfunction

;!
;!



[ 19. September 2002, 16:21: Message edited by: Fernando Madruga ]
_________________________
Later,   [b]Mad[/b]ruga