greenfork's solution

to Bob in the Nim Track

Published at May 03 2019 · 0 comments
Instructions
Test suite
Solution

Note:

This exercise has changed since this solution was written.

Bob is a lackadaisical teenager. In conversation, his responses are very limited.

He answers 'Whoa, chill out!' if you yell at him.

He answers 'Calm down, I know what I'm doing!' if you yell a question at him.

He says 'Fine. Be that way!' if you address him without actually saying anything.

He answers 'Whatever.' to anything else.

Bob's conversational partner is a purist when it comes to written communication and always follows normal rules regarding sentence punctuation in English.

Running the tests

To compile and run the tests, just run the following in your exercise directory:

``````\$ nim c -r bob_test.nim
``````

Submitting Exercises

Note that, when trying to submit an exercise, make sure the solution is in the `\$EXERCISM_WORKSPACE/nim/bob` directory.

You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Exercises Directory`.

Source

Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial. http://pine.fm/LearnToProgram/?Chapter=06

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

bob_test.nim

``````import unittest
import bob

# version 1.4.0

suite "Bob":
test "stating something":
check hey("Tom-ay-to, tom-aaaah-to.") == "Whatever."

test "shouting":
check hey("WATCH OUT!") == "Whoa, chill out!"

test "shouting gibberish":
check hey("FCECDFCAAB") == "Whoa, chill out!"

check hey("Does this cryogenic chamber make me look fat?") == "Sure."

check hey("You are, what, like 15?") == "Sure."

check hey("fffbbcbeab?") == "Sure."

test "talking forcefully":
check hey("Let's go make out behind the gym!") == "Whatever."

test "using acronyms in regular speech":
check hey("It's OK if you don't want to go to the DMV.") == "Whatever."

test "forceful question":
check hey("WHAT THE HELL WERE YOU THINKING?") == "Calm down, I know what I'm doing!"

test "shouting numbers":
check hey("1, 2, 3 GO!") == "Whoa, chill out!"

test "no letters":
check hey("1, 2, 3") == "Whatever."

test "question with no letters":
check hey("4?") == "Sure."

test "shouting with special characters":
check hey("ZOMG THE %^*@#\$(*^ ZOMBIES ARE COMING!!11!!1!") == "Whoa, chill out!"

test "shouting with no exclamation mark":
check hey("I HATE THE DMV") == "Whoa, chill out!"

test "statement containing question mark":
check hey("Ending with ? means a question.") == "Whatever."

test "non-letters with question":
check hey(":) ?") == "Sure."

test "prattling on":
check hey("Wait! Hang on. Are you going to be OK?") == "Sure."

test "silence":
check hey("") == "Fine. Be that way!"

test "prolonged silence":
check hey("          ") == "Fine. Be that way!"

test "alternate silence":
check hey("\t\t\t\t\t\t\t\t\t\t") == "Fine. Be that way!"

test "multiple line question":
check hey("\nDoes this cryogenic chamber make me look fat?\nNo.") == "Whatever."

test "starting with whitespace":
check hey("         hmmmmmmm...") == "Whatever."

test "ending with whitespace":
check hey("Okay if like my  spacebar  quite a bit?   ") == "Sure."

test "other whitespace":
check hey("\n\r \t") == "Fine. Be that way!"

test "non-question ending with whitespace":
check hey("This is a statement ending with whitespace      ") == "Whatever."``````
``````import
strutils

func isShout(sentence: string): bool =
result = false
for ch in sentence:
if isLowerAscii(ch): return false
if isUpperAscii(ch): result = true

func isQuestion(sentence: string): bool =
sentence.strip.endsWith('?')

func isSilence(sentence: string): bool =
result = true
for ch in sentence:
if not isSpaceAscii(ch): return false

func hey*(sentence: string): string =
if isSilence(sentence):
result = "Fine. Be that way!"
elif isShout(sentence) and isQuestion(sentence):
result = "Calm down, I know what I'm doing!"
elif isShout(sentence):
result = "Whoa, chill out!"
elif isQuestion(sentence):
result = "Sure."
else:
result = "Whatever."``````