Поиск комбинаций в строке где один символ играет роль универсального?

Добрый день, дорогие форумчане имеется задание протестировать комбинации лотереи "Однорукий бандит"
в ответ с сервера мне приходит строка из 15 символов. в виде игрового барабана
(Пример:
1BCDE
FG1BC
DEFG1)
line = '1BCDEFG1BCDEFG1'
values = {'HHH': 10, 'HHHH': 25, 'HHHHH': 150,
          'GGG': 10, 'GGGG': 25, 'GGGGG': 150,
          'FFF': 150, 'FFFF': 500, 'FFFFF': 2000,
          'EEE': 100, 'EEEE': 200, 'EEEEE': 2000,
          'DDD': 300, 'DDDD': 1000, 'DDDDD': 2000,
          'CCC': 300, 'CCCC': 1000, 'CCCCC': 5000,
          'BBB': 300, 'BBBB': 1500, 'BBBBB': 500,
          '111': 50, '1111': 500, '11111': 5000
          }
Нужно реализовать распознавание строки выигрышной комбинации по таким параметрам <img src="//habrastorage.org/files/4e8/9d5/740/4e89d5740d06465ca31aba4a02adb98e.png" alt="image"/>
Каким лучше методом реализовать данный тест в Pyt<blockquote>hon, были идеи использовать обращение к линии с помощью
line[0] == line[1] and line[1] == line[2] and line[2] == line[3] and line[3] == line[4]
или же с помощью регулярных выражений.
Прошу помощи у опытных коллег, каким лучше методом воспользоваться для решения этой задачи.
  • Вопрос задан
  • 512 просмотров
Решения вопроса 1
adugin
@adugin Куратор тега Python
def checksum(code, awards={'A': 15, 'B': 20, 'C': 30, '': 40}, joker='D'):
    return sum(
        awards.get(''.join(set(triplet)-{joker}), 0) for triplet in zip(*[iter(code)]*3)
    )

checksum('ABCAABDCA')  # 0
checksum('ADAAABDCA')  # 15

Или так, например:
def checksum2(code, awards={'A': 15, 'B': 20, 'C': 30, '': 40}, joker='D'):
    return reduce(
        lambda xsum, triplet: xsum + awards.get(
            ''.join(set(triplet).difference(joker)), 0
        ),
        (code[0:3], code[3:6], code[6:9]), 0
    )
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ilov3
Учу питон и джангу потому что модно
if len(set(line[:3])) == 1:
    income_amount += values[line[:3]]
elif 'D' in set(line[:3]) and len(set(line[:3])) == 2:
    income_amount += values[line[:3].replace('D', set(line[:3])-{'D'})]
if len(set(line[3:6])) == 1:
    income_amount += values[line[3:6]]
elif 'D' in set(line[3:6]) and len(set(line[3:6])) == 2:
    income_amount += values[line[3:6].replace('D', set(line[3:6])-{'D'})]


но регуляркой наверное проще)
Ответ написан
@balamut108
Py
Используйте itertools, это прекрасный инструмент для всевозможных комбинаций. pythonworld.ru/moduli/modul-itertools.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы