TASK #1 › Pack a Spiral
The task
You are given an array @A
of items (integers say, but they can be anything).
Your task is to pack that array into an MxN
matrix spirally counterclockwise, as tightly as possible. Tightly means the absolute value |M-N| of the difference has to be as small as possible.
My solution
This challenge is kinda of the reverse of task 2 from challenge 88. In that task we were given a spiral and had to unwind it.
This task can be broken up into three steps:
- Work out the tightest grid.
- Work with
$y
from 1 to one less than the array size. - If the array size can be evenly divided by
$y
and it is tighter than the current grid size, update$max_x
and$max_y
.
- Work with
- Populate the grid
- Create a
@direction
array with the x/y offsets for right, up, left and down. - Create a loop from 0 to
$#values
. - Put that value in the given location.
- If the next x/y value is either out of bounds or that position already has a value, change directions.
- Create a
- Display the grid
- Since 0,0 represents the bottom left, we use the reverse function on the
@grid
array. - I use
sprintf
to right justify numbers and left justify strings. This ensure that even if the lengths of the values are different, they will be correctly aligned.
- Since 0,0 represents the bottom left, we use the reverse function on the
Examples
» ./ch-1.pl 1 2 3 4 5 6
6 5 4
1 2 3
» ./ch-1.pl 1 2 3 4 5 6 7 8 9 10 11 12
9 8 7 6
10 11 12 5
1 2 3 4
» ./ch-1.pl the quick brown fox jumps over the lazy dog
the over jumps
lazy dog fox
the quick brown
TASK #2 › Origin-containing Triangle
The task
You are given three points in the plane, as a list of six co-ordinates: A=(x1,y1)
, B=(x2,y2)
and C=(x3,y3)
.
Write a script to find out if the triangle formed by the given three co-ordinates contain origin (0,0).
Print 1 if found otherwise 0.
My solution
I have debated whether I should submit a solution to this task. I am, but with a massive caveat. My high school algebra was more than 25 years ago, and the solution is not my own workings. I've taken the first solution from this website, and convert it to Perl.
Examples
» ./ch-2.pl "A=(0,1), B=(1,0) and C=(2,2)"
0
» ./ch-2.pl "A=(1,1), B=(-1,1) and C=(0,-3)"
1
» ./ch-2.pl "A=(0,1), B=(2,0) and C=(-6,0)"
1
Top comments (0)