Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2022, 12:37   #1
Kilodayt
Новичок
Джуниор
 
Регистрация: 24.07.2022
Сообщений: 3
По умолчанию Индекс лёгкости (python)

Лингвист Юля создала индекс лёгкости восприятия текста, который базируется на расположении одинаковых букв в слове. Для расчёта этого индекса K в слове мы выбираем последовательность непрерывных символов (их количество равно n), удаляем её и прибавляем к индексу K=K+n*n . Так выполняем до тех пор, пока символов в слове не останется. Задача — получить максимальный индекс для слова w .

Ввод:
w — строка-слово, состоящее только из строчных букв английского алфавита, для которого нужно посчитать индекс, 0<length(w)<25

Вывод:
integer — максимальный индекс для слова w

print(get_result("acbbcb")) #12:
"acbbcb" -> "acbbb" (удалили 'c', K=1(0+1))->"ac" (удалили 'bbb', K=10(1+9))->"a"(удалили 'c', K=11(10+1))->(удалили 'a', K=12(11+1))
print(get_result("aaaada")) #26: удалили 'd', K=1, затем удалили все 'a', K=1+5*5=26
Kilodayt вне форума Ответить с цитированием
Старый 24.07.2022, 18:46   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Одна подсказка:
- создать множество
Код:
world = 'My test'
m = set(world)  # множество состоит из уникальных символов слова
Вторая подсказка может быть выбрана отсюда:
https://pythonist.ru/python-schitaem...vola-v-stroku/

Например выбрали count() и сразу вычисляем квадрат числа вхождений символа
Код:
# Формируем список числа вхождений символов
# Выбираем из множества символ и подсчитываем квадраты чисел вхождений в слово
counter = [world.count(ch)**2 for ch in m]
Далее находим их сумму.

Замечание:
Тут у вас ошибка:
"acbbcb" -> "acbbb" (удалили 'c', K=1(0+1))->"ac" (удалили 'bbb', K=10(1+9))->"a"(удалили 'c', K=11(10+1))->(удалили 'a', K=12(11+1))
Должно получиться 14, так как 'c' входит два раза.

PS: Если строчные и прописные символы - это одинаковые, то перевести слово, например, в верхний регистр.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.07.2022, 22:03   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

ViktorR, на входе по условию слово только из строчных букв, так что про регистр не надо думать. Порядок изъятия символов важен, поэтому сначала удаляется 'c' между 'bb' и 'b', чтобы затем удалить сразу 'bbb'. Сумма квадратов количеств вхождения каждого символа будет ответом только в том случае, если каждый уникальный символ входит одной подстрокой в исходное слово.
Kilodayt, я бы первым делом попробовал рекурсию: разбить слово на группы одинаковых символов, удалить каждую группу по очереди, оставшиеся символы передать в эту же рекурсивную функцию, результат функции - максимальный индекс для слова. Скорее всего, это не самый оптимальный способ, зато будет с чем сравнивать следующие варианты решения.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 24.07.2022 в 22:11.
BDA вне форума Ответить с цитированием
Старый 24.07.2022, 23:24   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А где в задании сказано, что надо выбирать непрерывную последовательность только из одинаковых символов? Ведь можно выбрать последовательность различных символов между одинаковыми.
т.е. "acbbcb" -> "bbcb" (удалили 'ac', K=4(0+2*2=4))->"bbb" (удалили 'c', K=5(4+1))->""(удалили 'bbb', K=14(5+9))
macomics вне форума Ответить с цитированием
Старый 25.07.2022, 00:47   #5
Kilodayt
Новичок
Джуниор
 
Регистрация: 24.07.2022
Сообщений: 3
По умолчанию

ViktorR, Спасибо за подсказку. Очень помогло.
Kilodayt вне форума Ответить с цитированием
Старый 25.07.2022, 12:52   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Цитата:
Для расчёта этого индекса K в слове мы выбираем последовательность непрерывных символов (их количество равно n), удаляем её и прибавляем к индексу K=K+n*n .
Похоже, что BDA прав.
И первый пример на это рассчитан:
Цитата:
print(get_result("acbbcb")) #12:
"acbbcb" -> "acbbb" (удалили 'c', K=1(0+1))->"ac" (удалили 'bbb', K=10(1+9))->"a"(удалили 'c', K=11(10+1))->(удалили 'a', K=12(11+1))
В следующем примере:
Цитата:
print(get_result("aaaada")) #26: удалили 'd', K=1, затем удалили все 'a', K=1+5*5=26
Можно получить 4-е 'a', затем 'd' и снова 'a'. Тогда K = 16 + 1 + 1 = 18

В таком случае расчёт K будет неоднозначен.
Можно просто удалять последовательно, начиная с первого символа: 'a', затем 'c', затем 'bb' и т.д.
А можно начать с "хвоста" или "выдёргивать" символы, оптимизируя K (на максимум или минимум).
К сожалению в задании на эту тему нет никаких указаний.

Если ТС доволен решением, то видимо это и предполагалось
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 26.07.2022, 03:41   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Согласен, что задание сформулировано недостаточно четко. macomics, не понял вашу идею про различные символы, а что тогда мешает брать сразу всё слово целиком и удалять (тогда K будет максимален)? ViktorR, нет, как раз максимизацию K задание и требует. Да, переубеждать ТС не буду.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.07.2022, 08:59   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
что тогда мешает брать сразу всё слово целиком и удалять (тогда K будет максимален)?
Вот это условие: базируется на расположении одинаковых букв в слове
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Python - как установить Easy-Machine-Learning-Object-Detection при уже установленном Python 3.9 Krasi Общие вопросы по программированию, компьютерный форум 4 23.12.2021 15:49
[Python] Нужно решить в среду вечером 5 -6 заданий для начинающих на языку Python. Пример заданий смогу выслать. Задания на английском языке. foxylen Фриланс 2 17.03.2019 12:30
Хеш-таблица, метод цепочек, первичный индекс и вторичный индекс - C# AnatoliyAnatoliy Помощь студентам 2 09.01.2018 15:30
Начальный уровень Python. Функции - Python YYYUUU Python 5 09.06.2017 12:09
найти индекс min misha25525 Помощь студентам 0 11.04.2010 12:03