Skip to content
Merged
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 @@ -226,6 +226,14 @@
"practices": [],
"prerequisites": [],
"difficulty": 4
},
{
"slug": "bob",
"name": "Bob",
"uuid": "c17ed683-e851-4b45-a4a7-f127dadb1b01",
"practices": [],
"prerequisites": [],
"difficulty": 2
}
]
},
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": [
"IsaaG"
],
"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/chap_06.html"
}
13 changes: 13 additions & 0 deletions exercises/practice/bob/.meta/example.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
func response(message: String) -> String:
message = message.strip_edges()
if message == "":
return "Fine. Be that way!"
if message.ends_with("?"):
if message.to_upper() == message and message.to_upper() != message.to_lower():
return "Calm down, I know what I'm doing!"
return "Sure."
if message.to_upper() == message.to_lower():
return "Whatever."
if message.to_upper() == message:
return "Whoa, chill out!"
return "Whatever."
7 changes: 7 additions & 0 deletions exercises/practice/bob/.meta/template.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{% for case in cases %}
func test_{{ case["func_name"] }}(solution_script):
var want = "{{ case["expected"] }}"
var got = solution_script.{{ case["property"] }}("{{ case["input"]["heyBob"] }}")
return [got, want]

{% endfor %}
93 changes: 93 additions & 0 deletions exercises/practice/bob/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# 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.

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

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

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

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

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

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

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

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

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

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

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

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

[2c7278ac-f955-4eb4-bf8f-e33eb4116a15]
description = "multiple line question"
reimplements = "66953780-165b-4e7e-8ce3-4bcb80b6385a"

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

[3c954328-86fb-4c71-8961-e18d6a5e2517]
description = "shouting a statement containing a question mark"

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

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

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

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

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

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

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

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

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

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

[5371ef75-d9ea-4103-bcfa-2da973ddec1b]
description = "starting with 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(message: String) -> String:
pass
157 changes: 157 additions & 0 deletions exercises/practice/bob/bob_test.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
func test_asking_a_question(solution_script):
var want = "Sure."
var got = solution_script.response("Does this cryogenic chamber make me look fat?")
return [got, want]


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


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


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


func test_stating_something(solution_script):
var want = "Whatever."
var got = solution_script.response("Tom-ay-to, tom-aaaah-to.")
return [got, want]


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


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


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


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


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


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


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


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


func test_shouting_a_statement_containing_a_question_mark(solution_script):
var want = "Whoa, chill out!"
var got = solution_script.response("DO LIONS EAT PEOPLE? AHHHHH.")
return [got, want]


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


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


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


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


func test_alternate_silence(solution_script):
var want = "Fine. Be that way!"
var got = solution_script.response(" ")
return [got, want]


func test_other_whitespace(solution_script):
var want = "Fine. Be that way!"
var got = solution_script.response("
")
return [got, want]


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


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


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


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


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


func test_non_question_ending_with_whitespace(solution_script):
var want = "Whatever."
var got = solution_script.response("This is a statement ending with whitespace ")
return [got, want]
Expand Down
Loading