XP is just a number PerlMonks

### Re^2: string functions

by valavanp (Curate)
 on Oct 25, 2006 at 10:23 UTC ( #580533=note: print w/replies, xml ) Need Help??

in reply to Re: string functions

your solution works for 2A2B2C. But for 4AC, ABC,BC it directly prints the string. your solutions.

Replies are listed 'Best First'.
Re^3: string functions
by Hofmator (Curate) on Oct 25, 2006 at 10:40 UTC
Is this what you want? Sorry, but your speccs are not very clear ...
```2A2B2C = 28.423828125
4AC = 5.315625
ABC = 2.165625
BC = 2.8875

This was produces by the following code (adapted from holiy's solution):

```use strict;
use warnings;

my @p = (1.5, 2.5,  3.5 );
my @m = (0.5, 0.55, 0.60);

sub calc
{
my \$i = shift || 1;

my \$idx = ord(shift)-65;

return \$m[\$idx] * (\$p[\$idx]**\$i);
}

for my \$str (qw/2A2B2C 4AC ABC BC/) {
my \$res = 1;
while (\$str =~ /(\d)?([A-Z])/g) {
\$res *= calc(\$1, \$2);
}

print "\$str = \$res\n";
}

-- Hofmator

Code written by Hofmator and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

i have the str in an excel file which has approximately 400 entries like 4ABC,BC,3C,2BC,3B,5C,B2CD,3AB2C,3A,C,D... etc. But the maximum no. of characters is 6.How can i pass it.
1. mark the column in Excel and copy
2. paste the column into the DATA section of the follwoing script (replacing the example that is already there)
3. run the script and redirect the output into a file called output.csv
4. open the output.csv in Excel and copy and paste from there
```use strict;
use warnings;

my @p = (1.5, 2.5,  3.5 );
my @m = (0.5, 0.55, 0.60);

sub calc
{
my \$i = shift || 1;

my \$idx = ord(shift)-65;

return \$m[\$idx] * (\$p[\$idx]**\$i);
}

for my \$str (<DATA>) {
chomp(\$str);

my \$res = 1;
while (\$str =~ /(\d)?([A-Z])/g) {
\$res *= calc(\$1, \$2);
}

print "\$str,\$res\n";
}

__DATA__
2A2B2C
ABC
You have to make sure, though, that your @p and @m Arrays are expanded to the appropriate number of elements, corresponding to the number of letters from the alphabet that you use. So if you eg. use the letters from A to D then @p and @m should both have 4 elements.

-- Hofmator

Code written by Hofmator and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Create A New User
Node Status?
node history
Node Type: note [id://580533]
help
Chatterbox?
 [marinersk]: karlgothebier I am glad to see you are still here. Have you decided on retirement or to continue the job hunt?

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (11)
As of 2017-05-25 15:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My favorite model of computation is ...

Results (187 votes). Check out past polls.