(aa byłby jednym z wielu, bb nie)
Myślałem, że to będzie 10! / 8! Ale najwyraźniej robię coś złego. Czy ktoś może mi pomóc, bo jestem zakłopotany.
(aa byłby jednym z wielu, bb nie)
Myślałem, że to będzie 10! / 8! Ale najwyraźniej robię coś złego. Czy ktoś może mi pomóc, bo jestem zakłopotany.
Odpowiedzi:
Masz 6 różnych liter: a, b, c, d, e, f, z których możesz wygenerować 6 x 5 = 30 słów za pomocą dwóch różnych liter. Ponadto możesz wygenerować 3 słowa aa, cc, dd z tą samą literą dwa razy. Zatem łączna liczba słów wynosi 30 + 3 = 33.
Alternatywa dla metody Zahavy: istnieje sposobów parowania dwóch liter af. Jednak nie ma 2 znaków b, e lub f, więc „bb”, „ee” i „ff” nie są możliwe, dzięki czemu liczba słów 36 - 3 = 33 .
Sposób, w jaki próbowałeś podejść do problemu, wydaje się ignorować fakt, że nie ma 10 różnych liter. Jeśli miałbyś 10 różnych liter, twoja odpowiedź byłaby poprawna.
Jeśli nie potrafisz tego uzasadnić w „sprytny” sposób, często warto spróbować brutalnej siły. Wyobraź sobie, że próbujesz zapisać uporządkowaną alfabetycznie listę wszystkich słów, które możesz napisać.
Ile może zaczynać się od „A”? Cóż, „A” może następować A, B, C, D, E lub F, więc to sześć sposobów.
Ile może zaczynać się na „B”? Następnie mogą występować litery A, C, D, E lub F, czyli tylko pięć sposobów, ponieważ nie ma drugiego „B”.
Ile może zaczynać się na „C”? Ponieważ „C” pojawia się trzy razy na liście, po nim może występować sam lub dowolna z pozostałych pięciu liter, podobnie jak w przypadku „A” istnieje sześć sposobów. Zauważ, że nie dostajemy żadnych „dodatkowych” sposobów tylko dlatego, że „C” pojawia się więcej razy niż „A”; wszystko poza drugim wyglądem jest zbędne.
Mamy nadzieję, że teraz jest jasne, że każda litera, która pojawia się tylko raz na liście, może pojawić się na początku pięciu słów, a litery, które pojawiają się dwa razy lub więcej, mogą pojawić się na początku sześciu słów. Litery, które pojawiają się tylko raz, to „B”, „E” i „F”, z których każda może znajdować się na początku pięciu słów, co daje 5 + 5 + 5 = 15 słów. Litery, które pojawiają się dwa razy lub więcej, to „A”, „C” i „D”, z których każda może znajdować się na początku sześciu słów, co daje 6 + 6 + 6 = 18 słów. W sumie jest 15 + 18 = 33 słów.
Jest to bardziej skomplikowane niż w przypadku innych metod, ale próbując zastanowić się nad odpowiedzią w ten systematyczny sposób, być może udało Ci się „dostrzec” jedną z szybszych metod.
Zauważ, że jeśli zostało to sformułowane jako pytanie prawdopodobieństwa, twoją pierwszą skłonnością mogło być narysowanie diagramu drzewa . Zacząłby się od sześciu gałęzi dla pierwszej litery, ale dla drugiej litery byłoby sześć gałęzi wychodzących z liter „A”, „C” i „D” (ponieważ po nich może następować dowolna z sześciu liter) ale tylko pięć gałęzi wychodzi z „B”, „E” i „F” (ponieważ nie mogą same za sobą podążać). Ten wzór rozgałęziania jest faktycznie taki sam, jak w mojej odpowiedzi, ale możesz pomyśleć o nim bardziej wizualnie na drzewie.
Z matematycznego punktu widzenia rozwiązaniem jest zestaw elementów produktu kartezjańskiego między listą a sobą po usunięciu przekątnej. Możesz rozwiązać ten problem za pomocą tego algorytmu:
Zestaw jest dobrze zdefiniowaną kolekcją różnych obiektów, dlatego obiekty nie są powtarzane.
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')
Usuwamy przekątną
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')
Obliczamy długość zestawu elementów:
len(set(list(diagremv.flatten())))
Out: 33
Myślę, że niektórzy uważają, że pytanie jest niejasne, ponieważ używa terminu „słowa dwuliterowe”. Biorąc pod uwagę sposób, w jaki wszyscy podchodzą do rozwiązania, wszyscy interpretują „2-literowe słowa” w znaczeniu czegoś w rodzaju „par liter”. Jako zapalony gracz Scrabble, od razu przyjąłem pytanie: „Ile legalnych 2-literowych słów można utworzyć z tych liter?” I że odpowiedź brzmi - 12! Przynajmniej według najnowszego wydania Official Scrabble Players Dictionary (OSPD5). Są to: aa, ab, ad, ae, ba, be, da, de, ed, ef, fa i fe. (Należy pamiętać, że fakt, że nigdy nie słyszałeś o wielu z tych słów, nie neguje ich ważności!); O)
Po prostu mój „2 zmysł”.
Jeszcze inny sposób na liczenie bez brutalnej siły:
Jeśli pierwsza litera to a, c lub d, istnieje 6 różnych pozostałych opcji dla drugiej litery.
Ale jeśli pierwszą literą jest b, e lub f, istnieje tylko 5 różnych pozostałych wyborów dla drugiej litery.
Więc tutaj są rozróżnić dwuliterowe słowa.
Podczas zadawania pytania występuje problem. Jakie działania są dozwolone w wierszu „aabcccddef”, aby pobrać 2-literowe słowo? Czy możemy wymienić te ostatnie, czy tylko przekroczyć niepotrzebne? Znalazłem dwie możliwe odpowiedzi w zależności od tych warunków:
1) Możemy w dowolny sposób zastąpić litery odpowiedzią na 33, jak wspomniano wcześniej. 30 par różnych liter (6 * 5) i 3 pary podobnych liter.
2) Jeśli nie możemy zamienić liter na litery i możemy tylko przejść, otrzymamy znacznie mniej odpowiedzi. Policzmy od początku do końca. Zaczynając od „a” mamy 6 liter na drugie, zaczynając od „b” to tylko 4. „c” ma również 4, „d” - 3 i „e” - 1. To w sumie 18.
moja odpowiedź na pytanie: ile 2-literowych słów można uzyskać od aabcccddef
* // Chodzi o pytanie, które brzmi: „słowa”, a nie kombinacje par. Używając słów, litera musiałaby pojawić się dwukrotnie, aby użyć słowa więcej niż jeden raz, na przykład dwie litery to „a” i dwie litery „d”, dlatego możliwe jest dwukrotne wpisanie słowa „reklama”.
[self-study]
tag i przeczytaj jego wiki .