# Raku challenge week 72

Raku challenge, week 72. Task 1: count trailing zeroes in a factorial of an integer. Task 2: Get lines A to B from a text file.

This week, two simple tasks were offered for our entertainment.

## Count trailing zeros

The task is to count trailing zeros in a factorial of a given integer number.

Computing factorials is my favourite task in Raku, and it is an extremely simple task:

`my \$f = [*] 1..\$n;`

Counting zeroes at the end of the string is a bit trickier:

`say (\$f ~~ / 0+ \$/ // '').chars;`

The number is treated as a string here, and if there are trailing zeroes, they will be taken to a Match object, which you can then implicitly convert to a string and take its length. If there are no zeros, we take an empty string instead.

So, the whole program is here:

```unit sub MAIN(Int \$n);

my \$f = [*] 1..\$n;
say "\$n! = \$f";
say (\$f ~~ / 0+ \$/ // '').chars;```

Run it to see how it works:

```\$ raku ch-1.raku 10
10! = 3628800
2```

## Line range

The second task is to take a text file `input.txt` and print the lines between A and B, where A and B are integers corresponding the existing line numbers in the file.

Well, this task is rather simple, and can be done as a one-liner:

```unit sub MAIN(Int \$a, Int \$b where 0 < \$a <= \$b <= 100);

.say for 'input.txt'.IO.lines[\$a-1 ..^ \$b];```

If the file is small enough, you don’t have to worry about the efficiency of the program. For bigger files, probably, too, as `lines` returns a Supply, and I hope that it is lazy, so the program will not take the whole file in memory before you can read its first lines.