I'm always amazed at how far technology has come. If you told me twenty years ago, I'd be completing this challenge 41,000 feet in the air on a device that is $300 (about US$200), I'd totally laugh at you :)

Unfortunately the budget airline I'm flying with (Air Asia X) doesn't offer WiFi, otherwise I could also push this 41,000 feet in the air too.

## Weekly Challenge 219

## Task 1: Sorted Squares

### Task

You are given a list of numbers.

Write a script to square each number in the list and return the sorted list, increasing order.

### My solution

This is straight forward, so doesn't need much explanation. I take the input, square each number, sort the list, and finally print the list.

### Examples

```
$ ./ch-1.py -2 -1 0 3 4
0, 1, 4, 9, 16
$ ./ch-1.py 5 -4 -1 3 6
1, 9, 16, 25, 36
```

## Task 2: Travel Expenditure

### Task

You are given two list, `@costs`

and `@days`

.

The list `@costs`

contains the cost of three different types of travel cards you can buy.

For example `@costs = (5, 30, 90)`

```
Index 0 element represent the cost of 1 day travel card.
Index 1 element represent the cost of 7 days travel card.
Index 2 element represent the cost of 30 days travel card.
```

The list `@days`

contains the day number you want to travel in the year.

For example: `@days = (1, 3, 4, 5, 6)`

The above example means you want to travel on day 1, day 3, day 4, day 5 and day 6 of the year.

Write a script to find the minimum travel cost.

### My solution

For this task, it's back to using a recursive function. For the input, I take assume the first three values are the cost for a 1 day, 7 day and 30 day pass, and use the rest of the numbers for the `days`

list.

I start by defining the `passes`

dict (hash in Perl), where the key is the days the pass is valid for, and the value is the cost of the pass. I also create the `travel_on`

list (array in Perl) representing the days that I want to travel. This list is sorted numerically.

I then call the `buy_pass`

function with the `passes`

dict and `travel_on`

list. If the later is empty, I don't need to buy any more passes, so return `0`

. I loop through each item in the `passes`

dict. I know that the days the pass doesn't cover is the first day (i.e. `travel_on[0]`

) plus the days of the pass. I call the function again with the remaining days. I also track the minimum spend, and this is record and sent upstream of the function.

### Examples

```
$ ./ch-2.py 2 7 25 1 5 6 7 9 15
11
$ ./ch-2.py 2 7 25 1 2 3 5 7 10 11 12 14 20 30 31
20
```

## Top comments (0)