Exercism v3 launches on Sept 1st 2021. Learn more! ๐๐๐

# ajoshguy's solution

## to Bob in the Nim Track

Published at Oct 11 2018 · 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.

Bob answers 'Sure.' if you ask him a question.

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

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!"

test "asking a question":
check hey("Does this cryogenic chamber make me look fat?") == "Sure."

test "asking a numeric question":
check hey("You are, what, like 15?") == "Sure."

test "asking a numeric question":
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 questions":
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 "only numbers":
check hey("1, 2, 3") == "Whatever."

test "question with only numbers":
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 YOU") == "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

const Capitals = { 'A' .. 'Z' }

proc yelling(s: string): bool =
var upper = s.toUpperAscii()
# we have at least one capital and upcasing the string has no
# effect on it
s == upper and find(s, Capitals) != -1

proc hey*(s: string): string =
var s = strip(s)

if s == "":
return "Fine. Be that way!"

if s.yelling():
if s.endsWith("?"):
return "Calm down, I know what I'm doing!"
else:
return "Whoa, chill out!"

if s.endsWith("?"):
return "Sure."

"Whatever."``````