(аа будет одним из многих, бб не будет)
Я думал, что это будет 10! / 8! Но, видимо, я делаю что-то не так. Кто-нибудь может мне помочь, потому что я в тупике.
(аа будет одним из многих, бб не будет)
Я думал, что это будет 10! / 8! Но, видимо, я делаю что-то не так. Кто-нибудь может мне помочь, потому что я в тупике.
Ответы:
У вас есть 6 разных букв: a, b, c, d, e, f, из которых вы можете сгенерировать 6 x 5 = 30 слов с двумя разными буквами. Кроме того, вы можете сгенерировать 3 слова aa, cc, dd с одной и той же буквой дважды. Таким образом, общее количество слов составляет 30 + 3 = 33.
Альтернатива методу Захавы: существует способов соединения двух букв af. Тем не менее, нет 2 b, e или f символов, поэтому «bb», «ee» и «ff» невозможны, что делает количество слов 36 - 3 = 33 .
То, как вы пытались подойти к проблеме, похоже, игнорирует тот факт, что нет 10 разных букв. Если бы у вас было 10 разных букв, то ваш ответ был бы правильным.
Если вы не можете объяснить это «умным» способом, часто стоит попробовать грубую силу. Представьте себе, что вы пытаетесь записать в алфавитном порядке список всех слов, которые вы можете сделать.
Сколько можно начать с «А»? За «A» могут следовать A, B, C, D, E или F, так что это шесть способов.
Сколько можно начать с "B"? За этим могут следовать A, C, D, E или F, что является только пятью способами, поскольку нет второй буквы «B».
Сколько можно начать с "C"? Поскольку «С» появляется в вашем списке три раза, за ним может следовать сама буква или любые другие пять букв, так же как и с «А», существует шесть способов. Обратите внимание, что мы не получаем никаких «дополнительных» способов только потому, что «C» появляется чаще, чем «A»; все, кроме второго появления, является излишним.
Надеемся, что теперь ясно, что каждая буква, которая появляется только один раз в вашем списке, может появляться в начале пяти слов, а буквы, которые появляются дважды или более, могут появляться в начале шести слов. Буквы, которые появляются только один раз, это «B», «E» и «F», каждая из которых может быть в начале пяти слов, так что получается 5 + 5 + 5 = 15 слов. Буквы, которые появляются дважды или более, представляют собой «A», «C» и «D», каждая из которых может быть в начале шести слов, что составляет 6 + 6 + 6 = 18 слов. Всего 15 + 18 = 33 слова.
Это более многословно, чем другие методы, но, пытаясь обдумать ответ таким систематическим способом, вы, возможно, смогли «определить» один из более быстрых методов.
Обратите внимание, что если бы это было сформулировано как вопрос вероятности, ваша первая склонность заключалась в том, чтобы нарисовать древовидную диаграмму . Началось бы с шести ответвлений для первой буквы, но для второй буквы было бы шесть ответвлений от «A», «C» и «D» (потому что за ними может следовать любая из шести букв) но только пять веток выходят из "B", "E" и "F" (потому что они не могут следовать сами за собой). Этот шаблон ветвления практически такой же, как в моем ответе, но вы можете предпочесть думать об этом более наглядно в дереве.
С математической точки зрения решение представляет собой набор элементов декартового произведения между списком и самим удаленным диагонали. Вы можете решить эту проблему, используя этот алгоритм:
Набор - это четко определенный набор различных объектов, поэтому объекты не повторяются.
from itertools import product
import numpy as np
letters = list("aabcccddef")
cartesianproduct = np.array(["".join(i) for i in product(letters,letters)]).reshape(10,10)
cartesianproduct
Out :
array([['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['ba', 'ba', 'bb', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ee', 'ef'],
['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe', 'ff']],
dtype='|S2')
Убираем диагональ
diagremv = np.array([ np.delete(arr,index) for index,arr in enumerate(cartesianproduct)])
diagremv
array([['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['ba', 'ba', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ef'],
['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe']],
dtype='|S2')
Мы вычисляем длину набора элементов:
len(set(list(diagremv.flatten())))
Out: 33
Я думаю, что причина, по которой некоторые считают этот вопрос неясным, заключается в том, что в нем используется термин «двухбуквенные слова». Учитывая то, как каждый подходит к решению, все они интерпретируют «двухбуквенные слова» как нечто вроде «буквенных пар». Будучи заядлым игроком в скрэббл, я сразу же взял вопрос, чтобы сказать: «Сколько законных двухбуквенных слов можно сделать из этих букв?» И это ответ - 12! По крайней мере, согласно последнему изданию Официального словаря игроков в скрэббл (OSPD5). Это слова aa, ab, ad, ae, ba, be, da, de, ed, ef, fa и fe. (Пожалуйста, имейте в виду, что тот факт, что вы никогда не слышали о многих из этих слов, не отрицает их обоснованность!); O)
Просто мое "2 чувства".
Есть проблема в том, как вы задаете свой вопрос. Какие действия на самом деле разрешают в строке "aabcccddef" принимать двухбуквенное слово? Можем ли мы заменить последнее или только пересечь ненужное? Я нашел два возможных ответа в зависимости от этих условий:
1) Если мы можем заменить буквы любым способом, ответом будет 33, как упоминалось ранее. 30 пар разных букв (6 * 5) и 3 пары одинаковых букв.
2) Если мы не можем поменять местами буквы и можем только пересечь, мы получим гораздо меньше ответов. Давайте посчитаем от начала до конца. Начиная с «а» у нас есть 6 букв на втором месте, начиная с «б», это только 4. «с» также имеет 4, «d» - 3 и «е» - 1. Это всего 18.
мой ответ на вопрос: сколько двухбуквенных слов вы можете получить от aabcccddef
* // Дело в том, что вопрос гласит: «слова», а не комбинации пар. При использовании слов буква должна появляться дважды, чтобы использовать слово более одного раза, например, есть две буквы «а» и две буквы «д», поэтому можно написать «ad» как слово дважды.
[self-study]
тег и прочитайте его вики .