Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
99
Task/Balanced-brackets/XBasic/balanced-brackets.basic
Normal file
99
Task/Balanced-brackets/XBasic/balanced-brackets.basic
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
' Balanced brackets
|
||||
PROGRAM "balancedbrackets"
|
||||
VERSION "0.001"
|
||||
|
||||
IMPORT "xst"
|
||||
|
||||
DECLARE FUNCTION Entry()
|
||||
INTERNAL FUNCTION IsStringBalanced(str$)
|
||||
INTERNAL FUNCTION Generate$(n%%)
|
||||
|
||||
' Pseudo-random number generator
|
||||
' Based on the rand, srand functions from Kernighan & Ritchie's book
|
||||
' 'The C Programming Language'
|
||||
DECLARE FUNCTION Rand()
|
||||
DECLARE FUNCTION SRand(seed%%)
|
||||
|
||||
FUNCTION Entry()
|
||||
PRINT "Supplied examples"
|
||||
DIM tests$[6]
|
||||
tests$[0] = ""
|
||||
tests$[1] = "[]"
|
||||
tests$[2] = "]["
|
||||
tests$[3] = "[][]"
|
||||
tests$[4] = "][]["
|
||||
tests$[5] = "[[][]]"
|
||||
tests$[6] = "[]][[]"
|
||||
FOR example@@ = 0 TO UBOUND(tests$[])
|
||||
test$ = tests$[example@@]
|
||||
PRINT "The string '"; test$; "' is ";
|
||||
IFT IsStringBalanced(test$) THEN
|
||||
PRINT "OK."
|
||||
ELSE
|
||||
PRINT "not OK."
|
||||
END IF
|
||||
NEXT example@@
|
||||
PRINT
|
||||
PRINT "Random generated examples"
|
||||
XstGetSystemTime (@msec)
|
||||
SRand(INT(msec) MOD 32768)
|
||||
FOR example@@ = 1 TO 10
|
||||
test$ = Generate$(INT(Rand() / 32768.0 * 10.0) + 1)
|
||||
PRINT "The string '"; test$; "' is ";
|
||||
IFT IsStringBalanced(test$) THEN
|
||||
PRINT "OK."
|
||||
ELSE
|
||||
PRINT "not OK."
|
||||
END IF
|
||||
NEXT example@@
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION IsStringBalanced(s$)
|
||||
paired& = 0
|
||||
i%% = 1
|
||||
DO WHILE i%% <= LEN(s$) && paired& >= 0
|
||||
c$ = MID$(s$, i%%, 1)
|
||||
SELECT CASE c$
|
||||
CASE "[":
|
||||
INC paired&
|
||||
CASE "]":
|
||||
DEC paired&
|
||||
END SELECT
|
||||
INC i%%
|
||||
LOOP
|
||||
END FUNCTION (paired& = 0)
|
||||
|
||||
FUNCTION Generate$(n%%)
|
||||
opensCount%% = 0
|
||||
closesCount%% = 0
|
||||
' Choose at random until n%% of one type generated
|
||||
generated$ = ""
|
||||
DO WHILE opensCount%% < n%% && closesCount%% < n%%
|
||||
SELECT CASE (INT(Rand() / 32768.0 * 2.0) + 1)
|
||||
CASE 1:
|
||||
INC opensCount%%
|
||||
generated$ = generated$ + "["
|
||||
CASE 2:
|
||||
INC closesCount%%
|
||||
generated$ = generated$ + "]"
|
||||
END SELECT
|
||||
LOOP
|
||||
' Now pad with the remaining other brackets
|
||||
IF opensCount%% = n%% THEN
|
||||
generated$ = generated$ + CHR$(']', n%% - closesCount%%)
|
||||
ELSE
|
||||
generated$ = generated$ + CHR$('[', n%% - opensCount%%)
|
||||
END IF
|
||||
END FUNCTION generated$
|
||||
|
||||
' Return pseudo-random integer on 0..32767
|
||||
FUNCTION Rand()
|
||||
#next&& = #next&& * 1103515245 + 12345
|
||||
END FUNCTION USHORT(#next&& / 65536) MOD 32768
|
||||
|
||||
' Set seed for Rand()
|
||||
FUNCTION SRand(seed%%)
|
||||
#next&& = seed%%
|
||||
END FUNCTION
|
||||
|
||||
END PROGRAM
|
||||
Loading…
Add table
Add a link
Reference in a new issue