These days, I mostly interview Java programmers, but I still use string tokenization as the basic question and follow up with questions about such as regular expressions and unicode. One of the things that has always surprised me is the amount of variety in the answers. It seems everyone can find different ways of tokenizing strings. So when a colleague said that just about all candidates fail trying the same approach to his basic coding question, I couldn't help but wonder why he was seeing such consistency. The question is to write a function that will print a diamond to the console. The function should take a single integer parameter that will be the width of the diamond. The width must be odd or else the function should print an error.
I thought about it for a bit and had a general sketch of a program within about five minutes. Within another five minutes I had a working implementation in python:
#!/usr/bin/env python import sys def printDiamond(width): ''' Print a diamond to the console. The diamond must have an odd width, if the width is even and error will be printed to stderr and the program will exit. ''' if width % 2 == 0: sys.stderr.write("ERROR: width must be odd\n") sys.exit(1) # Print top half of diamond numSpaces = width / 2 numAsterisks = 1 while numAsterisks <= width: sys.stdout.write(" " * numSpaces) sys.stdout.write("*" * numAsterisks) sys.stdout.write("\n") numSpaces -= 1 numAsterisks += 2 # Print bottom half of dimaond numSpaces = 1 numAsterisks = width - 2 while numAsterisks >= 1: sys.stdout.write(" " * numSpaces) sys.stdout.write("*" * numAsterisks) sys.stdout.write("\n") numSpaces += 1 numAsterisks -= 2 if len(sys.argv) < 2: print "Usage: %s <width>" % sys.argv[0] sys.exit(1) else: printDiamond(int(sys.argv[1]))
(i, j)
. At this point a lot of candidates just get bogged down trying to figure out the math and never step back to think about whether there is an easier way. I suppose the consistency is just that the basic trap is so easy to fall into for this question.
No comments:
Post a Comment