Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
16b8103
high-scores: OOP HINTS (#1708)
BethanyG Apr 4, 2019
f34e328
knapsack: implement exercise (#1740)
omer-g Apr 4, 2019
db120c5
resistor-colors: rename to resistor-color-duo
cmccandless Apr 5, 2019
1a803f0
Merge pull request #1741 from cmccandless/resistor-colors/rename-resi…
cmccandless Apr 5, 2019
e034295
resistor-color-duo: regenerate README to apply rename
cmccandless Apr 5, 2019
e7760a1
Move all active exercises before deprecated ones in config.json
cmccandless Apr 5, 2019
a630d09
Merge branch 'master' into resistor-colors/rename-resistor-color-duo
cmccandless Apr 5, 2019
34a3fa4
Merge pull request #1742 from cmccandless/resistor-colors/rename-resi…
cmccandless Apr 5, 2019
3f2d29f
Merge branch 'master' into config_json/move-active-before-deprecated
cmccandless Apr 5, 2019
60e2628
Merge pull request #1743 from cmccandless/config_json/move-active-bef…
cmccandless Apr 5, 2019
86be10e
bracket-push: rename to matching-brackets
cmccandless Apr 15, 2019
8908698
Merge pull request #1750 from cmccandless/bracket-push/rename-matchin…
cmccandless Apr 15, 2019
ccee45e
check-test-version.py: handle missing canonical data
cmccandless Apr 15, 2019
4f0ea6f
Merge branch 'master' into check-test-version/handle-missing-data-file
cmccandless Apr 15, 2019
54827a8
Merge pull request #1759 from cmccandless/check-test-version/handle-m…
cmccandless Apr 15, 2019
222c029
sgf-parsing: regenerate README (#1761)
cmccandless Apr 15, 2019
0aa3391
Remove N-Parsons from maintainers list
Apr 20, 2019
381ec6e
Merge branch 'master' into master
Dog Apr 24, 2019
839636c
Update copyright in license (#1765)
Apr 24, 2019
3c4216f
Merge branch 'master' into master
Dog Apr 25, 2019
f5d312d
Add class HINTS to Matrix. (#1766)
simmol Apr 25, 2019
3cc1eef
Merge branch 'master' into master
Dog Apr 25, 2019
1aff651
Merge pull request #1763 from N-Parsons/master
Dog Apr 26, 2019
4a85fe0
luhn: update tests to v1.5.0 (#1767)
xitanggg Apr 29, 2019
534ceae
triangle: update tests to v1.2.1 (#1757) (#1769)
xitanggg Apr 29, 2019
93ceb8f
alphametics: sync with problem-specifications (#1768)
sukovanej May 1, 2019
3d66f2b
armstrong-numbers: sync with problem-specifications (#1771)
sukovanej May 2, 2019
f1e3603
queen-attack: update tests to v2.3.0 (#1775)
xitanggg May 3, 2019
839e3fe
resistor-color-duo: update tests to v2.0.0 (#1773)
xitanggg May 3, 2019
89bb17a
Simplify High-scores exercise. Replace Class with functions (#1764)
simmol May 3, 2019
09920dd
darts: update tests to v2.0.0 (#1774)
xitanggg May 6, 2019
8a23959
Changed tournament_tests files (#1776)
spencer51324312 May 8, 2019
ec506df
allergies: update tests to v2.0.0 (#1777)
spencer51324312 May 9, 2019
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ bin/configlet
bin/configlet.exe
.idea/
.cache
.pytest_cache
__pycache__
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2017 Exercism, Inc
Copyright (c) 2019 Exercism

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
6 changes: 5 additions & 1 deletion bin/check-test-version.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,5 +323,9 @@ def check_test_version(
if opts.ignore and exercise in opts.ignore:
continue
if os.path.isdir(os.path.join('exercises', exercise)):
result = check_test_version(exercise, **kwargs) and result
try:
result = check_test_version(exercise, **kwargs) and result
except FileNotFoundError as e:
print(str(e))
result = False
sys.exit(0 if result else 1)
54 changes: 33 additions & 21 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,7 @@
]
},
{
"slug": "bracket-push",
"slug": "matching-brackets",
"uuid": "45229a7c-6703-4240-8287-16645881a043",
"core": false,
"unlocked_by": "isogram",
Expand Down Expand Up @@ -1446,6 +1446,38 @@
"math"
]
},
{
"slug": "resistor-color",
"uuid": "d17bee9c-e803-4745-85ea-864f255fb04e",
"core": false,
"unlocked_by": null,
"difficulty": 1,
"topics": [
"arrays"
]
},
{
"slug": "resistor-color-duo",
"uuid": "089f06a6-0759-479c-8c00-d699525a1e22",
"core": false,
"unlocked_by": null,
"difficulty": 1,
"topics": [
"arrays"
]
},
{
"slug": "knapsack",
"uuid": "b0301d0b-d97a-4043-bd82-ba1edf8c1b16",
"core": false,
"unlocked_by": "clock",
"difficulty": 5,
"topics": [
"algorithms",
"lists",
"loops"
]
},
{
"slug": "accumulate",
"uuid": "e7351e8e-d3ff-4621-b818-cd55cf05bffd",
Expand Down Expand Up @@ -1544,26 +1576,6 @@
"difficulty": 0,
"topics": null,
"deprecated": true
},
{
"slug": "resistor-color",
"uuid": "d17bee9c-e803-4745-85ea-864f255fb04e",
"core": false,
"unlocked_by": null,
"difficulty": 1,
"topics": [
"arrays"
]
},
{
"slug": "resistor-colors",
"uuid": "089f06a6-0759-479c-8c00-d699525a1e22",
"core": false,
"unlocked_by": null,
"difficulty": 1,
"topics": [
"arrays"
]
}
]
}
10 changes: 0 additions & 10 deletions config/maintainers.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,6 @@
"avatar_url": null,
"bio": "I can not only fetch JSON, but parse it too."
},
{
"github_username": "N-Parsons",
"alumnus": false,
"show_on_website": true,
"name": "Nathan Parsons",
"link_text": null,
"link_url": null,
"avatar_url": null,
"bio": "Python fits with how I think and allows me to quickly write powerful, maintainable, and extensible code."
},
{
"github_username": "m-a-ge",
"alumnus": false,
Expand Down
2 changes: 1 addition & 1 deletion exercises/allergies/allergies.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ class Allergies(object):
def __init__(self, score):
pass

def is_allergic_to(self, item):
def allergic_to(self, item):
pass

@property
Expand Down
163 changes: 131 additions & 32 deletions exercises/allergies/allergies_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,62 +7,161 @@
unittest.TestCase.assertCountEqual = unittest.TestCase.assertItemsEqual


# Tests adapted from `problem-specifications//canonical-data.json` @ v1.2.0
# Tests adapted from `problem-specifications//canonical-data.json` @ v2.0.0

class AllergiesTest(unittest.TestCase):
def test_no_allergies_means_not_allergic(self):
allergies = Allergies(0)
self.assertIs(allergies.is_allergic_to('peanuts'), False)
self.assertIs(allergies.is_allergic_to('cats'), False)
self.assertIs(allergies.is_allergic_to('strawberries'), False)

def test_is_allergic_to_eggs(self):
self.assertIs(Allergies(1).is_allergic_to('eggs'), True)

def test_allergic_to_eggs_in_addition_to_other_stuff(self):
allergies = Allergies(5)
self.assertIs(allergies.is_allergic_to('eggs'), True)
self.assertIs(allergies.is_allergic_to('shellfish'), True)
self.assertIs(allergies.is_allergic_to('strawberries'), False)

def test_allergic_to_strawberries_but_not_peanuts(self):
allergies = Allergies(9)
self.assertIs(allergies.is_allergic_to('eggs'), True)
self.assertIs(allergies.is_allergic_to('peanuts'), False)
self.assertIs(allergies.is_allergic_to('shellfish'), False)
self.assertIs(allergies.is_allergic_to('strawberries'), True)

def test_no_allergies_at_all(self):

def test_eggs_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("eggs"), False)

def test_allergic_only_to_eggs(self):
self.assertIs(Allergies(1).allergic_to("eggs"), True)

def test_allergic_to_eggs_and_something_else(self):
self.assertIs(Allergies(3).allergic_to("eggs"), True)

def test_allergic_to_something_but_not_eggs(self):
self.assertIs(Allergies(2).allergic_to("eggs"), False)

def test_eggs_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("eggs"), True)

def test_peanuts_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("peanuts"), False)

def test_allergic_only_to_peanuts(self):
self.assertIs(Allergies(2).allergic_to("peanuts"), True)

def test_allergic_to_peanuts_and_something_else(self):
self.assertIs(Allergies(7).allergic_to("peanuts"), True)

def test_allergic_to_something_but_not_peanuts(self):
self.assertIs(Allergies(5).allergic_to("peanuts"), False)

def test_peanuts_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("peanuts"), True)

def test_shellfish_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("shellfish"), False)

def test_allergic_only_to_shellfish(self):
self.assertIs(Allergies(4).allergic_to("shellfish"), True)

def test_allergic_to_shellfish_and_something_else(self):
self.assertIs(Allergies(14).allergic_to("shellfish"), True)

def test_allergic_to_something_but_not_shellfish(self):
self.assertIs(Allergies(10).allergic_to("shellfish"), False)

def test_shellfish_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("shellfish"), True)

def test_strawberries_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("strawberries"), False)

def test_allergic_only_to_strawberries(self):
self.assertIs(Allergies(8).allergic_to("strawberries"), True)

def test_allergic_to_strawberries_and_something_else(self):
self.assertIs(Allergies(28).allergic_to("strawberries"), True)

def test_allergic_to_something_but_not_strawberries(self):
self.assertIs(Allergies(20).allergic_to("strawberries"), False)

def test_strawberries_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("strawberries"), True)

def test_tomatoes_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("tomatoes"), False)

def test_allergic_only_to_tomatoes(self):
self.assertIs(Allergies(16).allergic_to("tomatoes"), True)

def test_allergic_to_tomatoes_and_something_else(self):
self.assertIs(Allergies(56).allergic_to("tomatoes"), True)

def test_allergic_to_something_but_not_tomatoes(self):
self.assertIs(Allergies(40).allergic_to("tomatoes"), False)

def test_tomatoes_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("tomatoes"), True)

def test_chocolate_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("chocolate"), False)

