A little bit of lunchtime coding.
def closeBracket(openbracket): if openbracket == '{': return '}' elif openbracket == '(': return ')' elif openbracket == '[': return ']' if __name__ == "__main__": testcase = ('{{[{{{{}}{{}}}[]}[][{}][({[(({{[][()()]}}{[{{{}}}]}))][()]{[[{((()))({}(())[][])}][]()]}{()[()]}]})][]]}{{}[]}}') teststack = [] position = 0 for c in testcase: if c == '{' or c == '(' or c == '[': #push the open character on the stack teststack.append(c) if c == '}' or c == ')' or c == ']': #check first to see if the stack is empty and #if it is report the position if not teststack: print "Failed at position %d" % position break #it's not empty, so pop the last appended character off f = teststack.pop() #if this character is the respective close character #of the character that got popped off, we're good if closeBracket(f) == c: print "All good at position %d" % position #if the popped character isn't the respective close #character, then fail and report position elif closeBracket(f) != c: print "Failed at position %d" % position position = position + 1
Oof, the source code formatting in WordPress is so bad. I guess my interspersed comments aren’t helping readability. Here’s a Gist: https://gist.github.com/4595437
I used Python because it has .append() and .pop() for lists ready to go. Every open bracket in the string in testcase gets pushed onto the stack (appended onto the list), and when a close bracket is encountered I pop the last pushed open bracket off the stack. This popped off open bracket is sent to closeBracket(), and closeBracket() returns the respective close bracket. So, if the encountered close bracket matches the respective close bracket of the popped of open bracket, we’re all good. If it doesn’t (or if the list is empty) it fails and reports the position.
A ham-fisted explanation for a ham-fisted program.
Had I not already been familiar with the notion of a stack I’d have been super lost on puzzle #2. I worry that there is a new trick to the third puzzle, so this might take me a bit longer to figure out.
I think that this whole puzzle set is part of Cueup’s job application process. I hope they eventually post some of the interesting solutions their applicants submit. Nice of them to make it public – it’s rather enjoyable (so far!).
Hey, I’m stuck with the below replies since a day and a half.
“Near you is a rabbit using a computer, reading JIRA tickets.”
“I think I saw something in the ticket about newlines not counting as characters.”
Would you please help me what did you reply to arrive at this second question? Thanks a lot!
Just type in “talk rabbit”. The rabbit presents the next problem.
My code:
1. count opening parens, brackets, and braces separately
2. count closing parens, brackets, and braces separately
3. if for any reason closing parens, brackets or braces outnumber the opening ones, return the index
4. remember to subtract the number of newlines