Balanced brackets: Difference between revisions
(→{{header|Perl 6}}: Added PureBasic) |
(→{{header|PureBasic}}: Add Python) |
||
Line 53: | Line 53: | ||
Debug Ballanced("[[][]]") ; #true |
Debug Ballanced("[[][]]") ; #true |
||
Debug Ballanced("[]][[]") ; #false</lang> |
Debug Ballanced("[]][[]") ; #false</lang> |
||
=={{header|Python}}== |
|||
<lang python>>>> def balanced(txt): |
|||
... braced = 0 |
|||
... for ch in txt: |
|||
... if ch == '[': braced += 1 |
|||
... if ch == ']': |
|||
... braced -= 1 |
|||
... if braced < 0: return False |
|||
... return True |
|||
... |
|||
>>> for txt in ',[],[][],[[][]],][,][][,[]][[]'.split(','): |
|||
... print ("%r is%s balanced" % (txt, '' if balanced(txt) else ' not')) |
|||
... |
|||
'' is balanced |
|||
'[]' is balanced |
|||
'[][]' is balanced |
|||
'[[][]]' is balanced |
|||
'][' is not balanced |
|||
'][][' is not balanced |
|||
'[]][[]' is not balanced</lang> |
Revision as of 13:17, 20 February 2011
You are encouraged to solve this task according to the task description, using any language you may know.
Problem: Generate a string with $N
opening brackets ("["
) and $N
closing brackets ("]"
), in some arbitrary order. Determine whether the 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 ][ NOT OK [][] OK ][][ NOT OK [[][]] OK []][[] NOT OK
Perl 6
<lang perl6>sub balanced($s) {
my $l = 0; for $s.comb { when "]" { --$l; return False if $l < 0; } when "[" { ++$l; } } return $l == 0;
}
my $N = get; my $s = (<[ ]> xx $N).pick(*).join; say "$s {balanced($s) ?? "is" !! "is not"} well-balanced"</lang>
PureBasic
<lang PureBasic>Procedure Ballanced(String$)
Protected *p.Character, cnt *p=@String$ While *p\c If *p\c='[' cnt+1 ElseIf *p\c=']' cnt-1 EndIf If cnt<0: Break: EndIf *p+SizeOf(Character) Wend If cnt=0 ProcedureReturn #True EndIf
EndProcedure</lang> Testing the procedure <lang PureBasic>Debug Ballanced("") ; #true Debug Ballanced("[]") ; #true Debug Ballanced("][") ; #false Debug Ballanced("[][]") ; #true Debug Ballanced("][][") ; #false Debug Ballanced("[[][]]") ; #true Debug Ballanced("[]][[]") ; #false</lang>
Python
<lang python>>>> def balanced(txt): ... braced = 0 ... for ch in txt: ... if ch == '[': braced += 1 ... if ch == ']': ... braced -= 1 ... if braced < 0: return False ... return True ... >>> for txt in ',[],[][],[[][]],][,][][,[]][[]'.split(','): ... print ("%r is%s balanced" % (txt, if balanced(txt) else ' not')) ... is balanced '[]' is balanced '[][]' is balanced '[[][]]' is balanced '][' is not balanced '][][' is not balanced '[]][[]' is not balanced</lang>