diff options
| author | Archargelod <archargelod@gmail.com> | 2024-03-08 19:02:07 +0800 |
|---|---|---|
| committer | Archargelod <archargelod@gmail.com> | 2024-03-08 19:02:07 +0800 |
| commit | c45f2d8a7ae3836921747c832d2bfe9db7cc9aa9 (patch) | |
| tree | cea6fb0f51440f00210ab68d018e334c92bc7ef5 /challenge-032/archargelod | |
| parent | 510484bb98b0d2413f8c09c0a827e91b992d2533 (diff) | |
| download | perlweeklychallenge-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/README | 1 | ||||
| -rwxr-xr-x | challenge-032/archargelod/nim/ch_1.nim | 37 | ||||
| -rwxr-xr-x | challenge-032/archargelod/nim/ch_2.nim | 23 |
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 |
