(aa seria um dos muitos, bb não)
Eu pensei que seria 10! / 8! Mas, aparentemente, estou fazendo algo errado. Alguém pode me ajudar porque estou perplexo.
(aa seria um dos muitos, bb não)
Eu pensei que seria 10! / 8! Mas, aparentemente, estou fazendo algo errado. Alguém pode me ajudar porque estou perplexo.
Respostas:
Você tem 6 letras diferentes: a, b, c, d, e, f, das quais é possível gerar 6 x 5 = 30 palavras com duas letras diferentes. Além disso, você pode gerar as 3 palavras aa, cc, dd com a mesma letra duas vezes. Portanto, o número total de palavras é 30 + 3 = 33.
Uma alternativa ao método de Zahava: existem maneiras de emparelhar duas das letras af. No entanto, não existem 2 caracteres b, e ou f, portanto, "bb", "ee" e "ff" não são possíveis, tornando o número de palavras 36 - 3 = .
A maneira como você tentou abordar o problema parece ignorar o fato de que não há dez letras distintas. Se você tivesse 10 letras distintas, sua resposta estaria correta.
Se você não pode argumentar de uma maneira "inteligente", geralmente vale a pena tentar a força bruta. Imagine tentar escrever uma lista ordenada alfabeticamente de todas as palavras que você pode criar.
Quantos podem começar com "A"? Bem, "A" pode ser seguido por A, B, C, D, E ou F, então são seis maneiras.
Quantos podem começar com "B"? Isso pode ser seguido por A, C, D, E ou F, que são apenas cinco maneiras, já que não existe um segundo "B".
Quantos podem começar com "C"? Como "C" aparece três vezes na sua lista, ele pode ser seguido por si ou por qualquer uma das outras cinco letras, assim como em "A", existem seis maneiras. Observe que não temos maneiras "extras" apenas porque "C" aparece mais vezes que "A"; qualquer coisa além de uma segunda aparição é redundante.
Esperamos que agora esteja claro que cada letra que aparece apenas uma vez na sua lista pode aparecer no início de cinco palavras, e as letras que aparecem duas ou mais vezes podem aparecer no início de seis palavras. As letras que aparecem apenas uma vez são "B", "E" e "F", cada uma das quais pode estar no início de cinco palavras, de forma que 5 + 5 + 5 = 15 palavras. As letras que aparecem duas ou mais são "A", "C" e "D", cada uma das quais pode estar no início de seis palavras, de modo que 6 + 6 + 6 = 18 palavras. No total, existem 15 + 18 = 33 palavras.
Isso é mais demorado do que os outros métodos, mas, ao tentar pensar sobre a resposta dessa maneira sistemática, você pode "identificar" um dos métodos mais rápidos.
Observe que, se isso tivesse sido formulado como uma pergunta de probabilidade, sua primeira inclinação talvez fosse desenhar um diagrama em árvore . Teria começado com seis ramificações para a primeira letra, mas para a segunda letra haveria seis ramificações saindo de "A", "C" e "D" (porque elas podem ser seguidas por qualquer uma das seis letras) mas apenas cinco ramos saindo de "B", "E" e "F" (porque não podem ser seguidos por eles mesmos). Esse padrão de ramificação é efetivamente o mesmo que na minha resposta, mas você pode preferir pensar mais visualmente em uma árvore.
Do ponto de vista matemático, a solução é o conjunto de elementos do produto cartesiano entre a lista e ela própria, uma vez removida a diagonal. Você pode resolver esse problema usando este algoritmo:
Um conjunto é uma coleção bem definida de objetos distintos, portanto, os objetos não são repetidos.
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')
Nós removemos a diagonal
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')
Calculamos o comprimento do conjunto de elementos:
len(set(list(diagremv.flatten())))
Out: 33
Eu acho que a razão pela qual alguns acham que a pergunta não está clara é porque ela usa o termo "palavras de 2 letras". Dada a maneira como todos estão abordando uma solução, todos interpretam "palavras de duas letras" para significar algo como "pares de letras". Como um ávido jogador de Scrabble, imediatamente entendi a pergunta: "Quantas palavras legítimas de duas letras podem ser feitas com essas letras?" E isso resposta é - 12! Pelo menos, de acordo com a última edição do Dicionário Oficial de Jogadores de Scrabble (OSPD5). As palavras são aa, ab, ad, ae, ba, be, da, de, ed, ef, fa e fe. (Lembre-se de que o fato de você nunca ter ouvido falar de muitas dessas palavras não nega sua validade!); O)
Apenas o meu "2 sense".
Mais uma maneira de contar sem força bruta:
Se a primeira letra for a, c ou d, existem 6 opções distintas para a segunda letra.
Mas se a primeira letra for b, e ou f, existem apenas cinco opções distintas para a segunda letra.
Há um problema na maneira como você faz sua pergunta. Quais ações são realmente permitidas na linha "aabcccddef" para receber a palavra de duas letras? Podemos substituir o último ou apenas atravessar o desnecessário? Encontrei duas respostas possíveis, dependendo dessas condições:
1) Podemos substituir as letras de qualquer maneira pela resposta 33, como mencionado anteriormente. 30 pares de letras diferentes (6 * 5) e 3 pares de letras semelhantes.
2) Se não podemos trocar de lugar entre as letras e só podemos cruzar, obteremos muito menos respostas. Vamos contar do começo ao fim. Começando com "a", temos 6 letras para ser o segundo, começando com "b" é apenas 4. "c" também possui 4, "d" - 3 e "e" - 1. São 18 no total.
minha resposta à pergunta: Quantas palavras de duas letras você pode obter de aabcccddef
* // O ponto é que a pergunta diz: "palavras", não combinações de pares. Usando palavras, a letra teria que aparecer duas vezes para usar a palavra mais de uma vez, por exemplo, existem duas da letra 'a' e duas da letra 'd', portanto, é possível escrever 'ad' como uma palavra duas vezes.
[self-study]
tag e leia seu wiki .