Skip to content

Commit 99829c6

Browse files
Add nth-prime exercise (#50)
1 parent 5ae1674 commit 99829c6

File tree

8 files changed

+113
-0
lines changed

8 files changed

+113
-0
lines changed

config.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,14 @@
342342
"prerequisites": [],
343343
"difficulty": 5
344344
},
345+
{
346+
"slug": "nth-prime",
347+
"name": "Nth Prime",
348+
"uuid": "fe8e3e7e-f239-40dc-8f3e-e07fa099da36",
349+
"practices": [],
350+
"prerequisites": [],
351+
"difficulty": 5
352+
},
345353
{
346354
"slug": "variable-length-quantity",
347355
"name": "Variable Length Quantity",
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Instructions
2+
3+
Given a number n, determine what the nth prime is.
4+
5+
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
6+
7+
If your language provides methods in the standard library to deal with prime numbers, pretend they don't exist and implement them yourself.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"authors": [
3+
"keiravillekode"
4+
],
5+
"files": {
6+
"solution": [
7+
"nth_prime.fut"
8+
],
9+
"test": [
10+
"test.fut"
11+
],
12+
"example": [
13+
".meta/example.fut"
14+
]
15+
},
16+
"blurb": "Given a number n, determine what the nth prime is.",
17+
"source": "A variation on Problem 7 at Project Euler",
18+
"source_url": "https://projecteuler.net/problem=7"
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
def prime (number: i32): i32 =
2+
if number < 3 then assert (number > 0) (number + 1) else
3+
let capacity = i64.i32 (number * (32 - i32.clz number)) -- number * ceil(log2(number + 1))
4+
let (_, _, p, _) = loop (a, remaining, p, step) = (replicate capacity false, number - 2, 1i64, 4i64) while (remaining > 0) do
5+
let p2 = p + step
6+
let step2 = 6 - step
7+
in
8+
if a[p2] then (a, remaining, p2, step2) else
9+
let (a2, _) = loop (a2, multiple) = (a, p2 * p2) while multiple < capacity do
10+
(a2 with [multiple] = true, multiple + 2 * p2)
11+
in
12+
(a2, remaining - 1, p2, step2)
13+
in
14+
i32.i64 p
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
11+
12+
[75c65189-8aef-471a-81de-0a90c728160c]
13+
description = "first prime"
14+
15+
[2c38804c-295f-4701-b728-56dea34fd1a0]
16+
description = "second prime"
17+
18+
[56692534-781e-4e8c-b1f9-3e82c1640259]
19+
description = "sixth prime"
20+
21+
[fce1e979-0edb-412d-93aa-2c744e8f50ff]
22+
description = "big prime"
23+
24+
[bd0a9eae-6df7-485b-a144-80e13c7d55b2]
25+
description = "there is no zeroth prime"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
def prime (number: i32): i32 = ???

exercises/practice/nth-prime/test.fut

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import "nth_prime"
2+
3+
-- first prime
4+
-- ==
5+
-- input { 1 }
6+
-- output { 2 }
7+
8+
-- second prime
9+
-- ==
10+
-- input { 2 }
11+
-- output { 3 }
12+
13+
-- sixth prime
14+
-- ==
15+
-- input { 6 }
16+
-- output { 13 }
17+
18+
-- seventh prime
19+
-- ==
20+
-- input { 7 }
21+
-- output { 17 }
22+
23+
-- big prime
24+
-- ==
25+
-- input { 10001 }
26+
-- output { 104743 }
27+
28+
-- very big prime
29+
-- ==
30+
-- input { 65537 }
31+
-- output { 821647 }
32+
33+
-- there is no zeroth prime
34+
-- ==
35+
-- input { 0 }
36+
-- error: Error*
37+
38+
let main (number: i32): i32 =
39+
prime number

i32

Whitespace-only changes.

0 commit comments

Comments
 (0)