Para el sorteo vamos a necesitar los nombres y correos electrónicos de cada participante, los cuales los pondremos en
filas en el rango A2:B20, poniendo en la columna A los nombres y en la B los correos
Como los otros script, simplemente necesitaremos una hoja de Google y acceder al editor de secuencias de comandos.
Reemplazaremos el código que nos propone por este otro:
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
function equalList(a, b){
for(var i=0; i<a.length; i++){
if( a[i]===b[i])
return true;
}
return false;
}
const subject = "Tu amigo invisible"
function repartir() {
const sheet = SpreadsheetApp.getActiveSheet()
const range = sheet.getRange(2,1,20,3).getValues()
const friends = [];
let availables = []
for( var r = 0; r < range.length; r++){
if( !range[r][0] )
continue;
friends.push( range[r][0])
availables.push( range[r][0])
}
for( var retry=0; retry<10; retry++){
shuffleArray(availables)
Logger.log(availables)
if( equalList(friends, availables) == false)
break
}
for( var r=0; r<availables.length; r++){
range[r][2] = availables[r];
const message = `Hola ${range[r][0]} \n En el sorteo del amigo invisible te ha tocado: ${range[r][2]}`
MailApp.sendEmail(range[r][1], subject, message);
}
}
Básicamente vamos a tener dos funciones de apoyo (una para randomizar una lista de nombres y otra para comparar
dos listas y si algun elemento se encuentra repetido en la misma posición marcarlas como "iguales")
La lógica principal reside en la funcion repartir, que simplemente leerá la hoja de Google, randomizará la lista
de participantes y comprobará que ninguno se ha tocado así mismo (si así fuera, randomizamos de nuevo)
Una vez asignados iremos enviando un correo a cada uno de los participantes indicandoles quién le ha tocado como
amigo invisible.
- INFO
-
Lógicamente, el usuario que ejecute el script podrá saber a quién le ha tocado cada uno simplemente mirando
la bandeja de salida, así que pídete tú ser quien lo organizará este año
Simplemente falta añadir un botón o disparador de la función al estilo de los otros post sobre GoogleSheet y ejecutarlo
para que cada miembro de la lista reciba su correo