diff options
| author | Archargelod <archargelod@gmail.com> | 2024-02-14 11:23:50 +0800 |
|---|---|---|
| committer | Archargelod <archargelod@gmail.com> | 2024-02-14 11:23:50 +0800 |
| commit | 119790ae0a631a4d00078c329c1454a776dbc987 (patch) | |
| tree | d16b616a2a038450543ac24379a7503d8db8ad2f /challenge-003 | |
| parent | 0eea0ad3c68531bab8e840b94d3ab2dfb02f1683 (diff) | |
| download | perlweeklychallenge-club-119790ae0a631a4d00078c329c1454a776dbc987.tar.gz perlweeklychallenge-club-119790ae0a631a4d00078c329c1454a776dbc987.tar.bz2 perlweeklychallenge-club-119790ae0a631a4d00078c329c1454a776dbc987.zip | |
weeks 1-4, 256 in Nim
Diffstat (limited to 'challenge-003')
| -rw-r--r-- | challenge-003/archargelod/README | 1 | ||||
| -rwxr-xr-x | challenge-003/archargelod/nim/ch_1.nim | 26 | ||||
| -rwxr-xr-x | challenge-003/archargelod/nim/ch_2.nim | 47 |
3 files changed, 74 insertions, 0 deletions
diff --git a/challenge-003/archargelod/README b/challenge-003/archargelod/README new file mode 100644 index 0000000000..6cd57e1074 --- /dev/null +++ b/challenge-003/archargelod/README @@ -0,0 +1 @@ +Solution by archargelod diff --git a/challenge-003/archargelod/nim/ch_1.nim b/challenge-003/archargelod/nim/ch_1.nim new file mode 100755 index 0000000000..06933336e2 --- /dev/null +++ b/challenge-003/archargelod/nim/ch_1.nim @@ -0,0 +1,26 @@ +#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off +import math, algorithm + +var + mem: seq[int] + ti: range[0..2] = 0 + +proc regNum(t: array[3, int]) = + let num = (2 ^ t[0]) * (3 ^ t[1]) * (5 ^ t[2]) + + if num notin mem: + mem.add num + +for i in 0..9: + for j in 0..i: + for k in j..i: + var t = [j, k, i] + if i == 4: echo (j, k),t + regnum(t) + while t.nextPermutation(): + regnum(t) + t.sort() + +mem.sort() +for i, v in mem: + echo i+1, ": ", v diff --git a/challenge-003/archargelod/nim/ch_2.nim b/challenge-003/archargelod/nim/ch_2.nim new file mode 100755 index 0000000000..be2914225a --- /dev/null +++ b/challenge-003/archargelod/nim/ch_2.nim @@ -0,0 +1,47 @@ +#!/usr/bin/env -S nim r -d:release --verbosity:0 --hints:off +import std/strutils + +proc alignTriangle(nums: openArray[int], padLine, padNum: int): string = + result = ' '.repeat(padLine * (padNum div 2)) + for i, num in nums: + if i == nums.high: + result.add $num + else: + result.add alignLeft($num, padNum) + result.add '\n' + +proc pascalTriangle*(n: range[3..67] = 3): string = + let padNum = if n > 33: 20 elif n > 20: 10 elif n > 10: 6 elif n > 5: 4 else: 2 + + var row = @[1] + for i in 2..n: + let padLine = n - i + 1 + result.add row.alignTriangle(padLine, padNum) + + var next: seq[int] + for j in 0 ..< i: + if j == 0 or j == i-1: + next.add 1 + else: + next.add row[j-1] + row[j] + + row = next + + result.add row.alignTriangle(0, padNum) + +when isMainModule: + import std/[cmdline, rdstdin, options] + + var rows: Option[int] + try: + if paramCount() == 1: + rows = some(parseInt paramStr(1)) + if rows.isNone(): + rows = some(parseInt readLineFromStdin("Enter number of rows [3-67]: ")) + except ValueError as err: + quit err.msg + + if rows.get() notin 3..67: + quit "Only signed 64-bit numbers are supported. Please enter a number between 3 and 67." + + echo pascalTriangle(rows.get()) |
