Loading...
koki1234 avatar koki1234 4 Точки

03. SoftUni Bar Income

Здравейте,

Джъдж ми дава 70/100 на задачата Bar Income. Някой има ли идея къде може да е проблема?

https://pastebin.com/Ps6gRBw1

1.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 the 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 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$',

'%Peter%<Gum>|1|1.3$',

'%Maria%<Cola>|1|2.4$',

'end of shift']

George: Croissant - 20.60

Peter: Gum - 1.30

Maria: Cola - 2.40

Total income: 24.30

Each line is valid, so we print each order, calculating the total price of the product bought.

At the end we print the total income for the day

 

['%InvalidName%<Croissant>|2|10.3$',

'%Peter%<Gum>1.3$',

'%Maria%<Cola>|1|2.4',

'%Valid%<Valid>valid|10|valid20$',

'end of shift']

Valid: Valid - 200.00

Total income: 200.00

On the first line, the customer name isn`t valid, so we skip that line.
The second line is missing product count.

The third line don`t have a valid price.

And only the forth line is valid

Тагове:
0
Programming Fundamentals
MartinBG avatar MartinBG 4803 Точки
Best Answer

Регекса не покрива напълно изискванията по условие.

Променете го на:

  let pattern = /%(?<customer>[A-Z][a-z]*)%[^|$%.]*?<(?<product>\w+)>[^|$%.]*?\|(?<count>\d+)\|[^|$%.]*?(?<price>[0-9]+(\.[0-9]+)?)\$/;

 

0
01/03/2022 04:26:11
VasilKos avatar VasilKos 17 Точки

MartinBG,

може ли кратък коментар на разликата между "greedy and lazy quantifiers".

* или *? . И аз се 4упя тук. 4етох в нета, но не става съвсем ясно.

0
koki1234 avatar koki1234 4 Точки

Благодаря много! :)

До @VasilKos, бях попаднал на едно клипче в ютуб, в което беше даден много добър пример за разликата между двете. Ето линка: https://www.youtube.com/watch?v=c9HbsUSWilw, примерът е към 10та минута.

1
01/03/2022 16:01:04
MartinBG avatar MartinBG 4803 Точки

@VasilKos, при greedy ще се селектират възможно най-много символи от текста, докато при lazy ще се селектира най-кратката част от него, като и в двата случая трябва да са изпълнени всички останали условия на регекса.

Пример:

Текст: a1bxxxxa2b

Регекс: a.*b 

Резултат: a1bxxxxa2b (целият текст е матчнат)

 

Регекс: a.*?b 

Резултат: a1bxxxxa2b (матчнати са две групи: a1b и a2b)

 

Вижте и примера от видеото, което е дал @koki1234

1
VasilKos avatar VasilKos 17 Точки

Благодаря и на двамата : @ Мартин, koki1234.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.