(AA sería uno de muchos, bb no)
¡Pensé que serían 10! / 8! Pero aparentemente estoy haciendo algo mal. ¿Alguien puede ayudarme porque estoy perplejo?
(AA sería uno de muchos, bb no)
¡Pensé que serían 10! / 8! Pero aparentemente estoy haciendo algo mal. ¿Alguien puede ayudarme porque estoy perplejo?
Respuestas:
Tiene 6 letras diferentes: a, b, c, d, e, f de las cuales puede generar 6 x 5 = 30 palabras con dos letras diferentes. Además, puede generar las 3 palabras aa, cc, dd con la misma letra dos veces. Entonces el número total de palabras es 30 + 3 = 33.
Una alternativa al método de Zahava: hay formas de emparejar dos de las letras af. Sin embargo, no hay 2 caracteres b, e o f, por lo que "bb", "ee" y "ff" no son posibles, lo que hace que el número de palabras 36 - 3 = 33 .
La forma en que ha tratado de abordar el problema parece ignorar el hecho de que no hay 10 letras distintas. Si tuviera 10 letras distintas, entonces su respuesta sería correcta.
Si no puede razonarlo de una manera "inteligente", a menudo vale la pena probar la fuerza bruta. Imagínese tratando de escribir una lista ordenada alfabéticamente de todas las palabras que puede hacer.
¿Cuántos pueden comenzar con "A"? Bueno, "A" puede ser seguido por A, B, C, D, E o F, así que son seis formas.
¿Cuántos pueden comenzar con "B"? Esto puede ser seguido por A, C, D, E o F, que son solo cinco formas, ya que no hay una segunda "B".
¿Cuántos pueden comenzar con "C"? Dado que "C" aparece tres veces en su lista, puede ser seguido por sí mismo o por cualquiera de las otras cinco letras, así como con "A" hay seis formas. Tenga en cuenta que no obtenemos ninguna forma "extra" solo porque "C" aparece más veces que "A"; cualquier cosa más allá de una segunda aparición es redundante.
Con suerte, ahora está claro que cada letra que aparece solo una vez en su lista puede aparecer al comienzo de cinco palabras, y las letras que aparecen dos veces o más pueden aparecer al comienzo de seis palabras. Las letras que aparecen solo una vez son "B", "E" y "F", cada una de las cuales puede estar al comienzo de cinco palabras, de modo que 5 + 5 + 5 = 15 palabras. Las letras que aparecen dos veces o más son "A", "C" y "D", cada una de las cuales puede estar al comienzo de seis palabras, lo que hace que 6 + 6 + 6 = 18 palabras. En total hay 15 + 18 = 33 palabras.
Esto es más extenso que los otros métodos, pero al tratar de pensar en la respuesta de esta manera sistemática, es posible que haya podido "detectar" uno de los métodos más rápidos.
Tenga en cuenta que si esto se hubiera formulado como una pregunta de probabilidad, su primera inclinación podría haber sido dibujar un diagrama de árbol . Habría comenzado con seis ramas para la primera letra, pero para la segunda letra habría seis ramas saliendo de "A", "C" y "D" (porque pueden ser seguidas por cualquiera de las seis letras) pero solo cinco ramas que salen de "B", "E" y "F" (porque no pueden ser seguidas por sí mismas). Este patrón de ramificación es efectivamente el mismo que en mi respuesta, pero es posible que prefiera pensarlo más visualmente en un árbol.
Desde un punto de vista matemático, la solución es el conjunto de elementos del producto cartesiano entre la lista y sí mismo una vez eliminada la diagonal. Puede resolver este problema usando este algoritmo:
Un conjunto es una colección bien definida de objetos distintos, por lo tanto, los objetos no se repiten.
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')
Quitamos la 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 la longitud del conjunto de elementos:
len(set(list(diagremv.flatten())))
Out: 33
Creo que la razón por la que algunos piensan que la pregunta no está clara es porque usa el término "palabras de 2 letras". Dada la forma en que todos se acercan a una solución, todos interpretan "palabras de 2 letras" para que signifiquen algo así como "pares de letras". Como un ávido jugador de Scrabble, que tomó inmediatamente la cuestión en el sentido de: "¿Cuántos legítimos palabras de 2 letras se pueden hacer de estas cartas?" Y eso respuesta es - 12! Al menos, según la última edición del Diccionario Oficial de Jugadores de Scrabble (OSPD5). Las palabras son aa, ab, ad, ae, ba, be, da, de, ed, ef, fa y fe. (¡Tenga en cuenta que el hecho de que nunca haya oído hablar de muchas de estas palabras no niega su validez!); O)
Solo mi "sentido 2".
Otra forma de contar sin fuerza bruta:
Si la primera letra es a, c o d, quedan 6 opciones distintas para la segunda letra.
Pero si la primera letra es b, e o f, solo quedan 5 opciones distintas para la segunda letra.
Entonces hay Distintas palabras de dos letras.
Hay un problema en la forma en que haces tu pregunta. ¿Qué acciones están permitidas en la línea "aabcccddef" para tomar una palabra de 2 letras? ¿Podemos reemplazar lo último o solo cruzar lo innecesario? He encontrado dos respuestas posibles dependiendo de estas condiciones:
1) Podemos reemplazar las letras de cualquier manera, la respuesta como 33 como se mencionó anteriormente. 30 pares de letras diferentes (6 * 5) y 3 pares de letras similares.
2) Si no podemos cambiar el lugar de las letras y solo podemos cruzar, obtendremos mucha menos respuesta. Vamos a contar de principio a fin. Comenzando con "a" tenemos 6 letras para ser el segundo, comenzando con "b" es solo 4. "c" también tiene 4, "d" - 3 y "e" - 1. Eso es 18 totalmente.
mi respuesta a la pregunta: ¿Cuántas palabras de 2 letras puedes obtener de aabcccddef
* // El punto es que la pregunta dice "palabras", no combinaciones de pares. Usando palabras, la letra tendría que aparecer dos veces para usar la palabra más de una vez, por ejemplo, hay dos de la letra 'a' y dos de la letra 'd', por lo tanto, es posible escribir 'ad' como palabra dos veces.
[self-study]
etiqueta y lea su wiki .