Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23

В игре "кто кричит громче" два игрока А и В генерируют последовательности значений переменной длины

03.11.2021, 20:37. Показов 1715. Ответов 14

Студворк — интернет-сервис помощи студентам
Всем привет, я новичек в программировании, хотел бы спросить у вас совет как можно решить данную задачу, какими методами и циклами.

"В игре "кто кричит громче" два игрока А и В генерируют
последовательности значений переменной длины. Каждое значение представлено
одним символом. Последовательности могут быть разной длины, поскольку
значения могут быть разделены одним (или несколькими) пробелами
и символами табуляции ('\t'). Однако количество символов, не содержащих пробелов, равно
для каждой последовательности.

Каждый элемент последовательности A сравнивается с соответствующим
элементом последовательности B, и ему присваивается точка:
- игроку, который сгенерировал наибольшее значение (например, A), если
разница между значением A и значением B меньше
чем или равным параметру k, определенному в начале
испытания
- игроку, который сгенерировал наименьшее значение (например, B), если
разница между значением A и значением B больше
, чем k (т. Е. A потерпел неудачу)
- никому, в случае ничьей.
В конце задания выигрывает тот, кто набрал наибольшее количество очков. В
случае ничьей выигрывает игрок, сгенерировавший последовательность с
меньшей общей суммой значений. В случае дальнейшей ничьей,
выигрывает игрок с первой последовательностью в лексикографическом порядке. Не может
случиться так, что два игрока генерируют точно такую же последовательность
значений.

Необходимо создать функцию, которая оценивает рейтинг
турнира "кто кричит громче". Функция принимает в качестве входных данных список
строк и параметр k и возвращает итоговый рейтинг
турнира в виде списка. Строка в позиции "i" в списке ввода
соответствует последовательности значений игрока "i". В
турнире каждый игрок бросает вызов всем остальным своим собственным
последовательность: таким образом, если есть n игроков, каждый игрок сделает n-1
проблемы. Количество выигранных испытаний определяет позицию в
рейтинге. В случае ничьей игроки распределяются в соответствии с
их начальной позицией.

Пример турниров "кто кричит громче" между тремя игроками.

Если k=2 и список ["aac", "ccc", "caa"], то
вызов 0, 1 выигрывается с 1 на 2 очка до 0, так
как разница между "c" и "a" меньше или равна 2
задача 0, 2 - ничья 1 к 1, две последовательности имеют
равная сумма, но 0 выигрывает, потому что "aac" < "caa"
задача 1, 2 выигрывается 1 на 2 очка до 0, так
как разница между "с" и "а" меньше или равна 2.

В конце концов, у 0 есть 1 задача, у 1 есть 2 задачи и у 2 есть 0
проблемы, поэтому итоговый рейтинг будет [1, 0, 2].

Если k=1 и список ["aac", "ccc", "caa"], то
вызов 0, 1 выигрывается от 0 на 2 очка до 0, так
как разница между "c" и "a" больше 1
задача 0, 2 - это ничья 1 к 1, две последовательности имеют
равная сумма равна, но 0 выигрывает, потому что "aac" < "caa".
задача 1, 2 выигрывается 2 за 2 очка до 0, так
как разница между "с" и "а" больше 1.

В конце концов, у 0 есть 2 проблемы, у 1 есть 0 проблем и у 2 есть 1
вызов, поэтому окончательный рейтинг будет [0, 2, 1].

Если k=10 и список ["abc", "dba", "EZO"], то
задача 0, 1 - ничья, но 0 выигрывает, потому что ее последовательность
имеет меньшую сумму
вызов 0, 2 выигрывается 0 на 2 очка к 1, потому что 2 - это
неправильно с буквой "о" против "с"
вызов 1, 2 выигрывается 1 за 2 очка к 1, потому что 2 - это
терпит неудачу с буквой "о" против "а".

В конце концов, у 0 есть 2 проблемы, у 1 есть 1 проблема и у 2 есть 0
проблемы, поэтому итоговый рейтинг будет [0, 1, 2].

Если k=50 и список ["A ƐÈÜ", "BEAR", "c Ʈ".]
Вызов 0, 1 выигрывается 1 на 4 очка до 0.
Вызов 0, 2 выигрывается 2 за 3 очка к 1.
Задача 1, 2 выигрывается 1 на 3 очка к 1.
В конце концов, у 0 есть 0 проблем, у 1 есть 1 проблема и у 2 есть 2
проблемы, поэтому итоговый рейтинг будет [1, 2, 0].





задача в оригинале




