aboutsummaryrefslogtreecommitdiff
path: root/challenge-003
diff options
context:
space:
mode:
authorArchargelod <archargelod@gmail.com>2024-02-14 11:23:50 +0800
committerArchargelod <archargelod@gmail.com>2024-02-14 11:23:50 +0800
commit119790ae0a631a4d00078c329c1454a776dbc987 (patch)
treed16b616a2a038450543ac24379a7503d8db8ad2f /challenge-003
parent0eea0ad3c68531bab8e840b94d3ab2dfb02f1683 (diff)
downloadperlweeklychallenge-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/README1
-rwxr-xr-xchallenge-003/archargelod/nim/ch_1.nim26
-rwxr-xr-xchallenge-003/archargelod/nim/ch_2.nim47
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())