Re: Pattern matching simultaneous substitution
by kcott (Archbishop) on Jan 05, 2022 at 20:24 UTC
|
| [reply] [d/l] [select] |
|
Thanks Ken. Re point #2, I put it there, because there can be cases without Ds, but only Us. Therefore there needs to be a conditional on that scenario as well.
| [reply] |
Re: Pattern matching simultaneous substitution
by choroba (Cardinal) on Jan 05, 2022 at 20:15 UTC
|
> 4. if no D or U are present, then all s becomes
Becomes what?
If the script works correctly for the sample input, please add a sequence that produces a wrong output.
Moreover, also include the expected output for the part that the script doesn't process correctly.
General comment: Use strict and warnings. They prevent some beginner mistakes.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
| [reply] [d/l] |
|
Sorry, I missed that :)
- if no D or U are present, then all s becomes i
The following one was not properly converted:
old:ssssssDDDDDDDDDDDDDDsssssssssssssDDDDDssssssssssssssssssssssssssss
+ssssssssssssssDDDDDDDssssssssssssssssssssssssssssssssssssssssssssssss
+sssssssssssssDDDDDDssssssssssssssssssssssssssssssssssssssssssssssssss
+sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+ssssssssssss
new:OOOOOOMMMMMMMMMMMMMMIIIIIIIIIIIIIMMMMMOOOOOOOOOOOOOOOOOOOOOOOOOOOO
+OOOOOOOOOOOOOOMMMMMMMIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+IIIIIIIIIIIIIMMMMMMssssssssssssssssssssssssssssssssssssssssssssssssss
+sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+ssssssssssss
| [reply] [d/l] [select] |
|
I still don't understand the rules. If the input is
DDssDD
what should it become? Are the "s" prior to "D" or following a "D"?
In the new/old example, why are the final "s" not replaced? Don't they follow a "D"?
Please, try to be more precise.
Also, you can easily shorten the data, 2 consecutive characters of each type would do.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
| [reply] [d/l] [select] |
|
|
|
|
Re: Pattern matching simultaneous substitution
by tybalt89 (Monsignor) on Jan 05, 2022 at 23:36 UTC
|
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11140181
use warnings;
my %h = qw( bU i aU o bD o aD i );
while( <DATA> )
{
print "\n$_" . <DATA>;
/U|D/ or tr/s/i/;
s/(s*)(U|D)(s*)/$h{"b$2"} x length($1) . 'M' . $h{"a$2"}x length($3)
+ /ge;
print;
}
__DATA__
sssss
iiiii
sssUUss
iiiMMoo
sssDDss
oooMMii
sssssDDDDDDDssssUUUss
oooooMMMMMMMiiiiMMMoo
sssssUUUUUUUssssDDDss
iiiiiMMMMMMMooooMMMii
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+sssssssssssssssssssssssssssssssssssssssssssssssss
???
ssDDDDDDDDDDDDDDDDDDDDDDssssssssDDDDDDDDDDssssssssDDDDDssssssssssssssD
+DDDDDDDDDDDDDDDsDDDDDDDDDssssssssssssssUUUUUUUUUs
???
Outputs (input/expected/actual):
sssss
iiiii
iiiii
sssUUss
iiiMMoo
iiiMMoo
sssDDss
oooMMii
oooMMii
sssssDDDDDDDssssUUUss
oooooMMMMMMMiiiiMMMoo
oooooMMMMMMMiiiiMMMoo
sssssUUUUUUUssssDDDss
iiiiiMMMMMMMooooMMMii
iiiiiMMMMMMMooooMMMii
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+sssssssssssssssssssssssssssssssssssssssssssssssss
???
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
ssDDDDDDDDDDDDDDDDDDDDDDssssssssDDDDDDDDDDssssssssDDDDDssssssssssssssD
+DDDDDDDDDDDDDDDsDDDDDDDDDssssssssssssssUUUUUUUUUs
???
ooMMMMMMMMMMMMMMMMMMMMMMiiiiiiiiMMMMMMMMMMiiiiiiiiMMMMMiiiiiiiiiiiiiiM
+MMMMMMMMMMMMMMMiMMMMMMMMMiiiiiiiiiiiiiiMMMMMMMMMo
??? where no expected output was provided.
| [reply] [d/l] [select] |