Професионална програма
Loading...
+ Нов въпрос
Goganovradostin avatar Goganovradostin 1 Точки

задача от 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
Python Fundamentals
svephoto avatar svephoto 978 Точки

Здравей, Goganovradostin,

 

Би ли дал и линк към самата задача в Judge?

1
icowwww avatar icowwww 1452 Точки

Здравей,

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

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
Goganovradostin avatar Goganovradostin 1 Точки

Мерси, 

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

 

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

0
svephoto avatar svephoto 978 Точки

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

 

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

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

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

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

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

0
29/07/2021 11:02:40