File tree 5 files changed +165
-0
lines changed
challenge-313/arne-sommer
5 files changed +165
-0
lines changed Original file line number Diff line number Diff line change
1
+ http://localhost/reverse-broken.html
Original file line number Diff line number Diff line change
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 ;
Original file line number Diff line number Diff line change
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 ;
Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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 ;
You can’t perform that action at this time.
0 commit comments