Skip to content

Commit 5f78023

Browse files
committed
Add nth-prime
1 parent 78c1ed5 commit 5f78023

File tree

7 files changed

+120
-0
lines changed

7 files changed

+120
-0
lines changed

config.json

+8
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,14 @@
230230
"prerequisites": [],
231231
"difficulty": 2
232232
},
233+
{
234+
"slug": "nth-prime",
235+
"name": "Nth Prime",
236+
"uuid": "ae46d5df-62cc-46d8-a773-bc93a1ad716e",
237+
"practices": [],
238+
"prerequisites": [],
239+
"difficulty": 2
240+
},
233241
{
234242
"slug": "nucleotide-count",
235243
"name": "Nucleotide Count",
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.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"authors": [
3+
"BNAndras"
4+
],
5+
"files": {
6+
"solution": [
7+
"nth-prime.rkt"
8+
],
9+
"test": [
10+
"nth-prime-test.rkt"
11+
],
12+
"example": [
13+
".meta/example.rkt"
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+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#lang racket
2+
3+
(provide nth-prime)
4+
5+
(define/contract (nth-prime number)
6+
(-> exact-positive-integer? exact-positive-integer?)
7+
(let loop ([candidate 2]
8+
[count 0])
9+
(cond
10+
[(prime? candidate)
11+
(cond
12+
[(= (add1 count) number) candidate]
13+
[else (loop (add1 candidate)
14+
(add1 count))])]
15+
[else (loop (add1 candidate)
16+
count)])))
17+
18+
(define (prime? number)
19+
(cond
20+
[(zero? number) #f]
21+
[(= number 1) #f]
22+
[(= number 2) #t]
23+
[(even? number) #f]
24+
[else
25+
(let loop ([factor 3])
26+
(cond
27+
[(> (expt factor 2) number) #t]
28+
[(zero? (remainder number factor)) #f]
29+
[else (loop (+ factor 2))]))]))
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"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#lang racket/base
2+
3+
(require "nth-prime.rkt")
4+
5+
(module+ test
6+
(require rackunit rackunit/text-ui)
7+
8+
(define suite
9+
(test-suite
10+
"nth prime tests"
11+
(test-equal? "first prime"
12+
(nth-prime 1)
13+
2)
14+
(test-equal? "second prime"
15+
(nth-prime 2)
16+
3)
17+
(test-equal? "sixth prime"
18+
(nth-prime 6)
19+
13)
20+
(test-equal? "big prime"
21+
(nth-prime 10001)
22+
104743)
23+
(test-exn "there is no zeroth prime"
24+
exn:fail? (lambda () (nth-prime 0)))))
25+
26+
(run-tests suite))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#lang racket
2+
3+
(provide nth-prime)
4+
5+
(define (nth-prime number)
6+
(error "Not implemented yet"))

0 commit comments

Comments
 (0)