The most powerful word - Help!
Мили хора, помогнете с тази задача :)
За Лора думите притежават голяма сила. Тя те моли да измислиш алгоритъм, с който да откриеш коя е "най-силната" дума.До получаване на команда "End of words"ще се четат от конзолата думи. За да се открие силата на всяка една, трябва да се намери сборът от ASCII стойностите на символите, от които се състои думата. Ако започва с гласна буква-'a', 'e', 'i', 'o', 'u', 'y'(или техните еквивалентни главни букви),полученият сбор трябва да се умножи по дължината на думата, в противен случай, да се разделина дължинатаи да се закръгли до най-близкото цяло число надолу.
Вход
До получаване на команда "End of words"се чете по един редот конзолата:•дума–текст
Изход
След приключване на програмата се печата на един ред думата с "най-голяма сила":•"The most powerful word is {думата с най-голяма сила}-{силата на думата}"
Браво :) работи на 100%!
Уж я решавах кажи - речи по същият начин, но нещо не се получаваше.
Не се сетих да сложа вход/изход, тъй като задачата е в джъдж и мислех че лесно може да се открие (изпит 6-7 юли 2019).
Една друга колежка даде много хитро решение:
import math
word = input()
list_of_vowels = ['a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'O', 'Y', 'I']
sum = 0
max_sum = 0
powerful_word = ''
while word != 'End of words':
#while not word == 'End of words':
for letter in word:
sum += ord(letter)
if word[0] in list_of_vowels:
sum = sum * len(word)
elif word[0] not in list_of_vowels:
sum = math.floor(sum / len(word))
if sum > max_sum:
#max_sum = max(sum, max_sum)
max_sum = sum
powerful_word = word
sum = 0
word = input()
if word == 'End of words':
print(f'The most powerful word is {powerful_word} - {max_sum}')
Също така, не разбирам защо ги упоменаваш тези стрингове, те са си стринг по условие.
Ако има някаква друга цел, която не схващам се извинявам.
И така си работи:
Радвам се :) Аз уж погледнах в задачите, ама не съм я мернала.. oops. Даа.. това решение с list_of_vowels ще спести мн време.. :) Стринговете ги упоменавам просто докато търся решение и Пайчарм ме подканя да дефинирам по-добре някои неща (в опит да ми помогне явно)... и понякога просто му цъкам да го направи и той си ги слага; нямат цел. (така стана с първия поне, втория аз си го сложих за всеки случай, още малко ми бягат индексите)
Пак аз и пак зациклих :)
6. Билетиза филм
Трябва да напишете програма, която чете три цели числа a1,a2 ,n въведени от потребителя и генерира номера за билети, които се състоят от следните 4символа:
•Символ 1: символ с ASCII кодот а1до а2 -1
•Символ 2: цифра от 1до n -1
•Символ 3: цифра от 1до n / 2 -1
•Символ 4: цифрова репрезентация (ASCII код) на символ 1
След като са изпълнени условията се генерира следния билет:
"{Символ 1}-{Символ 2}{Символ 3}{Символ 4}"
Вход
•a1–цяло число в интервала[65... 89]
•a2–цяло число в интервала[66... 91]
•n–цяло число в интервала[1... 10]
ИзходНа конзолата трябва да се отпечатат всички билетни номера, на коиточисловата репрезентация на символ 1е нечетнаи сборът на символ 2, символ 3 и символ 4е нечетен.
Примерен вход и изход
86 88 4
W-1187
W-3187
Символ 1 в началото е W(ASCII код 87);
Символ 2= 1;Символ 3= 1;Символ 4 = 87; Проверяваме дали Символ 1 e нечетен.Сборът от Символ 2+ Символ 3 + Символ 4 = 89 също е нечетен.Генериран билет: W-1187 и продължаваме с генериране на следващи билети.
Ето и какво написах до тук...
from math import floor
word = input()
vowel_list = ['a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y']
sum_of_digits = 0
first_letter = ""
result = 0
most_powerful = 0
most_powerful_word = ""
while word != "End of words":
for index, digit in enumerate(word):
sum_of_digits += ord(digit)
if index == 0:
first_letter = digit
if first_letter in vowel_list:
result = sum_of_digits * len(word)
else:
result = sum_of_digits / len(word)
if result > most_powerful:
most_powerful = result
most_powerful_word = word
word = input()
sum_of_digits = 0
first_letter = ""
result = 0
print(f"The most powerful word is {most_powerful_word} - {floor(most_powerful)}")