Task:

 Generate a string with   N   opening brackets   [   and with   N   closing brackets   ],   in some arbitrary order. 
 Determine whether the generated string is balanced; that is, whether it consists entirely of pairs of opening/closing brackets (in that order), none of which mis-nest.


Examples

   (empty)      OK
   []           OK   
   [][]         OK   
   [[][]]       OK 
   ][         NOT OK
   ][][       NOT OK
   []][[]     NOT OK



 
(define (balance str)
	(for/fold (closed 0) ((par str))
	 #:break (< closed 0 ) => closed
	(+ closed
	(cond 
		((string=? par "[")  1)
		((string=? par "]") -1)
		(else 0)))))
 
(define (task N)
(define str (list->string (append (make-list N "[") (make-list N "]"))))
	(for ((i 10))
	(set! str (list->string (shuffle (string->list str))))
	(writeln  (if (zero? (balance str)) '👍  '❌ ) str)))
 
(task 4)
 
❌     "[]]][[]["    
❌     "]][][[[]"    
❌     "][[[]]]["    
👍     "[][[[]]]"    
❌     "]][[][]["    
❌     "][][[[]]"    
👍     "[][][[]]"    
❌     "]][[][[]"    
❌     "[[]]][[]"    
❌     "[[][]]]["    
 
 