Skip to content

Commit

Permalink
Add prime-factors
Browse files Browse the repository at this point in the history
  • Loading branch information
BNAndras committed Oct 8, 2024
1 parent ec51228 commit d96b195
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,14 @@
"transforming"
]
},
{
"slug": "prime-factors",
"name": "Prime Factors",
"uuid": "858b9e88-5c1c-48c7-9888-596d47a01d6e",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "proverb",
"name": "Proverb",
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.vim"
],
"test": [
"prime_factors.vader"
],
"example": [
".meta/example.vim"
]
},
"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"
}
14 changes: 14 additions & 0 deletions exercises/practice/prime-factors/.meta/example.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function! Factors(value) abort
let l:results = []
let l:divisor = 2
let l:working = a:value
while l:working > 1
while l:working % l:divisor == 0
call add(l:results, l:divisor)
let l:working /= l:divisor
endwhile
let l:divisor += 1
endwhile

return l:results
endfunction
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"
35 changes: 35 additions & 0 deletions exercises/practice/prime-factors/prime_factors.vader
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
Execute (no factors):
AssertEqual [], Factors(1)

Execute (prime number):
AssertEqual [2], Factors(2)

Execute (another prime number):
AssertEqual [3], Factors(3)

Execute (square of a prime):
AssertEqual [3, 3], Factors(9)

Execute (product of first prime):
AssertEqual [2, 2], Factors(4)

Execute (cube of a prime):
AssertEqual [2, 2, 2], Factors(8)

Execute (product of second prime):
AssertEqual [3, 3, 3], Factors(27)

Execute (product of third prime):
AssertEqual [5, 5, 5, 5], Factors(625)

Execute (product of first and second prime):
AssertEqual [2, 3], Factors(6)

Execute (product of primes and non-primes):
AssertEqual [2, 2, 3], Factors(12)

Execute (product of primes):
AssertEqual [5, 17, 23, 461], Factors(901255)

Execute (factors include a large prime):
AssertEqual [11, 9539, 894119], Factors(93819012551)
13 changes: 13 additions & 0 deletions exercises/practice/prime-factors/prime_factors.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
"
" Given a number, return its prime factors.
"
" Examples:
" :echo Factors(1)
" []
"
" :echo Factors(12)
" [2, 2, 3]
"
function! Factors(value) abort
" your code goes here
endfunction

0 comments on commit d96b195

Please sign in to comment.