Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[New Exercise]: Bob #58

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,14 @@
"prerequisites": [],
"difficulty": 2
},
{
"slug": "bob",
"name": "Bob",
"uuid": "e635e0f6-8265-412f-b36e-e10b2079b74f",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "luhn",
"name": "Luhn",
Expand Down
19 changes: 19 additions & 0 deletions exercises/practice/bob/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Instructions

Your task is to determine what Bob will reply to someone when they say something to him or ask him a question.

Bob only ever answers one of five things:

- **"Sure."**
This is his response if you ask him a question, such as "How are you?"
The convention used for questions is that it ends with a question mark.
- **"Whoa, chill out!"**
This is his answer if you YELL AT HIM.
The convention used for yelling is ALL CAPITAL LETTERS.
- **"Calm down, I know what I'm doing!"**
This is what he says if you yell a question at him.
- **"Fine. Be that way!"**
This is how he responds to silence.
The convention used for silence is nothing, or various combinations of whitespace characters.
- **"Whatever."**
This is what he answers to anything else.
10 changes: 10 additions & 0 deletions exercises/practice/bob/.docs/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Introduction

Bob is a [lackadaisical][] teenager.
He likes to think that he's very cool.
And he definitely doesn't get excited about things.
That wouldn't be cool.

When people talk to him, his responses are pretty limited.

[lackadaisical]: https://www.collinsdictionary.com/dictionary/english/lackadaisical
19 changes: 19 additions & 0 deletions exercises/practice/bob/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"glaxxie"
],
"files": {
"solution": [
"bob.gd"
],
"test": [
"bob_test.gd"
],
"example": [
".meta/example.gd"
]
},
"blurb": "Bob is a lackadaisical teenager. In conversation, his responses are very limited.",
"source": "Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial.",
"source_url": "https://pine.fm/LearnToProgram/?Chapter=06"
}
14 changes: 14 additions & 0 deletions exercises/practice/bob/.meta/example.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
func response(greeting):
var trimmed = greeting.strip_edges()
var test_chars = RegEx.new()
test_chars.compile("\\p{L}")

var is_silence = trimmed.is_empty()
var is_yelling = test_chars.search(trimmed) && (trimmed.to_upper() == trimmed)
var is_question = trimmed.ends_with("?")

if is_yelling && is_question: return "Calm down, I know what I'm doing!"
if is_question: return "Sure."
if is_yelling: return "Whoa, chill out!"
if is_silence: return "Fine. Be that way!"
return "Whatever."
85 changes: 85 additions & 0 deletions exercises/practice/bob/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.

[e162fead-606f-437a-a166-d051915cea8e]
description = "stating something"

[73a966dc-8017-47d6-bb32-cf07d1a5fcd9]
description = "shouting"

[d6c98afd-df35-4806-b55e-2c457c3ab748]
description = "shouting gibberish"

[8a2e771d-d6f1-4e3f-b6c6-b41495556e37]
description = "asking a question"

[81080c62-4e4d-4066-b30a-48d8d76920d9]
description = "asking a numeric question"

[2a02716d-685b-4e2e-a804-2adaf281c01e]
description = "asking gibberish"

[c02f9179-ab16-4aa7-a8dc-940145c385f7]
description = "talking forcefully"

[153c0e25-9bb5-4ec5-966e-598463658bcd]
description = "using acronyms in regular speech"

[a5193c61-4a92-4f68-93e2-f554eb385ec6]
description = "forceful question"

[a20e0c54-2224-4dde-8b10-bd2cdd4f61bc]
description = "shouting numbers"

[f7bc4b92-bdff-421e-a238-ae97f230ccac]
description = "no letters"

[bb0011c5-cd52-4a5b-8bfb-a87b6283b0e2]
description = "question with no letters"

[496143c8-1c31-4c01-8a08-88427af85c66]
description = "shouting with special characters"

[e6793c1c-43bd-4b8d-bc11-499aea73925f]
description = "shouting with no exclamation mark"

[aa8097cc-c548-4951-8856-14a404dd236a]
description = "statement containing question mark"

[9bfc677d-ea3a-45f2-be44-35bc8fa3753e]
description = "non-letters with question"

[8608c508-f7de-4b17-985b-811878b3cf45]
description = "prattling on"

[bc39f7c6-f543-41be-9a43-fd1c2f753fc0]
description = "silence"

