(aa sarebbe uno dei tanti, bb no)
Ho pensato che sarebbe stato 10! / 8! Ma a quanto pare sto facendo qualcosa di sbagliato. Qualcuno può aiutarmi perché sono sconcertato.
(aa sarebbe uno dei tanti, bb no)
Ho pensato che sarebbe stato 10! / 8! Ma a quanto pare sto facendo qualcosa di sbagliato. Qualcuno può aiutarmi perché sono sconcertato.
Risposte:
Hai 6 lettere diverse: a, b, c, d, e, f da cui puoi generare 6 x 5 = 30 parole con due lettere diverse. Inoltre, puoi generare le 3 parole aa, cc, dd con la stessa lettera due volte. Quindi il numero totale di parole è 30 + 3 = 33.
Un'alternativa al metodo Zahava: ci sono modi per abbinare due delle lettere af. Tuttavia, non ci sono 2 caratteri b, e o f, quindi "bb", "ee" e "ff" non sono possibili, rendendo il numero di parole 36 - 3 = 33 .
Il modo in cui hai provato ad affrontare il problema sembra ignorare il fatto che non ci sono 10 lettere distinte. Se avessi 10 lettere distinte, la tua risposta sarebbe corretta.
Se non riesci a ragionare in modo "intelligente", spesso vale la pena provare la forza bruta. Immagina di provare a scrivere un elenco in ordine alfabetico di tutte le parole che puoi fare.
Quanti possono iniziare con "A"? Bene "A" può essere seguito da A, B, C, D, E o F, quindi sono sei modi.
Quanti possono iniziare con "B"? Questo può essere seguito da A, C, D, E o F, che sono solo cinque modi, poiché non esiste una seconda "B".
Quanti possono iniziare con "C"? Poiché "C" appare tre volte nell'elenco, può essere seguito da solo o da una qualsiasi delle altre cinque lettere, così come con "A" ci sono sei modi. Nota che non otteniamo modi "extra" solo perché "C" appare più volte di "A"; qualsiasi cosa oltre una seconda apparizione è ridondante.
Spero ora sia chiaro che ogni lettera che appare una sola volta nel tuo elenco può apparire all'inizio di cinque parole e le lettere che appaiono due o più volte possono apparire all'inizio di sei parole. Le lettere che compaiono una sola volta sono "B", "E" e "F", ognuna delle quali può essere all'inizio di cinque parole, in modo da rendere 5 + 5 + 5 = 15 parole. Le lettere che appaiono due o più volte sono "A", "C" e "D", ognuna delle quali può essere all'inizio di sei parole, in modo da rendere 6 + 6 + 6 = 18 parole. In totale ci sono 15 + 18 = 33 parole.
Questo è più complicato rispetto agli altri metodi, ma cercando di pensare alla risposta in questo modo sistematico potresti essere stato in grado di "individuare" uno dei metodi più veloci.
Nota che se questa fosse stata formulata come una domanda di probabilità, la tua prima inclinazione potrebbe essere stata quella di disegnare un diagramma ad albero . Avrebbe iniziato con sei rami per la prima lettera, ma per la seconda lettera ci sarebbero stati sei rami che uscivano da "A", "C" e "D" (perché possono essere seguiti da una qualsiasi delle sei lettere) ma solo cinque rami escono da "B", "E" e "F" (perché non possono essere seguiti da soli). Questo modello di ramificazione è effettivamente lo stesso della mia risposta, ma potresti preferire pensarlo più visivamente su un albero.
Da un punto di vista matematico, la soluzione è l'insieme di elementi del prodotto cartesiano tra l'elenco e se stesso una volta rimossa la diagonale. Puoi risolvere questo problema usando questo algoritmo:
Un set è una raccolta ben definita di oggetti distinti, quindi gli oggetti non vengono ripetuti.
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')
Rimuoviamo la diagonale
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')
Calcoliamo la lunghezza dell'insieme di elementi:
len(set(list(diagremv.flatten())))
Out: 33
Penso che il motivo per cui alcuni ritengono che la domanda non sia chiara perché usa il termine "parole di 2 lettere". Dato il modo in cui tutti si avvicinano a una soluzione, stanno tutti interpretando "parole di 2 lettere" per significare qualcosa come "coppie di lettere". Come avido giocatore di Scrabble, ho immediatamente preso la domanda che significa "Quante parole legittime di 2 lettere possono essere fatte da queste lettere?" E quella risposta è - 12! Almeno, secondo l'ultima edizione del Official Scrabble Players Dictionary (OSPD5). Le parole sono aa, ab, ad, ae, ba, be, da, de, ed, ef, fa e fe. (Tieni presente che il fatto di non aver mai sentito parlare di molte di queste parole non ne nega la validità!); O)
Solo il mio "2 senso".
Ancora un altro modo di contare senza forza bruta:
Se la prima lettera è a, c, o ci sono 6 scelte distinte rimanenti per la seconda lettera.
Ma se la prima lettera è b, e, o f ci sono solo 5 distinte scelte rimanenti per la seconda lettera.
C'è un problema nel modo in cui fai la tua domanda. Quali azioni sono effettivamente consentite sulla linea "aabcccddef" per prendere una parola di 2 lettere? Possiamo sostituire quest'ultimo o solo attraversare il superfluo? Ho trovato due possibili risposte a seconda di queste condizioni:
1) Possiamo sostituire le lettere in qualsiasi modo con la risposta 33 come è stato menzionato prima. 30 coppie di lettere diverse (6 * 5) e 3 coppie di lettere simili.
2) Se non riusciamo a cambiare il posto delle lettere e possiamo solo attraversare, avremo molto meno risposta. Contiamo dall'inizio alla fine. Iniziando con "a" abbiamo 6 lettere per essere il secondo, iniziando con "b" è solo 4. "c" ha anche 4, "d" - 3 ed "e" - 1. Sono 18 in totale.
la mia risposta alla domanda: quante parole di 2 lettere puoi ottenere da aabcccddef
* // Il punto è che la domanda legge, "parole" non combinazioni di coppie. Usando le parole la lettera dovrebbe apparire due volte per usare la parola più di una volta, ad esempio ci sono due della lettera 'a' e due della lettera 'd', quindi è possibile scrivere 'annuncio' come una parola due volte.
[self-study]
tag e leggi la sua wiki .