diff --git a/exercises/practice/binary/.meta/solutions/Binary.rakumod b/exercises/practice/binary/.meta/solutions/Binary.rakumod new file mode 100644 index 00000000..a8ff35fc --- /dev/null +++ b/exercises/practice/binary/.meta/solutions/Binary.rakumod @@ -0,0 +1,13 @@ +class Binary is export { + method to_decimal ($binary) { + return 0 if $binary ~~ /<-[^01]>/; + + my $decimal = 0; + my $index = $binary.chars; + + for $binary.split('',:skip-empty) -> $bit { + $decimal += $bit * 2 ** --$index; + } + return $decimal; + } +} diff --git a/exercises/practice/binary/.meta/solutions/binary.rakutest b/exercises/practice/binary/.meta/solutions/binary.rakutest new file mode 120000 index 00000000..d06913f2 --- /dev/null +++ b/exercises/practice/binary/.meta/solutions/binary.rakutest @@ -0,0 +1 @@ +../../binary.rakutest \ No newline at end of file diff --git a/exercises/practice/binary/Binary.rakumod b/exercises/practice/binary/Binary.rakumod new file mode 100644 index 00000000..e69de29b diff --git a/exercises/practice/binary/binary.rakutest b/exercises/practice/binary/binary.rakutest new file mode 100644 index 00000000..0fc6bf3b --- /dev/null +++ b/exercises/practice/binary/binary.rakutest @@ -0,0 +1,23 @@ +#!/usr/bin/env raku +use Test; +use lib $?FILE.IO.dirname; +use Binary; + +plan 9; + +ok Binary.can('to_decimal'), 'Class Binary has to_decimal method'; + +my %results = ( + 1 => 1, + 10 => 2, + 11 => 3, + 100 => 4, + 1001 => 9, + 11010 => 26, + 10001101000 => 1128, + 'carrot23' => 0, +); + +for %results.sort { + is Binary.to_decimal($_.key), $_.value, '"' ~ $_.key ~ '" returns ' ~ $_.value; +} diff --git a/exercises/practice/trinary/.meta/solutions/Trinary.rakumod b/exercises/practice/trinary/.meta/solutions/Trinary.rakumod new file mode 100644 index 00000000..9d7e09ba --- /dev/null +++ b/exercises/practice/trinary/.meta/solutions/Trinary.rakumod @@ -0,0 +1,6 @@ +sub to-decimal($num) is export { + + return 0 if $num ~~ /<-[012]>/; + + return reduce { 3 * $^a + $^b }, 0, |$num.comb; +} diff --git a/exercises/practice/trinary/.meta/solutions/trinary.rakutest b/exercises/practice/trinary/.meta/solutions/trinary.rakutest new file mode 120000 index 00000000..07ca8d9e --- /dev/null +++ b/exercises/practice/trinary/.meta/solutions/trinary.rakutest @@ -0,0 +1 @@ +../../trinary.rakutest \ No newline at end of file diff --git a/exercises/practice/trinary/Trinary.rakumod b/exercises/practice/trinary/Trinary.rakumod new file mode 100644 index 00000000..e69de29b diff --git a/exercises/practice/trinary/trinary.rakutest b/exercises/practice/trinary/trinary.rakutest new file mode 100644 index 00000000..fec7dbe3 --- /dev/null +++ b/exercises/practice/trinary/trinary.rakutest @@ -0,0 +1,52 @@ +#!/usr/bin/env raku + +use Test; +use lib $?FILE.IO.dirname; +use Trinary; + +my @cases = ( + { + input => 1, + expected => 1, + }, + { + input => 2, + expected => 2, + }, + { + input => 10, + expected => 3, + }, + { + input => 11, + expected => 4, + }, + { + input => 100, + expected => 9, + }, + { + input => 10, + expected => 3, + }, + { + input => 112, + expected => 14, + }, + { + input => 222, + expected => 26, + }, + { + input => 1122000120, + expected => 32091, + }, + { + input => "carrot", + expected => 0, + } +); + +plan @cases.elems; + +is to-decimal( . ), ., . for @cases;