P13 - Run-length encoding of a list (direct solution).

AUTHOR

Johan Viklund

Specification

P13 (**) Run-length encoding of a list (direct solution).
       Implement the so-called run-length encoding data compression method
       directly. I.e. don't explicitly create the sublists containing the
       duplicates, as in problem P09, but only count them. As in problem P11,
       simplify the result list by replacing the singletons [1,X] by X.

Example

> encode_direct(<a a a a b c c a a d e e e e>).perl.say
    ([4, "a"], "b", [2, "c"], [2, "a"], "d", [4, "e"])
use v6;



multi infix:<compress> ( $a, $b ) { $a ~~ $b ?? [$[2, $a]] !! [ $[1, $a], $[1, $b] ] }
multi infix:<compress> ( @a, $b ) {
    
    if @a[*-1][1] ~~ $b {
        @a[*-1][0]++;
        return @a;
    } else {
        return [ |@a, [1, $b] ];
    }
}

say ([compress] <a a a a b c c a a d e e e e>).perl;

# vim: expandtab shiftwidth=4 ft=perl6

See Also

99-problems.pod

P01-scottp.raku

P01 - Find the last box of a list.

P01-topo.raku

P01 - Find the last element of a list.

P02-scottp.raku

P02 - Find the last but one box of a list.

P02-topo.raku

P02 - Find the last two elements of a list.

P03-scottp.raku

P03 - Find the K'th element of a list.

P03-topo.raku

P03 - Find the kth element of a list.

P04-scottp.raku

P04 - Find the number of elements of a list

P04-topo.raku

P04 - Find the number of elements in a list.

P05-scottp.raku

P05 - Reverse a list

P05-topo.raku

P05 - Reverse a list.

P06-ajs.raku

P06 - Find out whether a list is a palindrome.

P06-scottp.raku

P06 - Find out whether a list is a palindrome.

P06-sdondley.raku

P06 - Find out whether a list is a palindrome.

P06-topo.raku

P06 - Find out whether a list is a palindrome.

P07-eric256.raku

P07 - Flatten a nested array structure.

P07-topo.raku

P07 - Flatten a nested array structure.

P07-viklund.raku

P07 - Flatten a nested array structure.

P08-eric256.raku

P08 - Eliminate consecutive duplicates of list elements.

P08-topo.raku

P08 - Eliminate consecutive duplicates of list elements.

P08-viklund.raku

P08 - Eliminate consecutive duplicates of list elements.

P09-rje.raku

P09 - Pack consecutive duplicates of list elements into sublists.

P09-scottp.raku

P09 - Pack consecutive duplicates of list elements into sublists.

P09-topo.raku

P09 - Pack consecutive duplicate elements of a list into sublists.

P09-unobe.raku

P09 - Pack consecutive duplicates of list elements into sublists.

P10-scottp.raku

P10 - Run-length encoding of a list.

P10-topo.raku

P10 - Run-length encoding of a list.

P10-unobe.raku

P10 - Run-length encoding of a list.

P11-topo.raku

P11 - Modified run-length encoding.

P11-unobe.raku

P11 - Modified run-length encoding.

P12-rhebus.raku

P12 - Decode a run-length encoded list.

P12-topo.raku

P12 - Decode modified run-length encoding.

P12-unobe.raku

P12 - Decode a run-length encoded list.

P13-rhebus.raku

P13 - Run-length encoding of a list (direct solution).

P13-topo.raku

P13 - Direct run-length encoding.

P14-scottp.raku

P14 - Duplicate the elements of a list.

P14-topo.raku

P14 - Duplicate the elements in a list.

P14-viklund.raku

P14 - Duplicate the elements of a list.

P15-rhebus.raku

P15 - Replicate the elements of a list a given number of times.

P15-topo.raku

P15 - Replicate the elements of a list a given number of times.

P15-unobe.raku

P15 - Replicate the elements of a list a given number of times.

P16-edpratomo.raku

P16 (**) Drop every N'th element from a list.

P16-topo.raku

P16 - Drop every nth element from a list.

P17-sdondley.raku

P17 - Split a list into two parts; the length of the first part is given.

P17-topo.raku

P17 - Split a list into two parts; the length of the first part is given.

P17-unobe.raku

P17 - Split a list into two parts; the length of the first part is given.

P18-topo.raku

P18 - Extract a slice from a list. Indices start at 1.

P19-topo.raku

P19 - Rotate a list n places to the left.

P20-rhebus.raku

P20 - Remove the K'th element from a list.

P20-topo.raku

P20 - Remove the kth element of a list.

P21-scottp.raku

P21 - Insert an element at a given position into an array.

P21-topo.raku

P21 - Insert an element at a given position into a list.

P22-scottp.raku

P22 - Create a list containing all integers within a given range.

P22-topo.raku

P22 - Create a list containing all integers within a given range.

P23-topo.raku

P23 - Extract a given number of randomly selected elements from a list.

P24-topo.raku

P24 - Draw N different random numbers from the set 1..M.

P25-topo.raku

P25 - Generate a random permutation of the elements of a list.

P26-topo.raku

P26 - Generate the combinations of k distinct objects chosen from the n elements of a list.

P31-rhebus.raku

P31 - Determine whether a given integer number is prime.

P32-rhebus.raku

P32 - Determine the greatest common divisor of two positive integer

P33-rhebus.raku

P33 - Determine whether two positive integer numbers are coprime.

P34-rhebus.raku

P34 - Calculate Euler's totient function phi(m).

P35-rhebus.raku

P35 - Determine the prime factors of a given positive integer.

P36-ovid.raku

P36 - Determine the prime factors of a given positive integer (2).

P36-rhebus.raku

P36 - Determine the prime factors of a given positive integer (2).

P37-rhebus.raku

P37 - Calculate Euler's totient function phi(m) (improved).

P39-rhebus.raku

P39 - A list of prime numbers.

P40-rhebus.raku

P40 - Goldbach's conjecture.

P41-rhebus.raku

P41 - A list of Goldbach compositions.

P91-edpratomo.raku

P91 - Knight's tour.

README.md

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.

Built with Podlite — the markup and publishing tools behind this site.