aboutsummaryrefslogtreecommitdiff
path: root/challenge-023/archargelod
diff options
context:
space:
mode:
authorArchargelod <archargelod@gmail.com>2024-03-01 14:43:05 +0800
committerArchargelod <archargelod@gmail.com>2024-03-01 14:43:05 +0800
commit534715243e65728db4ee90b5ee5dee644ce71dac (patch)
treefe17b389593130a0961afea924afc8e180fb365a /challenge-023/archargelod
parentd64cde6fdb1521b4a240e30615a90febcaf46799 (diff)
downloadperlweeklychallenge-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/README1
-rwxr-xr-xchallenge-023/archargelod/nim/ch_1.nim25
-rwxr-xr-xchallenge-023/archargelod/nim/ch_2.nim39
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