Софтуерно Инженерство
Loading...

The most powerful word - Help!

Мили хора, помогнете с тази задача :)

 

За Лора думите притежават голяма сила. Тя те моли да измислиш алгоритъм, с който да откриеш коя е "най-силната" дума.До получаване на команда "End of words"ще се четат от конзолата думи. За да се открие силата на всяка една, трябва да се намери сборът от ASCII стойностите на символите, от които се състои думата. Ако започва с гласна буква-'a', 'e', 'i', 'o', 'u', 'y'(или техните еквивалентни главни букви),полученият сбор трябва да се умножи по дължината на думата, в противен случай, да се разделина дължинатаи да се закръгли до най-близкото цяло число надолу.

Вход

До получаване на команда "End of words"се чете по един редот конзолата:думатекст

Изход

След приключване на програмата се печата на един ред думата с "най-голяма сила":"The most powerful word is {думата с най-голяма сила}-{силата на думата}"

Тагове:
0
IrenaRy avatar IrenaRy 5 Точки

Опитай този код... на конзолата мисля, че излиза с прости примери. Тези задачи са от най-трудните (поне мен мн ме безпокоят), така че ще е полезно за всички да се види решение :) Както казах, обаче, добре е да има примерен вход и изход. (Разгледай задачите "Coding" - вложени цикли, упражнение и "Name Wars" - вложени цикли, лекция - те са на такъв принцип)

import math

word: str = input()
biggest_sum = 0
the_most_powerful_word = ''

while word != 'End of words':
    first_letter = str( word[0] )
    current_ascii_sum = 0
    current_ascii_sum_after_multiplication_or_division_by_length = 0

    for char in word:
        letter_ascii_value = ord( char )
        current_ascii_sum += letter_ascii_value
        if first_letter == 'a' \
        or first_letter == 'e' \
        or first_letter == 'i' \
        or first_letter == 'o' \
        or first_letter == 'u' \
        or first_letter == 'y' \
        or first_letter == 'A' \
        or first_letter == 'E' \
        or first_letter == 'I' \
        or first_letter == 'O' \
        or first_letter == 'U' \
        or first_letter == 'Y':
            current_ascii_sum_after_multiplication_or_division_by_length = current_ascii_sum * len(word)

        else:
            current_ascii_sum_after_multiplication_or_division_by_length = current_ascii_sum / len(word)

    if current_ascii_sum_after_multiplication_or_division_by_length > biggest_sum:
        biggest_sum = current_ascii_sum_after_multiplication_or_division_by_length
        the_most_powerful_word = word

    word = input()

biggest_sum = math.floor(biggest_sum)
print(f'The most powerful word is {the_most_powerful_word} - {biggest_sum}')
0

Браво :) работи на 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}')

 

 

 

 

0
29/10/2019 23:12:38

Също така, не разбирам защо ги упоменаваш тези стрингове, те са си стринг по условие.

Ако има някаква друга цел, която не схващам се извинявам.

И така си работи:

 

word = input()
biggest_sum = 0
the_most_powerful_word = ''

while word != 'End of words':
    first_letter = word[0]
0
IrenaRy avatar IrenaRy 5 Точки

Радвам се :) Аз уж погледнах в задачите, ама не съм я мернала.. oops. Даа.. това решение с list_of_vowels ще спести мн време.. :) Стринговете ги упоменавам просто докато търся решение и Пайчарм ме подканя да дефинирам по-добре някои неща (в опит да ми помогне явно)... и понякога просто му цъкам да го направи и той си ги слага; нямат цел. (така стана с първия поне, втория аз си го сложих за всеки случай, още малко ми бягат индексите)

0
30/10/2019 09:40:19

Пак аз и пак зациклих :)

 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 и продължаваме с генериране на следващи билети.

 

Ето и какво написах до тук...

a1 = int(input())
a2 = int(input())
n = int(input())
n2 = n/2 -1


if a1 >= 65 and a1 <= 89 and a2 >= 66 and a2 <= 91 and n >= 1 and n <= 10:
    for i in range(a1, a2):
        first_char_ascii = chr(i)
        for j in range(1, n):
            second_sumbol = j
            for k in range(1, int(n2)):
                third_sumbol = k
                forth_sumbol = ord(first_char_ascii)
                if i % 2 != 0 and (j + k + i)% 2 !=0:
                    print(f"{first_char_ascii}{second_sumbol}{third_sumbol}{forth_sumbol}")

 

0