Simon Green

Posted on

# Weekly Challenge 135

## TASK #1 › Middle 3-digits

### Task

You are given an integer.

Write a script find out the middle 3-digits of the given integer, if possible otherwise throw sensible error.

### My solution

This task was pretty straight forward.

• Check the an integer was provided.
• If it is negative, make it positive with the `abs` function.
• Display an error if it contains an even number of digits, or one digit
• The first character we want to show can be calculated by `(length - 3) ÷ 2`. Use this value with `substr` to display the middle three digit

### Examples

``````\$ ./ch-1.pl 1234567
345

\$ ./ch-1.pl -123
123

\$ ./ch-1.pl 1
too short

\$ ./ch-1.pl 10
even numbers of digits
``````

## TASK #2 › Validate SEDOL

### Task

You are given 7-characters alphanumeric SEDOL.

Write a script to validate the given SEDOL. Print 1 if it is a valid SEDOL otherwise 0.

### My solution

The first thing that I need to do is check if the input is valid. I use the regular expression `^[B-DF-HJ-NP-TV-Z0-9]{6}[0-9]\$` to perform this. According to the specification, vowels are not valid. Did anyone else sing the alphabet song when generating the regular expression? :)

I set the value of `\$sum` to the last digit. I then go through the other digits. I work out the value of the digit in the position (0-9 if it is is a number, 10-35 if it is a letter) and multiple the weight.

If the resulting sum is divisible by 10, I return 1 (a valid SEDOL value), otherwise I return 0.

### Examples

``````\$ ./ch-2.pl 2936921
1

\$ ./ch-2.pl 1234567
0

\$ ./ch-2.pl B0YBKL9
1
``````