I Before E Rule — 363[Easy]
“I before E except after C” is perhaps the most famous English spelling rule. For the purpose of this challenge, the rule says:
- if “ei” appears in a word, it must immediately follow “c”.
- If “ie” appears in a word, it must not immediately follow “c”.
So how do we approach this problem? We have 2 in total. We have the main challenge, and we’re provided with the following list list: “a”,”zombie”,”transceiver”,”veil”, and “icier”; however, after that we have a larger challenge that uses the following text file with a lot more names in it.
Short rundown how I handled this script, or to be more precise, the check function.
- From the start, I only care if the word is bad (breaks a rule)
- There is an optional character just in case you want to make your own rule in the future, it’s an optional param, so it is defaulted to “c“
- I make use of the find function to see if the “ei” exists in the string–failure to find returns a -1
- Check the bad case first. If it’s found (icier for example) and increase the bad counter.
- Next we check to see if “ei” was found in the word. If it was, we check to see if it’s a good case–transceiver for example
- If that bad count is not zero, we return false, and handle it on the main thread.
def check(inStr, special = "c"): #search for ei badCount = 0 ei = inStr.find("ei") good = inStr.find(special + "ei") bad = inStr.find(special + "ie") if(bad > -1): badCount = badCount + 1 if(ei > -1): if(good == -1): badCount = badCount + 1 if(badCount > 0): return False else: return True if __name__ == "__main__": print "# Challenge" wordlist = ["a","zombie","transceiver","veil","icier"] for word in wordlist: exe = check(word.lower()) print "check(\"" + word + "\") =>" + str(exe) print "# Optional Bonus 1" exceptions = 0 with open("enable1.txt") as f: for line in f: exe = check(line.lower()) if(exe == False): exceptions += 1 print "I before E except after C Exceptions: " + str(exceptions)