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

docs: small fixes for doctor-data instructions #749

Closed
wants to merge 2 commits into from
Closed
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
3 changes: 2 additions & 1 deletion exercises/concept/doctor-data/.docs/instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ You aced your job interview through your knowledge of C++ and [von Neumann probe
As you have seen a lot of test files, your new boss wants you to recreate the respective source and header files from some test code the company has recently recovered.

In this exercise, you are going to recreate lost files.
Currently the content of the files is unusable garbage data.

~~~~exercism/note
The workflow of this concept exercise is very similar to the structure of Exercism's practice exercises.
Expand All @@ -31,7 +32,7 @@ The constructor can apparently be called with two or three arguments.
The first argument seems to be of type `string`, the second one is a number.
It is possible to initialize the `Vessel` class with a third argument.
The third argument comes from a `star_map` namespace.
It is an enumerator of type `System`.
It is an `enum` of type `System`.
You even got one of the enumerations: `BetaHydri`.

Prepare the source and header files with your discovered information.
Expand Down
2 changes: 2 additions & 0 deletions exercises/concept/doctor-data/doctor_data.cpp
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
// ERROR: FILE CORRUPTED. Please supply valid C++ Code.

hp4,ölacöiömthö%Äsmaö%Äsubö(311040ö%Äspaö%Äaddö(311040ö%Ädacöiömthö%Äcountö.hpt,hp4ö%Äxctöhd2ö%Ädacöiöma1
hp2,öjmpö.
2 changes: 2 additions & 0 deletions exercises/concept/doctor-data/doctor_data.h
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
// ERROR: FILE CORRUPTED. Please supply valid C++ Code.

hp1,üapöhp2ö%Äcountöiöma1,öhp2ö%Älawöhp3öö/önextöstepö%Ädacöiöml1ö%Älawö7ö%Ädacöiömb1ö%Ärandomöö%Äscrö9sö%Äsirö9sö%Äxctöhr1ö%Äaddöiömx1ö%Ädacöiömx1ö%Äswapö%Äaddöiömy1ö%Ädacöiömy1ö%Ärandomö%Äscrö9sö%Äsirö9sö%Äxctöhr2ö%Ädacöiömdyö%Ädioöiömdxö%Äsetupö.hpt,3ö%Älacöranö%Ädacöiömth
18 changes: 18 additions & 0 deletions exercises/practice/allergies2/.docs/instructions.append.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Instructions append

## Some Additional Notes for C++ Implementation

This exercise uses the [`unordered_set`][set]
You probably need the [`emplace`][emplace] function to add elements to the set.

You might stumble across [`const`][const] because it has not come up in the syllabus yet.
When it prefixes a variable, it works like a safeguard.
`const` variables cannot be changed.
This exercise also features the [`unsigned`][unsigned] keyword.
This doubles the range of the prefixed integer, but will not let it turn negative.


[set]: https://en.cppreference.com/w/cpp/container/unordered_set
[emplace]: https://en.cppreference.com/w/cpp/container/vector/emplace
[const]: https://www.learncpp.com/cpp-tutorial/const-variables-and-symbolic-constants/
[unsigned]: https://www.learncpp.com/cpp-tutorial/unsigned-integers-and-why-to-avoid-them/
27 changes: 27 additions & 0 deletions exercises/practice/allergies2/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Instructions

Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.

An allergy test produces a single numeric score which contains the information about all the allergies the person has (that they were tested for).

The list of items (and their value) that were tested are:

- eggs (1)
- peanuts (2)
- shellfish (4)
- strawberries (8)
- tomatoes (16)
- chocolate (32)
- pollen (64)
- cats (128)

So if Tom is allergic to peanuts and chocolate, he gets a score of 34.

Now, given just that score of 34, your program should be able to say:

- Whether Tom is allergic to any one of those allergens listed above.
- All the allergens Tom is allergic to.

Note: a given score may include allergens **not** listed above (i.e. allergens that score 256, 512, 1024, etc.).
Your program should ignore those components of the score.
For example, if the allergy score is 257, your program should only report the eggs (1) allergy.
28 changes: 28 additions & 0 deletions exercises/practice/allergies2/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"authors": [
"vivshaw"
],
"contributors": [
"elyashiv",
"jackhughesweb",
"KevinWMatthews",
"LegalizeAdulthood",
"patricksjackson"
],
"files": {
"solution": [
"allergies.cpp",
"allergies.h"
],
"test": [
"allergies_test.cpp"
],
"example": [
".meta/example.cpp",
".meta/example.h"
]
},
"blurb": "Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.",
"source": "Exercise by the JumpstartLab team for students at The Turing School of Software and Design.",
"source_url": "https://turing.edu"
}
30 changes: 30 additions & 0 deletions exercises/practice/allergies2/.meta/example.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "allergies.h"

#include <string>
#include <map>
#include <unordered_set>
#include <algorithm>

namespace allergies
{

allergy_test::allergy_test(unsigned int test_result) : result(test_result){}

bool allergy_test::is_allergic_to(std::string const& allergen) const
{
unsigned int allergen_value = allergies::ALLERGENS.at(allergen);
return (result & allergen_value) == allergen_value;
}

std::unordered_set<std::string> allergy_test::get_allergies() const
{
std::unordered_set<std::string> allergies;

for(auto const& entry : allergies::ALLERGENS)
if((result & entry.second) == entry.second)
allergies.insert(entry.first);

return allergies;
}

}
36 changes: 36 additions & 0 deletions exercises/practice/allergies2/.meta/example.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#if !defined(ALLERGIES_H)
#define ALLERGIES_H

#include <string>
#include <map>
#include <unordered_set>

namespace allergies
{

std::map<std::string, unsigned int> const ALLERGENS {
{"eggs", 1},
{"peanuts", 2},
{"shellfish", 4},
{"strawberries", 8},
{"tomatoes", 16},
{"chocolate", 32},
{"pollen", 64},
{"cats", 128}
};

class allergy_test
{
public:
allergy_test(unsigned int test_result);

bool is_allergic_to(std::string const& allergen) const;
std::unordered_set<std::string> get_allergies() const;

private:
unsigned int const result;
};

}

#endif
160 changes: 160 additions & 0 deletions exercises/practice/allergies2/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# 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.

[17fc7296-2440-4ac4-ad7b-d07c321bc5a0]
description = "testing for eggs allergy -> not allergic to anything"

[07ced27b-1da5-4c2e-8ae2-cb2791437546]
description = "testing for eggs allergy -> allergic only to eggs"

[5035b954-b6fa-4b9b-a487-dae69d8c5f96]
description = "testing for eggs allergy -> allergic to eggs and something else"

[64a6a83a-5723-4b5b-a896-663307403310]
description = "testing for eggs allergy -> allergic to something, but not eggs"

[90c8f484-456b-41c4-82ba-2d08d93231c6]
description = "testing for eggs allergy -> allergic to everything"

[d266a59a-fccc-413b-ac53-d57cb1f0db9d]
description = "testing for peanuts allergy -> not allergic to anything"

[ea210a98-860d-46b2-a5bf-50d8995b3f2a]
description = "testing for peanuts allergy -> allergic only to peanuts"

[eac69ae9-8d14-4291-ac4b-7fd2c73d3a5b]
description = "testing for peanuts allergy -> allergic to peanuts and something else"

[9152058c-ce39-4b16-9b1d-283ec6d25085]
description = "testing for peanuts allergy -> allergic to something, but not peanuts"

[d2d71fd8-63d5-40f9-a627-fbdaf88caeab]
description = "testing for peanuts allergy -> allergic to everything"

[b948b0a1-cbf7-4b28-a244-73ff56687c80]
description = "testing for shellfish allergy -> not allergic to anything"

[9ce9a6f3-53e9-4923-85e0-73019047c567]
description = "testing for shellfish allergy -> allergic only to shellfish"

[b272fca5-57ba-4b00-bd0c-43a737ab2131]
description = "testing for shellfish allergy -> allergic to shellfish and something else"

[21ef8e17-c227-494e-8e78-470a1c59c3d8]
description = "testing for shellfish allergy -> allergic to something, but not shellfish"

[cc789c19-2b5e-4c67-b146-625dc8cfa34e]
description = "testing for shellfish allergy -> allergic to everything"

[651bde0a-2a74-46c4-ab55-02a0906ca2f5]
description = "testing for strawberries allergy -> not allergic to anything"

[b649a750-9703-4f5f-b7f7-91da2c160ece]
description = "testing for strawberries allergy -> allergic only to strawberries"

[50f5f8f3-3bac-47e6-8dba-2d94470a4bc6]
description = "testing for strawberries allergy -> allergic to strawberries and something else"

[23dd6952-88c9-48d7-a7d5-5d0343deb18d]
description = "testing for strawberries allergy -> allergic to something, but not strawberries"

[74afaae2-13b6-43a2-837a-286cd42e7d7e]
description = "testing for strawberries allergy -> allergic to everything"

[c49a91ef-6252-415e-907e-a9d26ef61723]
description = "testing for tomatoes allergy -> not allergic to anything"

[b69c5131-b7d0-41ad-a32c-e1b2cc632df8]
description = "testing for tomatoes allergy -> allergic only to tomatoes"

[1ca50eb1-f042-4ccf-9050-341521b929ec]
description = "testing for tomatoes allergy -> allergic to tomatoes and something else"

[e9846baa-456b-4eff-8025-034b9f77bd8e]
description = "testing for tomatoes allergy -> allergic to something, but not tomatoes"

[b2414f01-f3ad-4965-8391-e65f54dad35f]
description = "testing for tomatoes allergy -> allergic to everything"

[978467ab-bda4-49f7-b004-1d011ead947c]
description = "testing for chocolate allergy -> not allergic to anything"

[59cf4e49-06ea-4139-a2c1-d7aad28f8cbc]
description = "testing for chocolate allergy -> allergic only to chocolate"

[b0a7c07b-2db7-4f73-a180-565e07040ef1]
description = "testing for chocolate allergy -> allergic to chocolate and something else"

[f5506893-f1ae-482a-b516-7532ba5ca9d2]
description = "testing for chocolate allergy -> allergic to something, but not chocolate"

[02debb3d-d7e2-4376-a26b-3c974b6595c6]
description = "testing for chocolate allergy -> allergic to everything"

[17f4a42b-c91e-41b8-8a76-4797886c2d96]
description = "testing for pollen allergy -> not allergic to anything"

[7696eba7-1837-4488-882a-14b7b4e3e399]
description = "testing for pollen allergy -> allergic only to pollen"

[9a49aec5-fa1f-405d-889e-4dfc420db2b6]
description = "testing for pollen allergy -> allergic to pollen and something else"

[3cb8e79f-d108-4712-b620-aa146b1954a9]
description = "testing for pollen allergy -> allergic to something, but not pollen"

[1dc3fe57-7c68-4043-9d51-5457128744b2]
description = "testing for pollen allergy -> allergic to everything"

[d3f523d6-3d50-419b-a222-d4dfd62ce314]
description = "testing for cats allergy -> not allergic to anything"

[eba541c3-c886-42d3-baef-c048cb7fcd8f]
description = "testing for cats allergy -> allergic only to cats"

[ba718376-26e0-40b7-bbbe-060287637ea5]
description = "testing for cats allergy -> allergic to cats and something else"

[3c6dbf4a-5277-436f-8b88-15a206f2d6c4]
description = "testing for cats allergy -> allergic to something, but not cats"

[1faabb05-2b98-4995-9046-d83e4a48a7c1]
description = "testing for cats allergy -> allergic to everything"

[f9c1b8e7-7dc5-4887-aa93-cebdcc29dd8f]
description = "list when: -> no allergies"

[9e1a4364-09a6-4d94-990f-541a94a4c1e8]
description = "list when: -> just eggs"

[8851c973-805e-4283-9e01-d0c0da0e4695]
description = "list when: -> just peanuts"

[2c8943cb-005e-435f-ae11-3e8fb558ea98]
description = "list when: -> just strawberries"

[6fa95d26-044c-48a9-8a7b-9ee46ec32c5c]
description = "list when: -> eggs and peanuts"

[19890e22-f63f-4c5c-a9fb-fb6eacddfe8e]
description = "list when: -> more than eggs but not peanuts"

[4b68f470-067c-44e4-889f-c9fe28917d2f]
description = "list when: -> lots of stuff"

[0881b7c5-9efa-4530-91bd-68370d054bc7]
description = "list when: -> everything"

[12ce86de-b347-42a0-ab7c-2e0570f0c65b]
description = "list when: -> no allergen score parts"

[93c2df3e-4f55-4fed-8116-7513092819cd]
description = "list when: -> no allergen score parts without highest valid score"
64 changes: 64 additions & 0 deletions exercises/practice/allergies2/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Get the exercise name from the current directory
get_filename_component(exercise ${CMAKE_CURRENT_SOURCE_DIR} NAME)

# Basic CMake project
cmake_minimum_required(VERSION 3.5.1)

# Name the project after the exercise
project(${exercise} CXX)

# Get a source filename from the exercise name by replacing -'s with _'s
string(REPLACE "-" "_" file ${exercise})

# Implementation could be only a header
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.cpp)
set(exercise_cpp ${file}.cpp)
else()
set(exercise_cpp "")
endif()

# Use the common Catch library?
if(EXERCISM_COMMON_CATCH)
# For Exercism track development only
add_executable(${exercise} ${file}_test.cpp ${exercise_cpp} ${file}.h $<TARGET_OBJECTS:catchlib>)
elseif(EXERCISM_TEST_SUITE)
# The Exercism test suite is being run, the Docker image already
# includes a pre-built version of Catch.
find_package(Catch2 REQUIRED)
add_executable(${exercise} ${file}_test.cpp ${exercise_cpp} ${file}.h)
target_link_libraries(${exercise} PRIVATE Catch2::Catch2WithMain)
# When Catch is installed system wide we need to include a different
# header, we need this define to use the correct one.
target_compile_definitions(${exercise} PRIVATE EXERCISM_TEST_SUITE)
else()
# Build executable from sources and headers
add_executable(${exercise} ${file}_test.cpp ${exercise_cpp} ${file}.h test/tests-main.cpp)
endif()

set_target_properties(${exercise} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED OFF
CXX_EXTENSIONS OFF
)

set(CMAKE_BUILD_TYPE Debug)

if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(GNU|Clang)")
set_target_properties(${exercise} PROPERTIES
COMPILE_FLAGS "-Wall -Wextra -Wpedantic -Werror"
)
endif()

# Configure to run all the tests?
if(${EXERCISM_RUN_ALL_TESTS})
target_compile_definitions(${exercise} PRIVATE EXERCISM_RUN_ALL_TESTS)
endif()

# Tell MSVC not to warn us about unchecked iterators in debug builds
if(${MSVC})
set_target_properties(${exercise} PROPERTIES
COMPILE_DEFINITIONS_DEBUG _SCL_SECURE_NO_WARNINGS)
endif()

# Run the tests on every build
add_custom_target(test_${exercise} ALL DEPENDS ${exercise} COMMAND ${exercise})
Loading
Loading