## задача от Final Exam

Здравейте колеги, пробвах да се решавам една от задачите от минали изпити и незнам къде се обърква всичко

https://pastebin.com/dC7Fxqwr

условието на задачата е :

You are an astronaut who just embarked on a mission across the solar system. Since you will be in space for a long time, you have packed a lot of food with you. Create a program, which helps you  identify how much food you have left and gives you information about its expiration date.

On the first line of the input you will be given a text string. You must extract the information about the food and calculate the total calories.

First you must extract the food info. It will always follow the same pattern rules:

• It will be surrounded by "|" or "#" (only one of the two) in the following pattern:
#{item name}#{expiration date}#{calories}#   or
|{item name}|{expiration date}|{calories}|
• The item name will contain only lowercase and uppercase letters and whitespace
• The expiration date will always follow the pattern: {day}/{month}/{year}, where the day, month and year will be exactly two digits long
• The calories will be an integer between 0-10000

Calculate the total calories of all food items and then determine how many days you can last with the food you have. Keep in mind that you need 2000kcal a day.

### Input / Constraints

• You will receive a single string

### Output

• First print the amount of days you will be able to last with the food you have:

"You have food to last you for: {days} days!"

• The output for each food item should look like this:
"Item: {item name}, Best before: {expiration date}, Nutrition: {calories}"

### Examples

 Input #Bread#19/03/21#4000#|Invalid|03/03.20||Apples|08/10/20|200||Carrots|06/08/20|500||Not right|6.8.20|5| Output Comments You have food to last you for: 2 days! Item: Bread, Best before: 19/03/21, Nutrition: 4000 Item: Apples, Best before: 08/10/20, Nutrition: 200 Item: Carrots, Best before: 06/08/20, Nutrition: 500 We have a total of three matches – bread, apples and carrots. The sum of their calories is 4700. Since you need 2000kcal a day, we divide 4700/2000, which means this food will last you for 2 days. We print each item Input \$\$#@@%^&#Fish#24/12/20#8500#|#Incorrect#19.03.20#450|\$5*(@!#Ice Cream#03/10/21#9000#^#@aswe|Milk|05/09/20|2000| Output Comments You have food to last you for: 9 days! Item: Fish, Best before: 24/12/20, Nutrition: 8500 Item: Ice Cream, Best before: 03/10/21, Nutrition: 9000 Item: Milk, Best before: 05/09/20, Nutrition: 2000 We have three matches. The total calories are 8500 + 9000 + 2000 = 19500, which means you have food for a total of 9 days. Input Hello|#Invalid food#19/03/20#450|\$5*(@ Output Comments You have food to last you for: 0 days! We have no matches, which means we have no food. The colored text is not a match, since it doesn't have a # at the end.
Тагове:
0
icowwww 1453 Точки

Здравей,

Как да намерим задачата като даже и името и го няма?

svephoto задачата е от 01. Programming Fundamentals Final Exam Retake с име Ad Astra.

Goganovradostin задачата има за цел да се изтества използването на regex, затова не смятам, че има смисъл да се търси грешката в това решение.

Ето едно решение намерено във форума https://softuni.bg/forum/34951/ad-astra:

``````import re

text_string = input()

regex = r'(#|\|)([A-Za-z\s]+)\1(\d{2,2}/\d{2,2}/\d{2,2})\1(\d{1,5})\1'
new_list = []
sum_call = 0
for match in re.finditer(regex, text_string):
new_list.append([match.group(2), match.group(3), match.group(4)])
sum_call += int(match.group(4))
days = sum_call // 2000
print(f"You have food to last you for: {days} days!")
for match in new_list:
print(f"Item: {match[0]}, Best before: {match[1]}, Nutrition: {match[2]}")
``````

(#|\|)([A-Za-z\s]+)\1(\d{2,2}/\d{2,2}/\d{2,2})\1(\d{1,5})\1

(#|\|) - символ # или |

([A-Za-z\s]+) - символи A-Z, a-z и whitespace

\1 - символа match-нат от първата група, те # или |

(\d{2,2}/\d{2,2}/\d{2,2}) - 3 пъти цифра от 0-9 точно 2 пъти с разделител \

(\d{1,5}) - от 1 до 5 пъти цифра от 0-9

1
28/07/2021 23:05:00

Мерси,

иначе сори, моя грешка за задачата , аз мисля че не трябва да е с regix, защото е втора задача нз :)

Мерси иначе за решениетп

0
svephoto 981 Точки

Благодаря, icowwww,

След известно време мислене и ровене в моята визуална памет , намерих задачата, понеже знаех, че съм решавал някаква такава.  Снощи бях започнал да я пиша на Python, понеже към момента я бях решил на Java, но се захванах с други неща и така и не я дописах.

И да - това е задача за използване на регекс, което лесно се вижда дори от самите примери, от които трябва да извличаме данните.

0
29/07/2021 09:58:23
svephoto 981 Точки

Goganovradostin, фактът, че задачата е втора няма нищо общо с това как трябва да се решава и с какво. От друга страна, обикновено точно втора задача от тези изпити е именно за използване на регекс(и). Можеш да проследиш това във всички останали Final изпити от Fundamentals - поне от 2 години досега структурата е точно такава, но това не означава, че задължително еди коя си задача трябва да бъде с еди какво си, спокойно могат да бъдат разместени не според както ние очакваме.

Би било доста улесняващо за теб, ако първо потърсиш във форума дали има предишни дискусии във връзка с даден проблем и чак ако не намериш, да отваряш нова тема. Както колегата icowwww е направил, давайки линк към решение, което е намерил.

0
29/07/2021 11:02:40