Programming contests

DEIK Regionális Programozó Csapatverseny, egyetemi kategória, 2019. december 8.

December 8, 2019, 10:15 AM – December 8, 2019, 3:15 PM

Beer Bill

Pub bills were introduced into daily life long before computers even existed. People tend to think that once a bill has been paid, it is no more than a pathetic paper scrap not worthy of any more attention. The fact, completely overlooked by established computer science streams, is that the scribblings on the bill represent highly formalized and often quite nontrivial text suitable for many formal language applications and analyses.

A bill consists of lines of characters. Each line is either a priced line or a rake line. A priced line begins with a positive integer – the price of a food or drink item –, which is optionally followed by some number of vertical bars. The price of the line is calculated as follows: if the bars are present, the price of the line is equal to the item price multiplied by the number of bars; otherwise, the price of the line is equal to the price of the item. A rake line contains only vertical bars (similar to rake dents, hence the name rake line), each bar stands for one beer bought by the bill holder. The price of the rake line is the price of one beer multiplied by the number of the bars on the line. In this problem, the beer price is equal to 42 monetary units. The bill total is the total of prices of all lines on the bill.

We present you with a formal definition of the so-called Raked bill language, as far as we know, the first of its kind in the whole history of computer science. The bills in this problem are expressed in the Raked bill language.

<BILL>        ::= <LINE> | <LINE><BILL>
<LINE>        ::= <PRICED_LINE><line_break> | <RAKE_LINE><line_break>
<PRICED_LINE> ::= <PRICE_SPEC> | <PRICE_SPEC><RAKE>
<RAKE_LINE>   ::= <RAKE>
<PRICE_SPEC>  ::= <PUB_INTEGER><comma><hyphen>
<RAKE>        ::= <rake_dent> | <rake_dent><RAKE>
<PUB_INTEGER> ::= <dig_1_9> | <dig_1_9><DIG_SEQ>
<DIG_SEQ>     ::= <dig_0_9> | <dig_0_9><DIG_SEQ>
<dig_1_9>     ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
<dig_0_9>     ::= '0' | <dig_1_9>
<rake_dent>   ::= '|'          // ASCII character 124
<comma>       ::= ','          // ASCII character 44
<hyphen>      ::= '-'          // ASCII character 45
<line_break>  ::= LF           // ASCII character 10, line feed

In the language specification above, the actual characters which appear on the bill are enclosed in single quotation marks to distinguish them from the other parts of the specification. The symbol // introduces a single-line comment, it is not part of the language definition.

Input Specification

The input contains a nonempty sequence of lines, which specify a bill. Each input line is either a priced line or a rake line. A priced line starts with a positive integer not exceeding 1 000, followed immediately by a comma and a minus sign. Optionally, the minus sign is followed by a nonzero number of vertical bars. A rake line contains nonzero number of vertical bars and no other symbols. In the whole bill, the vertical bar is represented as '|', ASCII character 124. Each line contains at most 1 000 characters, there are no blanks on the line. There are at most 1 000 input lines. The input does not contain any empty lines. All prices are expressed in the same monetary units.

Output Specification

Output a single number – the bill total rounded up to the nearest 10s. The number should be in the <PRICE_SPEC> format, that is, it should be immediately followed by a comma and a minus sign.

Sample Input 1

  1. ||||
  2. 123,-|||
download as text file

Output for Sample Input 1

  1. 540,-
download as text file

Sample Input 2

  1. |||
  2. 12,-|
  3. |||
  4. 12,-||
  5. 10,-|
download as text file

Output for Sample Input 2

  1. 300,-
download as text file

Sample Input 3

  1. |
  2. 8,-|
download as text file

Output for Sample Input 3

  1. 50,-
download as text file

Original Problem

Czech Technical University Open Contest, 2019

University of Debrecen; Faculty of Informatics; v. 09/30/2024