Skip to content

Commit

Permalink
Add prime-factors (#353)
Browse files Browse the repository at this point in the history
  • Loading branch information
BNAndras authored Oct 8, 2024
1 parent 519e481 commit b4d2836
Show file tree
Hide file tree
Showing 7 changed files with 163 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,14 @@
"prerequisites": [],
"difficulty": 3
},
{
"slug": "prime-factors",
"name": "Prime Factors",
"uuid": "bd85cab1-c5e1-46ac-9faf-a815510fdfcd",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "protein-translation",
"name": "Protein Translation",
Expand Down
36 changes: 36 additions & 0 deletions exercises/practice/prime-factors/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Instructions

Compute the prime factors of a given natural number.

A prime number is only evenly divisible by itself and 1.

Note that 1 is not a prime number.

## Example

What are the prime factors of 60?

- Our first divisor is 2.
2 goes into 60, leaving 30.
- 2 goes into 30, leaving 15.
- 2 doesn't go cleanly into 15.
So let's move on to our next divisor, 3.
- 3 goes cleanly into 15, leaving 5.
- 3 does not go cleanly into 5.
The next possible factor is 4.
- 4 does not go cleanly into 5.
The next possible factor is 5.
- 5 does go cleanly into 5.
- We're left only with 1, so now, we're done.

Our successful divisors in that computation represent the list of prime factors of 60: 2, 2, 3, and 5.

You can check this yourself:

```text
2 * 2 * 3 * 5
= 4 * 15
= 60
```

Success!
19 changes: 19 additions & 0 deletions exercises/practice/prime-factors/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"BNAndras"
],
"files": {
"solution": [
"prime-factors.coffee"
],
"test": [
"prime-factors.spec.coffee"
],
"example": [
".meta/example.coffee"
]
},
"blurb": "Compute the prime factors of a given natural number.",
"source": "The Prime Factors Kata by Uncle Bob",
"source_url": "https://web.archive.org/web/20221026171801/http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata"
}
12 changes: 12 additions & 0 deletions exercises/practice/prime-factors/.meta/example.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class PrimeFactors
@factors: (value) ->
factors = []
divisor = 2
while value > 1
while value % divisor == 0
factors.push divisor
value /= divisor
divisor += 1
factors

module.exports = PrimeFactors
46 changes: 46 additions & 0 deletions exercises/practice/prime-factors/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# 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.

[924fc966-a8f5-4288-82f2-6b9224819ccd]
description = "no factors"

[17e30670-b105-4305-af53-ddde182cb6ad]
description = "prime number"

[238d57c8-4c12-42ef-af34-ae4929f94789]
description = "another prime number"

[f59b8350-a180-495a-8fb1-1712fbee1158]
description = "square of a prime"

[756949d3-3158-4e3d-91f2-c4f9f043ee70]
description = "product of first prime"

[bc8c113f-9580-4516-8669-c5fc29512ceb]
description = "cube of a prime"

[7d6a3300-a4cb-4065-bd33-0ced1de6cb44]
description = "product of second prime"

[073ac0b2-c915-4362-929d-fc45f7b9a9e4]
description = "product of third prime"

[6e0e4912-7fb6-47f3-a9ad-dbcd79340c75]
description = "product of first and second prime"

[00485cd3-a3fe-4fbe-a64a-a4308fc1f870]
description = "product of primes and non-primes"

[02251d54-3ca1-4a9b-85e1-b38f4b0ccb91]
description = "product of primes"

[070cf8dc-e202-4285-aa37-8d775c9cd473]
description = "factors include a large prime"
4 changes: 4 additions & 0 deletions exercises/practice/prime-factors/prime-factors.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class PrimeFactors
@factors: (value) ->

module.exports = PrimeFactors
38 changes: 38 additions & 0 deletions exercises/practice/prime-factors/prime-factors.spec.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
PrimeFactors = require './prime-factors'

describe 'Prime Factors', ->
it 'no factors', ->
expect(PrimeFactors.factors 1).toEqual []

xit 'prime number', ->
expect(PrimeFactors.factors 2).toEqual [2]

xit 'another prime number', ->
expect(PrimeFactors.factors 3).toEqual [3]

xit 'square of a prime', ->
expect(PrimeFactors.factors 9).toEqual [3, 3]

xit 'product of first prime', ->
expect(PrimeFactors.factors 4).toEqual [2, 2]

xit 'cube of a prime', ->
expect(PrimeFactors.factors 8).toEqual [2, 2, 2]

xit 'product of second prime', ->
expect(PrimeFactors.factors 27).toEqual [3, 3, 3]

xit 'product of third prime', ->
expect(PrimeFactors.factors 625).toEqual [5, 5, 5, 5]

xit 'product of first and second prime', ->
expect(PrimeFactors.factors 6).toEqual [2, 3]

xit 'product of primes and non-primes', ->
expect(PrimeFactors.factors 12).toEqual [2, 2, 3]

xit 'product of primes', ->
expect(PrimeFactors.factors 901255).toEqual [5, 17, 23, 461]

xit 'factors include a large prime', ->
expect(PrimeFactors.factors 93819012551).toEqual [11, 9539, 894119]

0 comments on commit b4d2836

Please sign in to comment.