aboutsummaryrefslogtreecommitdiff
path: root/challenge-261
diff options
context:
space:
mode:
authorArchargelod <archargelod@gmail.com>2024-03-23 13:33:35 +0800
committerArchargelod <archargelod@gmail.com>2024-03-23 13:33:35 +0800
commit3a120930c5773eba4641d49e02ea5e58c12dcfcb (patch)
tree703beab5827accad694e4d0ae60c5edf8e69ecf9 /challenge-261
parent8e95e94de527f8344f979dbb45b935139b1ddeb7 (diff)
downloadperlweeklychallenge-club-3a120930c5773eba4641d49e02ea5e58c12dcfcb.tar.gz
perlweeklychallenge-club-3a120930c5773eba4641d49e02ea5e58c12dcfcb.tar.bz2
perlweeklychallenge-club-3a120930c5773eba4641d49e02ea5e58c12dcfcb.zip
weeks 41-47, 260, 261 in Nim
Diffstat (limited to 'challenge-261')
-rwxr-xr-xchallenge-261/archargelod/nim/ch_1.nim31
-rwxr-xr-xchallenge-261/archargelod/nim/ch_2.nim30
2 files changed, 61 insertions, 0 deletions
diff --git a/challenge-261/archargelod/nim/ch_1.nim b/challenge-261/archargelod/nim/ch_1.nim
new file mode 100755
index 0000000000..f73a60dca6
--- /dev/null
+++ b/challenge-261/archargelod/nim/ch_1.nim
@@ -0,0 +1,31 @@
+#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off
+import std/sequtils
+
+proc diffElementDigitSums(numbers: openArray[int]): int =
+ for num in numbers:
+ if num < 10: continue
+ let digitSum = ($num).mapIt(it.ord - '0'.ord).foldl(a+b)
+ result += num - digitSum
+
+
+when isMainModule:
+ import std/unittest
+
+ const
+ Test = [
+ @[1,2,3,45],
+ @[1,12,3],
+ @[1,2,3,4],
+ @[236, 416, 336, 350],
+ ]
+ Expected = [36, 9, 0, 1296]
+
+ suite "Element Digit Sum":
+ test "Example 1":
+ check diffElementDigitSums(Test[0]) == Expected[0]
+ test "Example 2":
+ check diffElementDigitSums(Test[1]) == Expected[1]
+ test "Example 3":
+ check diffElementDigitSums(Test[2]) == Expected[2]
+ test "Example 4":
+ check diffElementDigitSums(Test[3]) == Expected[3]
diff --git a/challenge-261/archargelod/nim/ch_2.nim b/challenge-261/archargelod/nim/ch_2.nim
new file mode 100755
index 0000000000..36d8badb5d
--- /dev/null
+++ b/challenge-261/archargelod/nim/ch_2.nim
@@ -0,0 +1,30 @@
+#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off
+
+proc searchThenDoubleRepeat(numbers: openarray[int], value: int): int =
+ result = value
+ while true:
+ block lookingForValue:
+ for num in numbers:
+ if num == result:
+ result *= 2
+ break lookingForValue
+ return
+
+when isMainModule:
+ import std/unittest
+
+ const
+ Test: array[3, tuple[arr: seq[int], value: int]] = [
+ (@[5,3,6,1,12], 3),
+ (@[1,2,4,3], 1),
+ (@[5,6,7], 2),
+ ]
+ Expected = [24, 8, 2]
+
+ suite "Multiply by Two":
+ test "Example 1":
+ check Test[0].arr.searchThenDoubleRepeat(Test[0].value) == Expected[0]
+ test "Example 2":
+ check Test[1].arr.searchThenDoubleRepeat(Test[1].value) == Expected[1]
+ test "Example 3":
+ check Test[2].arr.searchThenDoubleRepeat(Test[2].value) == Expected[2]