diff options
| author | Archargelod <archargelod@gmail.com> | 2024-03-01 14:43:05 +0800 |
|---|---|---|
| committer | Archargelod <archargelod@gmail.com> | 2024-03-01 14:43:05 +0800 |
| commit | 534715243e65728db4ee90b5ee5dee644ce71dac (patch) | |
| tree | fe17b389593130a0961afea924afc8e180fb365a /challenge-023/archargelod | |
| parent | d64cde6fdb1521b4a240e30615a90febcaf46799 (diff) | |
| download | perlweeklychallenge-club-534715243e65728db4ee90b5ee5dee644ce71dac.tar.gz perlweeklychallenge-club-534715243e65728db4ee90b5ee5dee644ce71dac.tar.bz2 perlweeklychallenge-club-534715243e65728db4ee90b5ee5dee644ce71dac.zip | |
weeks 14-26, 258 in Nim
Diffstat (limited to 'challenge-023/archargelod')
| -rw-r--r-- | challenge-023/archargelod/README | 1 | ||||
| -rwxr-xr-x | challenge-023/archargelod/nim/ch_1.nim | 25 | ||||
| -rwxr-xr-x | challenge-023/archargelod/nim/ch_2.nim | 39 |
3 files changed, 65 insertions, 0 deletions
diff --git a/challenge-023/archargelod/README b/challenge-023/archargelod/README new file mode 100644 index 0000000000..6cd57e1074 --- /dev/null +++ b/challenge-023/archargelod/README @@ -0,0 +1 @@ +Solution by archargelod diff --git a/challenge-023/archargelod/nim/ch_1.nim b/challenge-023/archargelod/nim/ch_1.nim new file mode 100755 index 0000000000..c87d0b495a --- /dev/null +++ b/challenge-023/archargelod/nim/ch_1.nim @@ -0,0 +1,25 @@ +#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off +import sequtils + +proc nthOrderForwardDifference(numbers: openarray[int], order = 1): seq[int] = + result = numbers.toSeq + for i in 1..order: + for j, num in result.toOpenArray(0, result.high - 1): + result[j] = result[j+1] - num + result.setLen(result.len - 1) + +when isMainModule: + import std/unittest + + const + Test = [5, 9, 2, 8, 1, 6] + Expected = [ + @[4, -7, 6, -7, 5], + @[-11, 13, -13, 12], + ] + + suite "nth order forward difference series": + test "first order": + check Test.nthOrderForwardDifference(1) == Expected[0] + test "second order": + check Test.nthOrderForwardDifference(2) == Expected[1] diff --git a/challenge-023/archargelod/nim/ch_2.nim b/challenge-023/archargelod/nim/ch_2.nim new file mode 100755 index 0000000000..f80edd3c3f --- /dev/null +++ b/challenge-023/archargelod/nim/ch_2.nim @@ -0,0 +1,39 @@ +#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off + +proc primeSieve(max: int): seq[int] = + var sieve = newSeq[bool](max) + + for p in 2 .. sieve.high: + if sieve[p]: + continue + + for i in countUp(2 * p, sieve.high, p): + sieve[i] = true + + for i, notPrime in sieve.toOpenArray(2, sieve.high): + if not notPrime: + result.add i + 2 + +proc primeDecomposition(n: int): seq[int] = + let primes = primeSieve(n) + + var number = n + var pInd = 0 + while number > 1: + let prime = primes[pInd] + if number mod prime == 0: + result.add prime + number = number div prime + else: + inc pInd + +when isMainModule: + import std/unittest + + const + Test = 228 + Expected = [2,2,3,19] + + suite "Prime decomposition": + test "decomposition of 228 is 2,2,3,19": + check Test.primeDecomposition() == Expected |
