aboutsummaryrefslogtreecommitdiff
path: root/challenge-020
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-020
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-020')
-rw-r--r--challenge-020/archargelod/README1
-rwxr-xr-xchallenge-020/archargelod/nim/ch_1.nim22
-rwxr-xr-xchallenge-020/archargelod/nim/ch_2.nim28
3 files changed, 51 insertions, 0 deletions
diff --git a/challenge-020/archargelod/README b/challenge-020/archargelod/README
new file mode 100644
index 0000000000..6cd57e1074
--- /dev/null
+++ b/challenge-020/archargelod/README
@@ -0,0 +1 @@
+Solution by archargelod
diff --git a/challenge-020/archargelod/nim/ch_1.nim b/challenge-020/archargelod/nim/ch_1.nim
new file mode 100755
index 0000000000..55823e7de9
--- /dev/null
+++ b/challenge-020/archargelod/nim/ch_1.nim
@@ -0,0 +1,22 @@
+#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off
+
+proc splitSameChars(s: string): seq[string] =
+ result = newSeqOfCap[string](s.len)
+ result.add $s[0]
+
+ for c in s.toOpenArray(1, s.high):
+ if c != result[^1][^1]:
+ result.add $c
+ else:
+ result[^1] &= c
+
+when isMainModule:
+ import std/unittest
+
+ const
+ Test = "ABBCDEEF"
+ Expected = ["A", "BB", "C", "D", "EE", "F"]
+
+ suite "Same-character groups":
+ test "Example 1":
+ check Test.splitSameChars() == Expected
diff --git a/challenge-020/archargelod/nim/ch_2.nim b/challenge-020/archargelod/nim/ch_2.nim
new file mode 100755
index 0000000000..f8d47e2d01
--- /dev/null
+++ b/challenge-020/archargelod/nim/ch_2.nim
@@ -0,0 +1,28 @@
+#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off
+
+proc aliquotSum[T: SomeInteger](n: T): T =
+ for d in T(1) .. T(n div 2):
+ if n mod d == 0:
+ result += d
+
+proc smallestAmicablePair(): (int, int) =
+ var invalid: set[int16] # could be useful for later pairs
+
+ for first in 1'i16 .. high(int16):
+ if first in invalid: continue
+
+ let second = aliquotSum(first)
+ if second != first and aliquotSum(second) == first:
+ return (first.int, second.int)
+
+ invalid.incl first
+ invalid.incl second
+
+when isMainModule:
+ import std/unittest
+
+ const Expected = (220, 284)
+
+ suite "Smallest Amicable Number pair":
+ test "first pair is 220 and 284":
+ check smallestAmicablePair() == Expected