# R74's solution

## to Bob in the Lua Track

Published at Jun 29 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 run the tests, run the command `busted` from within the exercise directory.

## Further information

For more detailed information about the Lua track, including how to get help if you're having trouble, please visit the exercism.io Lua language page.

## 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_spec.lua

``````local bob = require('bob')

describe('bob', function()
it('stating something', function()
local result = bob.hey('Tom-ay-to, tom-aaaah-to.')
assert.are.equals('Whatever', result)
end)

it('shouting', function ()
local result = bob.hey('WATCH OUT!')
assert.are.equals('Whoa, chill out!', result)
end)

local result = bob.hey('Does this cryogenic chamber make me look fat?')
assert.are.equals('Sure', result)
end)

it('talking forcefully', function ()
local result = bob.hey("Let's go make out behind the gym!")
assert.are.equals('Whatever', result)
end)

it('shouting numbers', function ()
local result = bob.hey('1, 2, 3 GO!')
assert.are.equals('Whoa, chill out!', result)
end)

it('shouting with special characters', function ()
local result = bob.hey('ZOMG THE %^*@#\$(*^ ZOMBIES ARE COMING!!11!!1!')
assert.are.equals('Whoa, chill out!', result)
end)

it('silence', function ()
local result = bob.hey('')
assert.are.equals('Fine, be that way.', result)
end)
end)``````
``````function bob(s)
local nothing, question, yell, result

if #s == 0 then
nothing = true
end

if s:find("%?\$") then
question = true
end

for w in s:gmatch("(%a+)") do
if w == w:upper() then
yell = true
break
end
end

if question and yell then
result = "Calm down, I know what I'm doing!"
elseif question then
result = "Sure."
elseif yell then
result = "Whoa, chill out!"
elseif nothing then
result = "Fine. Be that way!"
else
result = "Whatever."
end

return result
end``````