Es muy sencillo...
tienes 15 frases en 4 partes...
Se trata simplemente de tomar un indice en cada array de parte al azar entre los no elegidos aún, que es el que se toma...
y un índice para todas que al comienzo apunta al último, éste se va reduciendo con cada llamada.
Cada vez que se eleige un texto, este se remplaza por el del final, y el final se reduce en 1... cuando solo queda el 0, este se toma si o sí, luego el final vuelve a ser el 14.
como los valores se eligen al azar, se van deositando (cada array), tambien al azar al final, por lo que siempre estarán constantemente barajados...
El pseudocódigo para esto es muy simple...
entero max= 14
string = funcion Generarfrase
string f
f = TomarParte(Array1, max)
f =f + TomarParte(Array2, max)
f =f + TomarParte(Array3, max)
f = f+ TomarParte(Array4, max)
max = (max -1)
si max= -1 luego max = 14
devolver f
fin funcion
string = Funcion TomarParte(array de string ArrayX, entero max)
entero x
string tmp
// elegir un índice al azar entre 0 y los restantes disponibles.
x=random entre 0 y max
// remplezar el elegido por el último disponible (en este momento)
tmp = ArrayX(x)
ArrayX(x) = ArrayX(max)
ArrayX(max) = tmp
devolver tmp
fin funcion