def test_allergic_only_to_chocolate(self):
self.assertIs(Allergies(32).allergic_to("chocolate"), True)

def test_allergic_to_chocolate_and_something_else(self):
self.assertIs(Allergies(112).allergic_to("chocolate"), True)

def test_allergic_to_something_but_not_chocolate(self):
self.assertIs(Allergies(80).allergic_to("chocolate"), False)

def test_chocolate_alergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("chocolate"), True)

def test_pollen_not_alergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("pollen"), False)

def test_allergic_only_to_pollen(self):
self.assertIs(Allergies(64).allergic_to("pollen"), True)

def test_allergic_to_pollen_and_something_else(self):
self.assertIs(Allergies(224).allergic_to("pollen"), True)

def test_allergic_to_something_but_not_pollen(self):
self.assertIs(Allergies(160).allergic_to("pollen"), False)

def test_pollen_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("pollen"), True)

def test_cats_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("cats"), False)

def test_allergic_only_to_cats(self):
self.assertIs(Allergies(128).allergic_to("cats"), True)

def test_allergic_to_cats_and_something_else(self):
self.assertIs(Allergies(192).allergic_to("cats"), True)

def test_allergic_to_something_but_not_cats(self):
self.assertIs(Allergies(64).allergic_to("cats"), False)

