aboutsummaryrefslogtreecommitdiff
path: root/challenge-032/archargelod
diff options
context:
space:
mode:
authorArchargelod <archargelod@gmail.com>2024-03-08 19:02:07 +0800
committerArchargelod <archargelod@gmail.com>2024-03-08 19:02:07 +0800
commitc45f2d8a7ae3836921747c832d2bfe9db7cc9aa9 (patch)
treecea6fb0f51440f00210ab68d018e334c92bc7ef5 /challenge-032/archargelod
parent510484bb98b0d2413f8c09c0a827e91b992d2533 (diff)
downloadperlweeklychallenge-club-c45f2d8a7ae3836921747c832d2bfe9db7cc9aa9.tar.gz
perlweeklychallenge-club-c45f2d8a7ae3836921747c832d2bfe9db7cc9aa9.tar.bz2
perlweeklychallenge-club-c45f2d8a7ae3836921747c832d2bfe9db7cc9aa9.zip
weeks 27-40, 259 in Nim
Diffstat (limited to 'challenge-032/archargelod')
-rw-r--r--challenge-032/archargelod/README1
-rwxr-xr-xchallenge-032/archargelod/nim/ch_1.nim37
-rwxr-xr-xchallenge-032/archargelod/nim/ch_2.nim23
3 files changed, 61 insertions, 0 deletions
diff --git a/challenge-032/archargelod/README b/challenge-032/archargelod/README
new file mode 100644
index 0000000000..6cd57e1074
--- /dev/null
+++ b/challenge-032/archargelod/README
@@ -0,0 +1 @@
+Solution by archargelod
diff --git a/challenge-032/archargelod/nim/ch_1.nim b/challenge-032/archargelod/nim/ch_1.nim
new file mode 100755
index 0000000000..70d030f3e2
--- /dev/null
+++ b/challenge-032/archargelod/nim/ch_1.nim
@@ -0,0 +1,37 @@
+#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off
+import std/[parseutils, tables]
+
+proc countUniqLines(input: string): CountTable[string] =
+ var index = 0
+ while index < input.len:
+ let lineLength = input.skipUntil('\n', index)
+ let line = input[index ..< index+lineLength]
+ result.inc(line)
+
+ index += lineLength + 1
+
+when isMainModule:
+ import std/unittest
+
+ const
+ Expected = {"apple": 3, "banana": 1, "cherry": 2}
+ Test = """
+apple
+banana
+apple
+cherry
+cherry
+apple"""
+
+ template checkTable(table, tuples: typed) =
+ for (val, cnt) in tuples:
+ check table[val] == cnt
+
+ when defined(csv):
+ for val, cnt in countUniqLines(Test):
+ echo val, ',', cnt
+ else:
+ suite "Count instances":
+ test "Example 1":
+ checkTable(countUniqLines(Test), Expected)
+
diff --git a/challenge-032/archargelod/nim/ch_2.nim b/challenge-032/archargelod/nim/ch_2.nim
new file mode 100755
index 0000000000..ecdc9c099b
--- /dev/null
+++ b/challenge-032/archargelod/nim/ch_2.nim
@@ -0,0 +1,23 @@
+#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off
+import std/[strutils]
+
+proc barGraph(valuePairs: openarray[(string, int)], magnitude = 1): string =
+ const minOffset = 8
+ for (label, value) in valuePairs:
+ let offset = ' '.repeat(max(0, minOffset - label.len))
+ result &= label & offset & " | " & '#'.repeat(value * magnitude) & '\n'
+
+when isMainModule:
+ import std/unittest
+
+ const
+ Test = {"apple": 3, "banana": 1, "cherry": 2}
+ Expected = """
+apple | ############
+banana | ####
+cherry | ########
+"""
+
+ suite "ASCII bar chart":
+ test "Example 1":
+ check barGraph(Test, 4) == Expected