# exercici 6 # variables # paraulaA : primera paraula # paraulaB : segona paraula # marcadaB : vector boolea associat a paraulaB # marcadaB[i] == TRUE significa paraulaB[i] usada # trobada : Si trobada > 0 representa l'index en paraulaB de # la lletra de paraulaA en estudi i que encara no ha # estat usada per a formar l'anagrama. # i : index per a recorrer paraules # funcions cercaLletra <- function(lletra, paraula, marcada){ i <- 1 while ( ! (lletra == paraula[i] && ! marcada[i]) && i < length(paraula)){ i <- i + 1 } if ( lletra == paraula[i] && ! marcada[i] ){ return (i) }else{ return (-1) } } sonAnagrama <- function (paraulaA, paraulaB){ if (nchar(paraulaA) != nchar(paraulaB)){ return (FALSE) }else{ paraulaA <- strsplit(paraulaA, "")[[1]] paraulaB <- strsplit(paraulaB, "")[[1]] marcadaB <- vector(length = length(paraulaB)) i <- 1 trobada <- cercaLletra(paraulaA[i], paraulaB, marcadaB) while (trobada > 0 && i < length(paraulaA)){ marcadaB[trobada] <- TRUE i <- i + 1 trobada <- cercaLletra(paraulaA[i], paraulaB, marcadaB) } return (trobada > 0) } } # programa principal pA = 'roma' pB = 'amor' cat(pA, " i ", pB, " son anagrama: ", sonAnagrama(pA, pB), "\n") pA = 'omar' pB = 'mora' cat(pA, " i ", pB, " son anagrama: ", sonAnagrama(pA, pB), "\n") pA = 'aaab' pB = 'abbb' cat(pA, " i ", pB, " son anagrama: ", sonAnagrama(pA, pB), "\n")