aboutsummaryrefslogtreecommitdiff
path: root/rosetta/factors-of-int.neb
diff options
context:
space:
mode:
authormryouse2022-08-02 02:16:38 +0000
committermryouse2022-08-02 02:16:38 +0000
commitee509e05746731b12afe64bfe34284b119f6b4ae (patch)
tree3a7e2e2ea668a99ab979e5852eedb661d9723085 /rosetta/factors-of-int.neb
parent7300580eb3aacfe1b67918fb20259e3ec26559c2 (diff)
exercises
Diffstat (limited to 'rosetta/factors-of-int.neb')
-rw-r--r--rosetta/factors-of-int.neb29
1 files changed, 29 insertions, 0 deletions
diff --git a/rosetta/factors-of-int.neb b/rosetta/factors-of-int.neb
new file mode 100644
index 0000000..ea3ca15
--- /dev/null
+++ b/rosetta/factors-of-int.neb
@@ -0,0 +1,29 @@
+(func .list-of-num (num)
+ (def nums (list))
+ (for-count num
+ (redef nums (append nums _idx_)))
+ nums)
+
+(func .rough-sqrt (num) (.rough-sqrt num 1))
+
+(func .rough-sqrt (num val)
+ (branch
+ ((eq? (* val val) num) val)
+ ((> (* val val) num) (- val 1))
+ (#true
+ (.rough-sqrt num (+ 1 val)))))
+
+(func factor-naive (num)
+ (filter (lambda (x) (int? (/ num x))) (.list-of-num num)))
+
+(func factor-better (num)
+ (append
+ (filter (lambda (x) (int? (/ num x))) (.list-of-num (floor (/ num 2))))
+ num))
+
+(func factor-even-better (num)
+ (def ret (list))
+ (for-each (.list-of-num (.rough-sqrt num))
+ (if (int? (/ num _item_))
+ (redef ret (append ret (list _item_ (/ num _item_))))))
+ ret)