'''In the game "who screams louder," two players A and B, generate
sequences of variable length values. Each value is represented by a
single character. The sequences can be of different lengths because
the values can be separated by one (or more) whitespaces
and tabs ('\t'). The number of non-space characters is, however, equal
for each sequence.

Each element of the sequence of A is compared with the corresponding
element of the B's sequence, and a point is assigned:
- to the player who generated the highest value (for example A), if
the difference between the value of A and the value of B is less
than or equal to a parameter k decided at the beginning of the
challenge
- to the player who has generated the lowest value (for example B), if
the difference between the value of A and the value of B is greater
than k (i.e., A has failed)
- to none, in case of a tie.
At the end of the assignment, whoever scored the most points wins. In
the case of a tie, the player who generated the sequence with the
lower total sum of values wins. In the case of a further tie, the
player with the first sequence in lexicographic order wins. It cannot
happen that two players generate precisely the same sequence of
values.

It is necessary to create a function that evaluates the ranking of a
"who screams louder" tournament. The function takes as input a list of
strings and a k parameter, and returns the final ranking of the
tournament, as a list. The string in position "i" in the input list
corresponds to the player "i"'s sequence of values. In the
tournament, each player challenges all the others with their own
sequence: thus, if there are n players, each player will make n-1
challenges. The number of winning challenges determines the position in
the ranking. In case of a tie, the players are ordered according to
their initial position.

Example of "who screams louder" tournaments between three players.

If k=2 and the list is ["aac", "ccc", "caa"], then
the challenge 0, 1 is won by 1 by 2 points to 0, since the
difference between "c" and "a" is less than or equal to 2
the challenge 0, 2 is a 1 to 1 draw, the two sequences have
equal sum, but 0 wins because "aac" < "caa"
the challenge 1, 2 is won by 1 by 2 points to 0, since the
difference between "c" and "a" is less than or equal to 2.

In the end 0 has 1 challenge, 1 has 2 challenges and 2 has 0
challenges, so the final ranking will be [1, 0, 2].

If k=1 and the list is ["aac", "ccc", "caa"], then
the challenge 0, 1 is won by 0 by 2 points to 0, since the
difference between "c" and "a" is greater than 1
the challenge 0, 2 is a 1 to 1 tie, the two sequences have
equal sum equal, but 0 wins because "aac" < "caa".
the challenge 1, 2 is won by 2 for 2 points to 0, since the
difference between "c" and "a" is greater than 1.

In the end 0 has 2 challenges, 1 has 0 challenges and 2 has 1
challenge, so the final ranking will be [0, 2, 1].

If k=10 and the list is [ "abc", "dba" , "eZo"], then
the challenge 0, 1 is a tie, but 0 wins because its sequence
has lower sum
the challenge 0, 2 is won by 0 by 2 points to 1, because 2 is
wrong with the letter 'o' against 'c'
the challenge 1, 2 is won by 1 for 2 points to 1, because 2 is
fails with the letter 'o' vs. 'a'.

In the end 0 has 2 challenges, 1 has 1 challenge and 2 has 0
challenges, so the final ranking will be [0, 1, 2].

If k=50 and the list is [ "A ƐÈÜ", "BEAR" , "c Ʈ ´ ."]
Challenge 0, 1 is won by 1 by 4 points to 0.
Challenge 0, 2 is won by 2 for 3 points to 1.
Challenge 1, 2 is won by 1 by 3 points to 1.
In the end 0 has 0 challenges, 1 has 1 challenge and 2 has 2
challenges, so the final ranking will be [1, 2, 0].
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2021, 20:37
Ответы с готовыми решениями:

Для данных значений m, n и известной ставки каждого игрока определить номер игрока, который выиграл и сумму выигрыша
За круглым столом собралось n игроков (n &lt;= 255). Каждый сделал ставку в k монет (1 &lt;= k &lt;= 5). Договорились, что при счете по часовой...

Поворот игрока в 3Д игре
В 3D игре с видом сверху нужно двигать игрока, а как заставить его поворачиваться лицом в сторону движения?

Получить id игрока во флеш-игре.
День добрый! Помогите пожалуйста советом. Заранее извините если не в ту ветку залез. Есть игровой сайт, на нем мультиплеерные игры (с...

14
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
06.11.2021, 12:35
генерируют
последовательности значений переменной длины. Каждое значение представлено
одним символом.
так переменной длины или один символ???
Цитата Сообщение от Cheeky47 Посмотреть сообщение
два игрока А и В генерируют
последовательности значений переменной длины
давайте начнем с этого. входные данные есть?
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 13:30  [ТС]
входных данных нет, функция которая будет делать эту задачу будет помещаться в программы тестов, и там уже будет проверять

могу скинуть код программ тестов
а вообще входными данными будут массив с результатами игроков по типу
matches = ['dfgh', 'gjfk', 'tur f', 'oxv;'] пробелы не должны идти в учет


Добавлено через 19 минут

Сейчас скину полностью переработанное условие к заданию, извиняюсь что так, просто даже сам в начале не особо понял


Задание.
Написать функцию которая будет сравнивать строки в массиве с друг другом.(а точнее все первые буквы со всеми первыми)
Игра кто кричит громче, есть массив со строками одинаковой длинны, входные данные: результаты игроков в виде массива
matches = ['dfgh', 'gjfk', 'tur f', 'oxv;'] пробелы не должны идти в учет
Программа должна сравнить результаты всех игроков с друг другом
если игроков N число то количество сравнений должно быть N-1, еще входными данными будет коэфицент К, про него опишу далее

После окончания всех сравнений, нужно сделать список победителей, первым в списке должен быть индекс игрока набравшего больше всех ПОБЕД(не очков, далее расскажу про очки)

ПРИМЕР

K=2 и есть лист с результатами игроков ['aac', 'ccc', 'caa'] (номера игроков определены индексом их результатов)
аас - результата игрока 0
ссс - результат игрока 1
саа результат игрока 2
Игрок 0 против Игрока 1, выиграет игрок 1 с разницей в 2 очка, потому что с > a, и так 2 раза, то есть игрок 1 выиграл с отрывом в 2 очка(очки не влияют на позицию в рейтинге). Для чего нужен К: разница между цифровым значением, первых букв игроков равна 2-м , abs(ord(a)-ord(c))=2. K=2, то есть разница между значений не превышает коэффициент K. Тогда ПОБЕДА засчитывается игроку под индексом 1. Если бы K = 1, то с разницей в 2 очка выиграл бы игрок 0. К определяет победу между буквами
пример ничьи есть 2 игрока 'abc' и 'dba' при сравнении 1-х букв, очко получает игрок под индексом 1, при сравнении 2-х букв ничья, при сравнеии 3-х букв очко получает игрок под индексом 0, по итогу ничья, но победа засчитается игроку под индексом 0. Потому что сумма всех букв его результата меньше суммы всех букв результата противника, если суммы одинаковы, то выигрывает игрок у которого ord значение первой буквы меньше

(Количество очков набранных в состязании между игроками, не влияет на их рейтинг, на рейтинг влияет количество ПОБЕД) В случае одинакового количества побед, игроки распределяются основываясь на их изначальной позиции

РАСПРЕДЕЛЕНИЕ СПИСКА ПОБЕДИТЕЛЕЙ
Первым идет игрок с наибольшим количеством побед и далее по уменьшению,

В результатах игроков не должны идти в учет пробелы и (\t). Например, 'a d d' будут взяты лишь символы
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.11.2021, 13:44
ты конечно мастер объяснять ))
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def foo(a, k):
    b = [sum(ord(c) for c in s) for s in a]
    n = len(a)
    m = len(a[0])
    d = dict.fromkeys(range(n), 0)
    for i in range(m):  # round[i]
        for x in range(n):
            for y in range(x+1, n):
                p1, p2 = a[x][i], a[y][i]
                diff = abs(ord(p1)-ord(p2))
                if diff <= k:
                    if p1 < p2:
                        d[x] += 1
                    elif p2 < p1:
                        d[y] += 1
                else:
                    if p1 > p2:
                        d[x] += 1
                    elif p2 > p1:
                        d[y] += 1
    return [k for k, v in sorted(d.items(), key=lambda x: (x[1], b[x[0]], a[x[0]]))]
 
 
print(foo(["aac", "ccc", "caa"], 2))
print(foo(["aac", "ccc", "caa"], 1))
print(foo(["abc", "dba", "eZo"], 10))
пробуй, я фз. как понял. пробелы и табы думаю удалишь в тестах.
1
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 14:19  [ТС]
Спасибо, чтоб автоматом удаляло проблемы в начале фукнции прописать это?

Добавлено через 31 минуту
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def ex(matches, k):
    for a in matches:
        a.replace(" ", "")
        a.replace("\t", "")
        print(a)
    b = [sum(ord(c) for c in s) for s in matches]
    n = len(matches)
    m = len(matches[0])
    d = dict.fromkeys(range(n), 0)
    for i in range(m):  # round[i]
        for x in range(n):
            for y in range(x + 1, n):
                p1, p2 = matches[x][i], matches[y][i]
                diff = abs(ord(p1) - ord(p2))
                if diff <= k:
                    if p1 < p2:
                        d[x] += 1
                    elif p2 < p1:
                        d[y] += 1
                else:
                    if p1 > p2:
                        d[x] += 1
                    elif p2 > p1:
                        d[y] += 1
    return [k for k, v in sorted(d.items(), key=lambda x: (x[1], b[x[0]], matches[x[0]]))]
 
print(ex(['aa c', 'ccc', 'ca a'], 2))
я вроде сделал, но почему то он не убирает пробелы, в чем может быть ошибка?
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
06.11.2021, 15:07
Cheeky47,
b = [sum(ord(c) for c in s) for s in a]
Python
1
b = [sum(ord(c) for c in s.replace(" ", "").replace("\t", "")) for s in a]
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.11.2021, 15:23
да там не понятно.
сумму и лексикографический порядок считать с пробелами или без.
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 15:35  [ТС]
выдает ошибку
p1, p2 = matches[x][i], matches[y][i]
IndexError: string index out of range
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.11.2021, 15:37
Cheeky47, слова в списке разной длины
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 15:49  [ТС]
я разобрался с удалением табов и пробелов

но не могу понять почему программа не может проанализировать эмоджи например, если в учет идет ord(символа), то и остальное она должна делать, не так ли?
Миниатюры
В игре "кто кричит громче" два игрока А и В генерируют последовательности значений переменной длины  
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 15:59  [ТС]
я уже очень благодарен за помощь, но хотел узнать, есть ли у тебя время объяснить его(КОД)?
Цитата Сообщение от eaa Посмотреть сообщение
пробуй
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.11.2021, 16:10
а что там объяснять?!
обычный турнир "каждый с каждым", несколько раундов.
считаем очки.
дальше сортируем как нужно.
правда я задачу не до конца понял.
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 16:18  [ТС]
eaa

А как лучше влиться в питон? просто я хочу научиться кодить, но большинство для меня не понятно, а еще есть идеи как можно исправить? мне кажется сортировка идет не правильно ибо результат списка разнится
при равном количестве побед, позиция игроков зависит от их изначального положения
Миниатюры
В игре "кто кричит громче" два игрока А и В генерируют последовательности значений переменной длины  
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.11.2021, 16:27
Цитата Сообщение от Cheeky47 Посмотреть сообщение
мне кажется сортировка идет не правильно ибо результат списка разнится
не понятно, сортировать с пробельными символами или нет, может отличаться из-за этого.

Цитата Сообщение от Cheeky47 Посмотреть сообщение
А как лучше влиться в питон?
это не ко мне, я его не учил еще. тут на форуме есть много тем как что учить по питону, поищи.
0
0 / 0 / 0
Регистрация: 03.11.2021
Сообщений: 23
06.11.2021, 19:05  [ТС]
А как отсортировать данные без пробелов?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def ex(matches, k):  
    new_list = []
    new_list = matches
    nnlist = []
    for elem in new_list:
        elem = elem.replace(" ", "")
        elem = elem.replace("\t", "")
        nnlist.append(elem)
    b = [sum(ord(c) for c in s) for s in nnlist]
    n = len(nnlist)
    m = len(nnlist[0])
    d = dict.fromkeys(range(n), 0)
    for i in range(m):  # round[i]
        for x in range(n):
            for y in range(x + 1, n):
                p1, p2 = new_list[x][i], nnlist[y][i]
                diff = abs(ord(p1) - ord(p2))
                if diff <= k:
                    if p1 < p2:
                        d[x] += 1
                    elif p2 < p1:
                        d[y] += 1
                else:
                    if p1 > p2:
                        d[x] += 1
                    elif p2 > p1:
                        d[y] += 1
    return [k for k, v in sorted(d.items(), key=lambda x: (x[1], b[x[0]], nnlist[x[0]]))]
я вроде сделал так чтоб не было пробелов и табов

Добавлено через 2 часа 25 минут
Цитата Сообщение от Cheeky47 Посмотреть сообщение
d[x] += 1
                    elif p2 < p1:
                        d[y] += 1
Что означает d[x] и d[y]?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2021, 19:05
Помогаю со студенческими работами здесь

Подсчет максимальной длины последовательности непрерывно возрастающих значений элементов массива
Опишите на русском языке или одном из языков программирования алгоритм подсчета максимальной длины последовательности непрерывно...

Даны два слова одинаковой длины. Присвоить переменной k число, равное количеству попарно различных букв
&quot;Даны два слова одинаковой длины. Присвоить переменной k число, равное количеству попарно различных букв&quot; Здравствуйте, нужна помощь...

Даны два слова разной длины. Присвоить переменной m число, равное количеству попарно различных букв
Даны два слова разной длины. Присвоить переменной m число, равное количеству попарно различных букв

Панель игрока в игре русская рыбалка
Здравствуйте.Раньше в игре русская рыбалка была доп.программа панель игрока.Сейчас её нет.Принцип работы её простой .При вкл ехе вилась...

Поворот игрока в TDS игре на андройд
Чтобы не подключать каждый раз смарт для теста, тестировал на компе и управление было кнопки + мышь. Ходил на WASD, а персонаж...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru