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
icowwww avatar icowwww 2813 Точки

Здравей,

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

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 1191 Точки

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

 

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

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

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

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

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

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