pb071(pexam): adjust the exam before the seminars

* move the file
* remove the queries
* adjust the output

Signed-off-by: Matej Focko <xfocko@fi.muni.cz>
This commit is contained in:
Matej Focko 2023-05-07 20:50:52 +02:00
parent c0ff31d636
commit f36b3bc9ee
Signed by: mfocko
GPG key ID: 7C47D46246790496

View file

@ -1,4 +1,5 @@
--- ---
slug: cams
title: Practice exam C title: Practice exam C
description: | description: |
Stalking cars… Stalking cars…
@ -24,9 +25,9 @@ description: |
Your task is to write a program `cams` that will be processing input from the Your task is to write a program `cams` that will be processing input from the
cams that are capable of identifying license plates on the cars and then cams that are capable of identifying license plates on the cars and then
evaluate the queries on the given data. Your contributions to the society are print out summary based on the input data. Your contributions to the society are
very much appreciated and may (or may not) be used for (each or none) of the very much appreciated and may (or may not) be used for (each or none) of the
following purposes: following purposes[^1]:
* stalking people leaving and coming back home, * stalking people leaving and coming back home,
* retroactively making people pay for the parking, * retroactively making people pay for the parking,
@ -34,32 +35,19 @@ following purposes:
* tracking people that don't pay tolls, or * tracking people that don't pay tolls, or
* convict employees leaving the work prematurely. * convict employees leaving the work prematurely.
## Format of the input files ## Format of the input file
Input for your program consists of the data from the cameras and queries. You Input for your program consists of the data from the cameras. You will be given
will be **always** given the data from the cameras as a path to a file, whereas the data from the cameras as a path to a file and user should also be able to
user should be able to specify `-` (i.e. `stdin`) as the path to queries. specify `-` (i.e. `stdin`) as the path.
:::tip Validation of data
For the sake of simplicity (and partially relieving the time pressure), you
**are not** required to validate the dates you are given on the input (e.g. leap
years, days in months, etc.).
This is caused by the fact that you will be given just a timestamp that you
**don't** need to process in any (other than suggested ways for debugging).
:::
### Data from the cameras
Each “scan” (i.e. reading) of the cameras consists of the following data: Each “scan” (i.e. reading) of the cameras consists of the following data:
* _camera ID_: non-negative integer identifying a camera * _camera ID_: non-negative integer identifying a camera
* _plate_: string of unknown length that can consist of any characters apart * _plate_: string of unknown length that can consist of any characters apart
from whitespace from whitespace
* _timestamp_: timedate of the scan as an unsigned integer (represented as a * _timestamp_: date and time of the scan as an unsigned integer (represented as
UNIX time) a UNIX time)
:::tip :::tip
@ -74,7 +62,7 @@ And they are compiled into one reading such as:
camera_ID: plate timestamp camera_ID: plate timestamp
There should be always **at least one** space in between each part of the There should be always **at least one** space in between each part of the
reading. Reading are separated by the commas, which may, but don't have to, be reading. Readings are separated by the commas, which may, but don't have to, be
accompanied by whitespace around. accompanied by whitespace around.
#### Examples #### Examples
@ -87,66 +75,42 @@ Few examples of the data from the cameras follow
11: EL9-987 1679541338 ,2 : Foo-666 1683170082,42: YourMum 1683170082, 11: EL9-987 1679541338 ,2 : Foo-666 1683170082,42: YourMum 1683170082,
42: TryToCatchMe 1671602419 , 1234: TryToCatchMe 1671602419, 42: TryToCatchMe 1671602419 , 1234: TryToCatchMe 1671602419,
19: ABC-12-34 1664659649, 69:YouShould-not-pLaCe-4ny-expectations%on^the(input 1680307994, 19: ABC-12-34 1664659649, 69:YouShould-not-pLaCe-4ny-expectations%on^the(input 1680307994,
9 : 9B9-161 1665416417 , 10: 1a1-999 1671602419,1:lmao 1633078256 9 : 9B9-161 1665416417 , 10: 1a1-999 1671602419,1:lmao 1633078256,
16: ABC-12-34 1664609012
``` ```
### Queries
Querying the processed data is done by providing a license plate. You can expect
that the license plates are separated by `\n` (newline, also known as
_ňjůlajn_) **with no other whitespace around**.
#### Examples
Few examples of the queries follow
ABC-12-34
TryToCatchMe
Foo-666
EL9-987
## Format of the output ## Format of the output
:::info :::info
All the examples above consider using data from the first example of the input. All the examples consider using data from the example of the input.
::: :::
You may encounter these situations (and handle them in the following order): You are expected to print out the dates and cameras that has captured the
1. License plate was not found license plate for each of them (in a sorted fashion).
``` If there are multiple scans present and the timespan (i.e. time difference
404-not-found between the scans is bigger than 60 minutes, you should separate them by a
*** 404-not-found *** newline). For example:
License plate was not found.
```
1. License plate was found
In such case, you are expected to print out the dates and cameras that has ```
captured the license plate. *** ABC-12-34 ***
25: Fri Oct 1 10:50:56 2021
If there are multiple scans present and the timespan (i.e. time difference 10: Sat Oct 1 09:18:32 2022
between the scans is bigger than 60 minutes, you are to separate them by a 16: Sat Oct 1 09:23:32 2022
newline).
``` 19: Sat Oct 1 23:27:29 2022
ABC-12-34 ```
*** ABC-12-34 ***
25: Fri Oct 1 10:50:56 2021
10: Sat Oct 1 09:18:32 2022
19: Sat Oct 1 23:27:29 2022 :::tip
```
:::tip Since you are given the timestamp in a `time_t` compatible type on UN\*X, you
can safely use `ctime(3)` for printing the timestamp as a _human readable_ time
when outputting the date and time.
Since you are given the timestamp in a `time_t` compatible type on UN\*X, you :::
can safely use `ctime` for printing the timestamp as a _human readable_ time
when outputting the date and time.
:::
:::tip :::tip
@ -161,36 +125,37 @@ of the output.
You can also have a look at example usage of your program. We can run your You can also have a look at example usage of your program. We can run your
program from the shell like program from the shell like
$ ./cams example_1.txt - $ ./cams example_1.txt
And then provide the queries, since we specified `-` as the file for the queries And it will produce an output:
> ABC-12-34
*** ABC-12-34 *** *** ABC-12-34 ***
25: Fri Oct 1 10:50:56 2021 25: Fri Oct 1 10:50:56 2021
10: Sat Oct 1 09:18:32 2022 10: Sat Oct 1 09:18:32 2022
16: Sat Oct 1 09:23:32 2022
19: Sat Oct 1 23:27:29 2022 19: Sat Oct 1 23:27:29 2022
> NonExistentLicensePlate
*** NonExistentLicensePlate ***
License plate was not found.
> EL9-987
*** EL9-987 *** *** EL9-987 ***
11: Thu Mar 23 04:15:38 2023 11: Thu Mar 23 04:15:38 2023
> TryToCatchMe *** Foo-666 ***
2: Thu May 4 05:14:42 2023
*** TryToCatchMe *** *** TryToCatchMe ***
42: Wed Dec 21 07:00:19 2022 42: Wed Dec 21 07:00:19 2022
42: Wed Dec 21 07:00:19 2022 42: Wed Dec 21 07:00:19 2022
1234: Wed Dec 21 07:00:19 2022 1234: Wed Dec 21 07:00:19 2022
:::info *** XYZ-98-76 ***
289: Mon Oct 10 17:40:17 2022
Lines prefixed with `> ` in the example above represent the user input.
*** YouShould-not-pLaCe-4ny-expectations%on^the(input ***
::: 69: Sat Apr 1 02:13:14 2023
*** YourMum ***
42: Thu May 4 05:14:42 2023
## Requirements and notes ## Requirements and notes
@ -207,3 +172,5 @@ Lines prefixed with `> ` in the example above represent the user input.
management) should be handled in **the same way** as they were in the management) should be handled in **the same way** as they were in the
homeworks and seminars. homeworks and seminars.
* Your program **must free** all the resources before exiting. * Your program **must free** all the resources before exiting.
[^1]: Subject to NDA.