Balanced brackets: Difference between revisions
Content added Content deleted
m (→{{header|R}}: reordering) |
(+Lisp) |
||
Line 471: | Line 471: | ||
["][][[]]][[][][][" nil] |
["][][[]]][[][][][" nil] |
||
["][][]]][]][[[][[[]" nil]</lang> |
["][][]]][]][[[][[[]" nil]</lang> |
||
=={{header|Common Lisp}}== |
|||
<lang lisp>(defun string-of-brackets (n) |
|||
(let ((result (make-string (* 2 n))) |
|||
(opening n) |
|||
(closing n)) |
|||
(dotimes (i (* 2 n) result) |
|||
(setf (aref result i) |
|||
(cond |
|||
((zerop opening) #\]) |
|||
((zerop closing) #\[) |
|||
(t (if (= (random 2) 0) |
|||
(progn (decf opening) #\[) |
|||
(progn (decf closing) #\])))))))) |
|||
(defun balancedp (string) |
|||
(zerop (reduce (lambda (nesting bracket) |
|||
(ecase bracket |
|||
(#\] (if (= nesting 0) |
|||
(return-from balancedp nil) |
|||
(1- nesting))) |
|||
(#\[ (1+ nesting)))) |
|||
string |
|||
:initial-value 0))) |
|||
(defun show-balanced-brackets () |
|||
(dotimes (i 10) |
|||
(let ((s (string-of-brackets i))) |
|||
(format t "~3A: ~A~%" (balancedp s) s))))</lang> |
|||
Output: |
|||
<pre>CL-USER> (show-balanced-brackets) |
|||
T : |
|||
NIL: ][ |
|||
T : [[]] |
|||
NIL: []]][[ |
|||
T : [][][][] |
|||
NIL: []][]][[[] |
|||
NIL: []]]]][][[[[ |
|||
NIL: ][]]]]][[[[][[ |
|||
T : [[[[[[][[]]]]]]] |
|||
NIL: ]][[[[][]][[[[]]]] |
|||
</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |