aboutsummaryrefslogtreecommitdiff
path: root/challenge-059/arne-sommer/raku/linked-list-linked
blob: 00796d86767db0d1ada415414322049234f5f4fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#! /usr/bin/env raku

multi MAIN (Int $k = 3, Str $list = "1 4 3 2 5 2", :$verbose)
{
  MAIN($k, $list.words, :$verbose);
}

multi MAIN (Int $k = 3, *@list, :$verbose)
{
  my @lower;
  my @higher;

  for @list -> $elem
  {
    $elem >= $k
      ?? @higher.push: $elem
      !! @lower.push: $elem;
  }

  my @result = (@lower, @higher).flat;

  if $verbose
  {
    say ": == : $k";
    say ": <  : @lower[]";
    say ": >= : @higher[]";
  }
  
  say @result.join(" → ") if $verbose;

  class ListElem
  {
    has $.value;
    has $.next is rw;

    method display
    {
      print $.value;
      if $.next { print " → "; $.next.display; } else { say ""; }
    }
  }
  
  my $head;

  $head = ListElem.new(value => $_, next => $head) for @result.reverse;

  $head.display; 
}