aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Ransan <lucas@ransan.tk>2021-07-15 11:52:13 +0200
committerLucas Ransan <lucas@ransan.tk>2021-07-15 14:26:22 +0200
commitf32ac270c4b0cb654afd623f5e0e37bf61f7f27c (patch)
tree6daa82b2af9684f34bf66340abdac07320c27fd6
parent262314e6f2e38d22bf756d8edac7fbcc5af52e25 (diff)
downloadperlweeklychallenge-club-f32ac270c4b0cb654afd623f5e0e37bf61f7f27c.tar.gz
perlweeklychallenge-club-f32ac270c4b0cb654afd623f5e0e37bf61f7f27c.tar.bz2
perlweeklychallenge-club-f32ac270c4b0cb654afd623f5e0e37bf61f7f27c.zip
Miranda week 121 task 1
-rwxr-xr-xchallenge-121/luc65r/miranda/ch-1.m18
1 files changed, 18 insertions, 0 deletions
diff --git a/challenge-121/luc65r/miranda/ch-1.m b/challenge-121/luc65r/miranda/ch-1.m
new file mode 100755
index 0000000000..1cc4ab9794
--- /dev/null
+++ b/challenge-121/luc65r/miranda/ch-1.m
@@ -0,0 +1,18 @@
+#!/usr/bin/env -S mira -exec
+
+main = ((++ "\n") . show . frombase2 . modify (1 -) n . tobase2) m
+ where
+ m = numval ($* ! 1)
+ n = numval ($* ! 2) - 1
+
+tobase2 :: num -> [num]
+tobase2 = map (mod 2) . takewhile (~= 0) . iterate (div 2)
+
+frombase2 :: [num] -> num
+frombase2 = foldl1 ((+) . (2 *)) . reverse
+
+modify :: (* -> *) -> num -> [*] -> [*]
+modify op n l = map2 f (index l) l
+ where
+ f i = op, if i == n
+ = id, otherwise