Sha256: a17681c16a27b46908ceb10a25caa8b740abdda25166cc143ca7f49e499d04a5

Contents?: true

Size: 1.29 KB

Versions: 68

Compression:

Stored size: 1.29 KB

Contents

exercise: AllYourBase
version: 4
plan: 21
tests: |-
  for $c-data<cases>.values -> $case {
    sub call-convert-base {
      convert-base(
        bases  => %(<from to> Z=> .<input><inputBase outputBase>),
        digits => .<input><digits>,
      ) given $case;
    }

    given $case {
      if .<expected><error> {
        throws-like {call-convert-base}, Exception, .<description>;
      }
      else {
        cmp-ok call-convert-base, ‘~~’, |.<expected description>;
      }
    }
  }

unit: module
example: |-
  sub convert-base (
    :%bases! where all(.keys ~~ <from to>.Set, .values.all > 1),
    :@digits! where %bases<from> > .all ~~ UInt:D,
    --> Array[UInt:D]
  ) is export {
    from-decimal %bases<to>, to-decimal(%bases<from>, @digits);
  }

  sub to-decimal ($input-base, @input-digits) {
    my $elems = @input-digits.elems;
    $_ == 0 ?? $elems-- !! last for @input-digits;
    (loop (my $i = 0; $i < $elems; $i++) {
      @input-digits.reverse[$i] * $input-base ** $i;
    }).sum;
  }

  sub from-decimal ($output-base, $num is copy) {
    my UInt:D @output-digits;
    while $num >= $output-base {
      unshift @output-digits, $num % $output-base;
      $num div= $output-base;
    }
    @output-digits.unshift: $num;
  }

stub: |-
  sub convert-base (:%bases!, :@digits!) is export {
  }

Version data entries

68 entries across 68 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.138 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.137 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.136 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.135 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.134 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.133 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.132 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.131 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.130 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.129 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.128 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.127 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.126 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.125 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.124 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.123 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.122 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.121 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml
trackler-2.2.1.120 tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml