aboutsummaryrefslogtreecommitdiff
path: root/challenge-002/lars-balker
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-002/lars-balker')
-rw-r--r--challenge-002/lars-balker/perl5/ch-1.pl44
-rw-r--r--challenge-002/lars-balker/perl5/ch-2.pl31
-rw-r--r--challenge-002/lars-balker/perl6/ch-1.pl637
-rw-r--r--challenge-002/lars-balker/perl6/ch-2.pl623
4 files changed, 135 insertions, 0 deletions
diff --git a/challenge-002/lars-balker/perl5/ch-1.pl b/challenge-002/lars-balker/perl5/ch-1.pl
new file mode 100644
index 0000000000..6c86065ef8
--- /dev/null
+++ b/challenge-002/lars-balker/perl5/ch-1.pl
@@ -0,0 +1,44 @@
+# Write a script or one-liner to remove leading zeros from positive
+# numbers.
+
+# I chose to solve this in the strictest interpretation of the challenge:
+# Make sure it's a number
+# Make sure it's positive
+# Don't remove the last 0 before period.
+
+use v5.10;
+use strict;
+use warnings;
+use Scalar::Util qw/looks_like_number/; # distributed with perl since 5.8
+
+sub remove_leading_zeros {
+ my $num = shift;
+ # ask perl if it thinks input is a number, and make sure it's positive
+ if (looks_like_number($num) && $num > 0) {
+ $num =~ s/^
+ (
+ 0* # match all leading 0s followed by
+ (?=0\.) # 0. (not included in match)
+ |
+ 0* # or just all leading 0s
+ )
+ //x;
+ }
+ $num;
+}
+
+if (@ARGV) {
+ say remove_leading_zeros shift;
+}
+else {
+ eval "use Test::More";
+ is(remove_leading_zeros("000000"), "000000");
+ is(remove_leading_zeros("-0001"), "-0001");
+ is(remove_leading_zeros("0001"), "1");
+ is(remove_leading_zeros("0.001"), "0.001");
+ is(remove_leading_zeros(".001"), ".001");
+ is(remove_leading_zeros("000.001"), "0.001");
+ is(remove_leading_zeros("001bar"), "001bar");
+ is(remove_leading_zeros("fizzbuzz"), "fizzbuzz");
+ done_testing();
+}
diff --git a/challenge-002/lars-balker/perl5/ch-2.pl b/challenge-002/lars-balker/perl5/ch-2.pl
new file mode 100644
index 0000000000..97846efdfb
--- /dev/null
+++ b/challenge-002/lars-balker/perl5/ch-2.pl
@@ -0,0 +1,31 @@
+# Write a script that can convert integers to and from a base35
+# representation, using the characters 0-9 and A-Y.
+
+use v5.10;
+use strict;
+use warnings;
+
+sub to_base35 {
+ my $num = shift;
+ my $res = "";
+ my @val = (0..9, 'A'..'Y');
+ do {
+ $res .= $val[$num % 35];
+ $num = int($num / 35);
+ } while $num;
+ $res = reverse $res;
+ $res;
+}
+
+if (@ARGV) {
+ say to_base35 shift;
+}
+else {
+ eval "use Test::More";
+ is(to_base35(0), "0");
+ is(to_base35(10), "A");
+ is(to_base35(35), "10");
+ is(to_base35(1337), "137");
+ is(to_base35(20190401), "DFVXL");
+ done_testing();
+}
diff --git a/challenge-002/lars-balker/perl6/ch-1.pl6 b/challenge-002/lars-balker/perl6/ch-1.pl6
new file mode 100644
index 0000000000..31f9548d14
--- /dev/null
+++ b/challenge-002/lars-balker/perl6/ch-1.pl6
@@ -0,0 +1,37 @@
+# Write a script or one-liner to remove leading zeros from positive
+# numbers.
+
+use v6;
+use Test;
+
+sub remove_leading_zeros($num) {
+ $num.subst(/^(
+ 0* # match all leading 0s followed by
+ <?before 0\.> # 0. (not included in match)
+ ||
+ 0* # or just all leading 0s
+ )
+ /,
+ '');
+}
+
+# we let multi dispatch pick positive numbers
+multi sub MAIN(Numeric $num where $num > 0) {
+ say remove_leading_zeros($num);
+}
+
+# if not a positive number, just echo input
+multi sub MAIN($other) {
+ say $other;
+}
+
+# test if no input
+multi sub MAIN() {
+ # we only test the legal number input, because other input is
+ # sorted out by multi methods
+ is(remove_leading_zeros("0001"), "1");
+ is(remove_leading_zeros("0.001"), "0.001");
+ is(remove_leading_zeros(".001"), ".001");
+ is(remove_leading_zeros("000.001"), "0.001");
+ done-testing();
+}
diff --git a/challenge-002/lars-balker/perl6/ch-2.pl6 b/challenge-002/lars-balker/perl6/ch-2.pl6
new file mode 100644
index 0000000000..719b8cebc7
--- /dev/null
+++ b/challenge-002/lars-balker/perl6/ch-2.pl6
@@ -0,0 +1,23 @@
+# Write a script that can convert integers to and from a base35
+# representation, using the characters 0-9 and A-Y.
+
+use v6;
+use Test;
+
+sub to_base35(Int $num) {
+ return $num.base(35);
+}
+
+multi sub MAIN($num) {
+ say to_base35($num);
+}
+
+# kinda love this ARGV multi method dispatching in perl6
+multi sub MAIN() {
+ is(to_base35(0), "0");
+ is(to_base35(10), "A");
+ is(to_base35(35), "10");
+ is(to_base35(1337), "137");
+ is(to_base35(20190401), "DFVXL");
+ done-testing();
+}