FizzBuzz comes from a game for six to eight year olds, who also don't understand modulus. That's part of the reason it is such a great problem: they fact that you realize "Hey, this is a whole lot easier with modulus" demonstrates that you can reason abstractly. You certainly don't need a mod operator to make it work -- if you're capable of writing a function, you can write divides_evenly_by_3(int number) using facts that every fourth grader knows.
If you prefer, you can substitute a similar problem which doesn't require even fourth grade math. Here's one: write a program which calculates the sum of all numbers between 1 and 1,000 whose digits sum up to 7. Or write a program which takes this post as input and tells me what the 3rd most common letter used was.
That's true enough. But fact is, if someone's ignorant of modulus, I'd say that's scary. Knowing modulus doesn't necessarily demonstrate you have a great grasp of programming. But I think not knowing modulus demonstrates that there's a higher probability you know very little. And fact is, FizzBuzz also filters out all the people who know modulus, but can't figure it out anyway. You definitely don't want those people.
My Python answer for the second question, where `post` is patrio11's post as input:
from collections import defaultdict
from string import ascii_letters
d= collections.defaultdict(int)
for letter in post:
d[letter] += 1
print [letter for letter in sorted(d, key=d.get, reverse=True) if letter in ascii_letters][2]
Any comments on improvement for readability or conciseness?
There are a lot of micro improvements you can do to this. For example, after you find sum() == 7, you can increment x by 9 (since the largest digit in the ones column can be 7, and this takes a deficit of two digits to get back to the rollover -- and then 7 more to get a sum of 7 again).
And frankly I'm not sure if its faster to convert to string and back to int, or if it would be better to just use modulo arithmitic to get the values associated with the ones/tens/hundreds.
In any case, what you have is certainly readable though.
s = "your text here"
import string
d = {}
for i in list(s.lower()):
if i in string.letters:
d[i] = d.setdefault(i, 0) + 1
print sorted(d.keys(), cmp = lambda x, y : cmp(d[x], d[y]), reverse = True)[2]
Edit: See my later response for something using the 'collections' module.
You don't need to do `list(s.lower())`, you can already iterate over a string. Also, instead of converting the whole string to a new lowercase one, which means allocating "a lot" of memory, you can convert each character separately as needed.
If you prefer, you can substitute a similar problem which doesn't require even fourth grade math. Here's one: write a program which calculates the sum of all numbers between 1 and 1,000 whose digits sum up to 7. Or write a program which takes this post as input and tells me what the 3rd most common letter used was.