def test_cats_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to('cats'), True)

def test_no_allergies(self):
self.assertEqual(Allergies(0).lst, [])

def test_allergic_to_just_eggs(self):
def test_just_eggs(self):
self.assertEqual(Allergies(1).lst, ['eggs'])

def test_allergic_to_just_peanuts(self):
def test_just_peanuts(self):
self.assertEqual(Allergies(2).lst, ['peanuts'])

def test_allergic_to_just_strawberries(self):
def test_just_strawberries(self):
self.assertEqual(Allergies(8).lst, ['strawberries'])

def test_allergic_to_eggs_and_peanuts(self):
def test_eggs_and_peanuts(self):
self.assertCountEqual(Allergies(3).lst, ['eggs', 'peanuts'])

def test_allergic_to_more_than_eggs_but_not_peanuts(self):
def test_more_than_eggs_but_not_peanuts(self):
self.assertCountEqual(Allergies(5).lst, ['eggs', 'shellfish'])

def test_allergic_to_lots_of_stuff(self):
def test_lots_of_stuff(self):
self.assertCountEqual(
Allergies(248).lst,
['strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats'])

def test_allergic_to_everything(self):
def test_everything(self):
self.assertCountEqual(
Allergies(255).lst, [
'eggs', 'peanuts', 'shellfish', 'strawberries', 'tomatoes',
'chocolate', 'pollen', 'cats'
])

def test_ignore_non_allergen_score_parts(self):
def test_no_allergen_score_parts(self):
self.assertCountEqual(
Allergies(509).lst, [
'eggs', 'shellfish', 'strawberries', 'tomatoes', 'chocolate',
Expand Down
4 changes: 2 additions & 2 deletions exercises/allergies/example.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ class Allergies(object):
def __init__(self, score):
self.score = score

def is_allergic_to(self, allergy):
def allergic_to(self, allergy):
return bool(self.score & 1 << self._allergies.index(allergy))

@property
def lst(self):
return [allergy for allergy in self._allergies
if self.is_allergic_to(allergy)]
if self.allergic_to(allergy)]
4 changes: 2 additions & 2 deletions exercises/alphametics/alphametics_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ def test_puzzle_with_three_letters(self):
self.assertEqual(solve("I + BB == ILL"), {"I": 1, "B": 9, "L": 0})

def test_solution_must_have_unique_value_for_each_letter(self):
self.assertEqual(solve("A == B"), {})
self.assertEqual(solve("A == B"), None)

def test_leading_zero_solution_is_invalid(self):
self.assertEqual(solve("ACA + DD == BD"), {})
self.assertEqual(solve("ACA + DD == BD"), None)

def test_puzzle_with_two_digits_final_carry(self):
self.assertEqual(
Expand Down
6 changes: 3 additions & 3 deletions exercises/alphametics/example.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,11 @@ def check_rec(eqparams, tracecombo=(dict(), 0, set(range(10))), p=0):
# if the recursive call returned a non-empty dictionary
# this means the recursion has found a solution
# otherwise, proceed to the new permutation
if len(rectest) > 0:
if rectest and len(rectest) > 0:
return rectest
# if no permutations are avaialble or no
# permutation gave the result return the empty dictionary
return dict()
# permutation gave the result return None
return None


def solve(an):
Expand Down
2 changes: 1 addition & 1 deletion exercises/armstrong-numbers/armstrong_numbers.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
def is_armstrong(number):
def is_armstrong_number(number):
pass
Loading