[d6c47565-372b-4b09-b1dd-c40552b8378b]
description = "prolonged silence"

[4428f28d-4100-4d85-a902-e5a78cb0ecd3]
description = "alternate silence"

[66953780-165b-4e7e-8ce3-4bcb80b6385a]
description = "multiple line question"

[5371ef75-d9ea-4103-bcfa-2da973ddec1b]
description = "starting with whitespace"

[05b304d6-f83b-46e7-81e0-4cd3ca647900]
description = "ending with whitespace"

[72bd5ad3-9b2f-4931-a988-dce1f5771de2]
description = "other whitespace"

[12983553-8601-46a8-92fa-fcaa3bc4a2a0]
description = "non-question ending with whitespace"
2 changes: 2 additions & 0 deletions exercises/practice/bob/bob.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
func response(greeting):
pass
149 changes: 149 additions & 0 deletions exercises/practice/bob/bob_test.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
func test_stating_something(solution_script):
var value = "Tom-ay-to, tom-aaaah-to."
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_shouting(solution_script):
var value = "WATCH OUT!"
var expected = "Whoa, chill out!"
return [solution_script.response(value), expected]


func test_shouting_gibberish(solution_script):
var value = "FCECDFCAAB"
var expected = "Whoa, chill out!"
return [solution_script.response(value), expected]


func test_asking_a_question(solution_script):
var value = "Does this cryogenic chamber make me look fat?"
var expected = "Sure."
return [solution_script.response(value), expected]


func test_asking_a_numeric_question(solution_script):
var value = "You are, what, like 15?"
var expected = "Sure."
return [solution_script.response(value), expected]


func test_asking_gibberish(solution_script):
var value = "fffbbcbeab?"
var expected = "Sure."
return [solution_script.response(value), expected]


func test_talking_forcefully(solution_script):
var value = "Hi there!"
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_using_acronyms_in_regular_speech(solution_script):
var value = "It's OK if you don't want to go work for NASA."
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_forceful_question(solution_script):
var value = "WHAT'S GOING ON?"
var expected = "Calm down, I know what I'm doing!"
return [solution_script.response(value), expected]


func test_shouting_numbers(solution_script):
var value = "1, 2, 3 GO!"
var expected = "Whoa, chill out!"
return [solution_script.response(value), expected]


func test_no_letters(solution_script):
var value = "1, 2, 3"
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_question_with_no_letters(solution_script):
var value = "4?"
var expected = "Sure."
return [solution_script.response(value), expected]


func test_shouting_with_special_characters(solution_script):
var value = "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!"
var expected = "Whoa, chill out!"
return [solution_script.response(value), expected]


func test_shouting_with_no_exclamation_mark(solution_script):
var value = "I HATE THE DENTIST"
var expected = "Whoa, chill out!"
return [solution_script.response(value), expected]


func test_statement_containing_question_mark(solution_script):
var value = "Ending with ? means a question."
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_non_letters_with_question(solution_script):
var value = ":) ?"
var expected = "Sure."
return [solution_script.response(value), expected]


func test_prattling_on(solution_script):
var value = "Wait! Hang on. Are you going to be OK?"
var expected = "Sure."
return [solution_script.response(value), expected]


func test_silence(solution_script):
var value = ""
var expected = "Fine. Be that way!"
return [solution_script.response(value), expected]


func test_prolonged_silence(solution_script):
var value = " "
var expected = "Fine. Be that way!"
return [solution_script.response(value), expected]


func test_alternate_silence(solution_script):
var value = "\t\t\t\t\t\t\t\t\t\t"
var expected = "Fine. Be that way!"
return [solution_script.response(value), expected]


func test_multiple_line_question(solution_script):
var value = "\nDoes this cryogenic chamber make me look fat?\nNo."
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_starting_with_whitespace(solution_script):
var value = " hmmmmmmm..."
var expected = "Whatever."
return [solution_script.response(value), expected]


func test_ending_with_whitespace(solution_script):
var value = "Okay if like my spacebar quite a bit? "
var expected = "Sure."
return [solution_script.response(value), expected]


func test_other_whitespace(solution_script):
var value = "\n\r \t"
var expected = "Fine. Be that way!"
return [solution_script.response(value), expected]


func test_non_question_ending_with_whitespace(solution_script):
var value = "This is a statement ending with whitespace "
var expected = "Whatever."
return [solution_script.response(value), expected]