blob: 353698db4fc3114c7eb3dfdc8c3f1d5c2ae6e8fe (
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
|
#+SETUPFILE: ~/.emacs.d/org-templates/level-2.org
#+HTML_LINK_UP: ../index.html
#+OPTIONS: toc:2
#+EXPORT_FILE_NAME: index
#+DATE: 2021-02-02
#+TITLE: Challenge 098
* Task 1 - Read N-characters
You are given file =$FILE=.
Create subroutine =readN($FILE, $number)= returns the first n-characters
and moves the pointer to the =(n+1)th= character.
** Raku
- Program: [[file:raku/ch-1.raku]]
=readN= is defined as such:
#+BEGIN_SRC raku
sub readN (
IO $file, Int $chars --> Str
) {
...
}
#+END_SRC
The pointer index is stored in a state array (=%pointers=). It's stores
the pointer separately for each file. It's initialized with 0.
#+BEGIN_SRC raku
# %pointers stores the pointer index.
state Int %pointers;
%pointers{$file} = 0 without %pointers{$file};
#+END_SRC
The pointer is updated & required string is returned.
#+BEGIN_SRC raku
with %pointers{$file} -> $idx {
%pointers{$file} += $chars;
return $file.slurp.substr($idx, $chars);
}
#+END_SRC
|