Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 03. SoftUni Bar Income
- Let`s take a break and visit the game bar at SoftUni. It is about time for the people behind the bar to go home and you are the person
- who has to draw the line and calculate the money from the products that were sold throughout the day. Until you receive a line with
- text "end of shift" you will be given lines of input. But before processing that line you have to do some validations first.
- Each valid order should have a customer, product, count and a price:
- • Valid customer's name should be surrounded by '%' and must start with a capital letter, followed by lower-case letters
- • Valid product contains any word character and must be surrounded by '<' and '>'
- • Valid count is an integer, surrounded by '|'
- • Valid price is any real number followed by '$'
- The parts of a valid order should appear in the order given: customer, product, count and a price.
- Between each part there can be other symbols, except ('|', '$', '%' and '.')
- For each valid line print on the console: "{customerName}: {product} - {totalPrice}"
- When you receive "end of shift" print the total amount of money for the day rounded to 2 decimal places in the following format:
- "Total income: {income}".
- Input / Constraints
- • Strings that you have to process until you receive text "end of shift".
- Output
- • Print all of the valid lines in the format "{customerName}: {product} - {totalPrice}"
- • After receiving "end of shift" print the total amount of money for the day rounded to 2 decimal places in the following format:
- "Total income: {income}"
- • Allowed working time / memory: 100ms / 16MB.
- Examples
- Input Output Comment
- %George%<Croissant>|2|10.3$ George: Croissant - 20.60 Each line is valid, so we print each order,
- %Peter%<Gum>|1|1.3$ Peter: Gum - 1.30 calculating the total price of the product bought.
- %Maria%<Cola>|1|2.4$ Maria: Cola - 2.40 At the end we print the total income for the day
- end of shift Total income: 24.30
- %InvalidName%<Croissant>|2|10.3$ Valid: Valid - 200.00 On the first line, the customer name isn`t valid,
- %Peter%<Gum>1.3$ Total income: 200.00 so we skip that line.
- %Maria%<Cola>|1|2.4 The second line is missing product count.
- %Valid%<Valid>valid|10|valid20$ The third line don`t have a valid price.
- end of shift And only the forth line is valid
- using System;
- using System.Text.RegularExpressions;
- using System.Collections.Generic;
- public class Program
- {
- public static void Main()
- {
- var pattern = @"%(?<Customer>[A-Z][a-z]+)%[^|$%.]*<(?<Product>\w+)>[^|$%.]*\|(?<Count>\d+)\|[^|$%.]*?(?<Price>\d+(.\d+)?)\$";
- var listValidOrders = new List<string>();
- var totalIncome = 0m;
- var input = "";
- while ((input = Console.ReadLine()) != "end of shift")
- {
- var matchInput = Regex.Matches(input, pattern);
- if (matchInput.Success)
- { //група 1=(.\d+)
- var customerName = matchInput.Groups["Customer"/*2*/].Value; //група 2=(?<Customer>[A-Z][a-z]+)
- var product = matchInput.Groups["Product"/*3*/].Value; //група 3=(?<Product>\w+)
- var count = matchInput.Groups["Count"/*4*/].Value; //група 4=(?<Count>\d+)
- var price = matchInput.Groups["Price"/*5*/].Value; //група 5=(?<Price>\d+(.\d+)?)
- var totalPrice = int.Parse(count) * decimal.Parse(price);
- totalIncome += totalPrice;
- var validOrder = $"{customerName}: {product} - {totalPrice:F2}";
- listValidOrders.Add(validOrder);
- }
- }
- Console.WriteLine(string.Join("\n", listValidOrders));
- Console.WriteLine($"Total income: {totalIncome:F2}");
- }
- }
Add Comment
Please, Sign In to add comment