Skip to content

Commit f782173

Browse files
authored
Merge pull request #11744 from arnesom/branch-for-challenge-313
Arne Sommer
2 parents 9831969 + 27e0f07 commit f782173

File tree

5 files changed

+165
-0
lines changed

5 files changed

+165
-0
lines changed

challenge-313/arne-sommer/blog.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
http://localhost/reverse-broken.html
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#! /usr/bin/env raku
2+
3+
unit sub MAIN (:i(:$in) where $in.chars > 0,
4+
:o(:$out) where $out.chars > 0,
5+
:v(:$verbose));
6+
7+
sub grouped ($str)
8+
{
9+
my @parts = gather
10+
{
11+
my $curr;
12+
my $count = 0;
13+
14+
for $str.comb -> $char
15+
{
16+
if $count && $curr ne $char
17+
{
18+
take $curr x $count;
19+
$count = 0;
20+
}
21+
$curr = $char;
22+
$count++;
23+
}
24+
take $curr x $count;
25+
}
26+
27+
say ": Grouped '$str' as { @parts.raku }" if $verbose;
28+
return @parts;
29+
}
30+
31+
my @in = grouped($in);
32+
my @out = grouped($out);
33+
34+
my @combined = roundrobin(@in, @out);
35+
36+
say ": Zipped: {@combined.raku }" if $verbose;
37+
38+
my $status = True;
39+
40+
for @combined -> @pair
41+
{
42+
if @pair.elems == 1
43+
{
44+
$status = False;
45+
say ": Trailing character: { @pair.flat }" if $verbose;
46+
last;
47+
}
48+
49+
if @pair[0].substr(0,1) ne @pair[1].substr(0,1)
50+
{
51+
$status = False;
52+
say ": Different starting characters: { @pair[0].substr(0,1) } <> { @pair[1].substr(0,1) }" if $verbose;
53+
last;
54+
}
55+
56+
if @pair[0].chars > @pair[1].chars
57+
{
58+
$status = False;
59+
say ": Not enough '{ @pair[0].substr(0,1) }' characters. Got { @pair[1].chars } requires { @pair[0].chars } " if $verbose;
60+
last;
61+
}
62+
63+
say ": Ok ('{ @pair[0] }' vs '{ @pair[1] }')" if $verbose;
64+
65+
}
66+
67+
say $status;
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#! /usr/bin/env raku
2+
3+
unit sub MAIN (:i(:$in) where $in.chars > 0,
4+
:o(:$out) where $out.chars > 0,
5+
:v(:$verbose));
6+
7+
sub grouped ($str)
8+
{
9+
my @parts = gather
10+
{
11+
my $curr;
12+
my $count = 0;
13+
14+
for $str.comb -> $char
15+
{
16+
if $count && $curr ne $char
17+
{
18+
take $curr x $count;
19+
$count = 0;
20+
}
21+
$curr = $char;
22+
$count++;
23+
}
24+
take $curr x $count;
25+
}
26+
27+
say ": Grouped '$str' as { @parts.raku }" if $verbose;
28+
return @parts;
29+
}
30+
31+
my @in = grouped($in);
32+
my @out = grouped($out);
33+
34+
my @combined = roundrobin(@in, @out);
35+
36+
say ": Zipped: {@combined.raku }" if $verbose;
37+
38+
my $status = True;
39+
40+
for @combined -> @pair
41+
{
42+
if @pair.elems == 1
43+
{
44+
$status = False;
45+
say ": Trailing character: { @pair.flat }" if $verbose;
46+
last;
47+
}
48+
49+
if @pair[0].substr(0,1) ne @pair[1].substr(0,1)
50+
{
51+
$status = False;
52+
say ": Different starting characters: { @pair[0].substr(0,1) } <> { @pair[1].substr(0,1) }" if $verbose;
53+
last;
54+
}
55+
56+
if @pair[0].chars > @pair[1].chars
57+
{
58+
$status = False;
59+
say ": Not enough '{ @pair[0].substr(0,1) }' characters. Got { @pair[1].chars } requires { @pair[0].chars } " if $verbose;
60+
last;
61+
}
62+
63+
say ": Ok ('{ @pair[0] }' vs '{ @pair[1] }')" if $verbose;
64+
65+
}
66+
67+
say $status;
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#! /usr/bin/env raku
2+
3+
unit sub MAIN ($str where $str.chars > 0,
4+
:v(:$verbose));
5+
6+
my @str = $str.comb;
7+
my @letters = @str.grep( /<:L>/ );
8+
9+
if $verbose
10+
{
11+
say ": Letters: { @letters.join(",") }";
12+
say ": Reverse: { @letters.reverse.join(",") }";
13+
}
14+
15+
@str.map({ /<:L>/ ?? @letters.pop !! $_ }).join.say;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#! /usr/bin/env raku
2+
3+
unit sub MAIN ($str where $str.chars > 0,
4+
:v(:$verbose));
5+
6+
my @str = $str.comb;
7+
my @letters = @str.grep( /<:L>/ );
8+
9+
if $verbose
10+
{
11+
say ": Letters: { @letters.join(",") }";
12+
say ": Reverse: { @letters.reverse.join(",") }";
13+
}
14+
15+
@str.map({ /<:L>/ ?? @letters.pop !! $_ }).join.say;

0 commit comments

Comments
 (0)