TL;DR

On with TASK #2 from The Weekly Challenge #184. Enjoy!

# The challenge

You are given list of strings containing 0-9 and a-z separated by space only.

Write a script to split the data into two arrays, one for integers and one for alphabets only.

Example 1

Input: @list = ( 'a 1 2 b 0', '3 c 4 d')
Output: [[1,2,0], [3,4]] and [['a','b'], ['c','d']]


Example 2

Input: @list = ( '1 2', 'p q r', 's 3', '4 5 t')
Output: [[1,2], [3], [4,5]] and [['p','q','r'], ['s'], ['t']]


# The questions

The second example helped. I initially thought that we were supposed to include empty sub-arrays, but this does not seem to be the case.

Iâ€™ll also assume that itâ€™s either digits or letters.

# The solution

This will be done just plainly. Iterate through all input strings, split them on spaces and decide where to put the characters (digits or letters).

#!/usr/bin/env perl
use v5.24;
use warnings;
use experimental 'signatures';
no warnings 'experimental::signatures';
use Data::Dumper;

my @l = ('1 2', 'p q r', 's 3', '4 5 t');
say Dumper([split_array(@l)]);

sub split_array (@list) {
my (@digits, @letters);
for my $item (@list) { my (@ds, @ls); for my$char (split m{\s+}mxs, $item) { if ($char =~ m{\d}mxs) { push @ds, $char } else { push @ls,$char }
}
push @digits,  \@ds if @ds;
push @letters, \@ls if @ls;
}
return (\@digits, \@letters);
}


Weâ€™re going for a straight translation in Raku:

#!/usr/bin/env raku
use v6;
sub MAIN {
my @l = '1 2', 'p q r', 's 3', '4 5 t';
my ($digits,$letters) = split-array(@l);
say $digits; say$letters;
}

sub split-array (@list) {
my (@digits, @letters);
for @list -> $item { my (@ds, @ls); for$item.comb(/\S/) -> $char { if ($char ~~ /\d/) { @ds.push: $char } else { @ls.push:$char }
}
@digits.push: @ds if @ds;
@letters.push: @ls if @ls;
}
return (@digits, @letters);
}


Wellâ€¦ I guess this is everything, stay safe people!

Comments? Octodon, , GitHub, Reddit, or drop me a line!