ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# elyashiv's solution

## to Bob in the Lua Track

Published at Jul 18 2020 · 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 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)

it('asking a question', function ()
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)``````
``````local bob = {}

local function is_shout(say)
return not say:find("%l")
end

local function is_question(say)
return say:match('?\$')
end

function bob.hey(say)
if say == '' then
return 'Fine, be that way.'
end
if is_shout(say) then
return 'Whoa, chill out!'
end
if is_question(say) then
return 'Sure'
end
return 'Whatever'
end

return bob``````