aboutsummaryrefslogtreecommitdiff
path: root/challenge-072/bob-lied/README
blob: be171d638ea4ce3fc7e13bb5fcb9bb51f7c31e20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Solutions to weekly challenge 72 by Bob Lied.

https://perlweeklychallenge.org/blog/perl-weekly-challenge-072/

This week, I would like to add two personal elements to the problem:
(1) create a template for perl-vim that sets up these weekly challenges
(includes Test::More, a skeleton for checking ARGV, and whatever else
is quickly becoming a pattern; and (2) use a github issue in the submission
process, just to learn more about using git and github.

* TASK #1 > Trailing Zeroes

** Initial thoughts

Too easy, unless I'm missing something.  The result gets a zero on the end every time
it's multiplied by 10, and since we're doing factorials, that will happen every time N
rolls past a multiple of 5.  The answer is int(N/5), I think, but I'll need to convince
myself completely.

We could make it a little tougher by actually calculating N!, and maybe using Memoize
as an optimization.  And maybe finding out how high N can be until overflow or waiting time
make it impractical.

** Post Solution Thoughts

Yep, it was really that easy.  I implemented the factorial using Memoize just
for fun.  The highest number that didn't roll over to floating point was 20!.


** Problem Statement

You are given a positive integer $N (<= 10).

Write a script to print number of trailing zeroes in $N!.

* TASK #2 > Lines Range

** Initial Thoughts

This has come up often enough that I know I've done it in sed and awk; and in
a pipeline with head and tail.  The flip-flop operator comes to mind, but
there'll be some experimentation for boundary conditions.  Also some test
cases for A or B being outside the range of the file or having an empty file.

** Post Solution Thoughts

The hardest part of this turned out to be how to set up tests.  I wanted the
testing to be self-contained, so I put the test data into __DATA__.  But then
re-reading that repeatedly for different tests required seeking back to the
start and also resetting $.  A couple of trips to Google there.

I also wanted to capture the output in a variable and not just print to the
console.  I knew that a string could be opened as a file handle using a
reference to the string.  It should have been easy; but I spent a long time
debugging before I realized that I had typed \&TestResult instead of
\$TestResult.


** Problem Statement

You are given a text file name $file and range $A - $B where $A <= $B.

Write a script to display lines range $A and $B in the given file.

(That's A and B inclusive, from the examples.)