Asignación de mesas para bodas: plano de invitados automático
14 invitados en mesas de 8 quedan en 2 mesas: la familia de la novia y los amigos de la universidad llenan la primera, y la familia del novio con dos invitados sin grupo ocupa la segunda, con 2 sillas libres. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Tamaño de mesa
- 8
- Cantidad de mesas
- 2
- Número de invitados
- 14
- Asientos vacíos
- 2
Los invitados del mismo grupo se sientan juntos siempre que quepan, los grupos más grandes se colocan primero para que no se queden sin sitio por los huecos sueltos, y cualquier grupo que simplemente no quepa en una mesa se notifica como error en lugar de dividirse en silencio. El resultado es un plano de mesas determinista y listo para imprimir.
Un plano de mesas sin hoja de cálculo
Quien haya organizado una boda sabe que el plano de mesas es la tarea que se come las dos últimas semanas. La lista de invitados está cerrada, luego llama una tía, después cancela un primo, y las mesas tan bien pensadas se deshacen. El generador de planos de mesas para bodas elimina los cálculos de ese bucle.
Usted aporta la lista de invitados, cada uno etiquetado con su grupo —la familia de la novia, los compañeros del novio, los amigos de la universidad— y el número de asientos por mesa. La herramienta devuelve las mesas, quién se sienta en cada una y cuántos asientos quedan libres. Cambie la lista, ejecútelo de nuevo y obtendrá un plan nuevo en milisegundos en lugar de una tarde entera arrastrando nombres por un documento.
Como el algoritmo es determinista, la misma entrada siempre produce el mismo plano, así que puede comparar dos versiones de la lista con la seguridad de que cualquier diferencia procede de los datos, no del azar.
Cómo se mantienen unidos los grupos
La asignación utiliza una estrategia de primer ajuste decreciente, el enfoque estándar para este tipo de problema de empaquetado. Primero, los invitados se agrupan; un invitado sin afiliación se convierte en un grupo de uno, lo cual es justo lo adecuado para acompañantes y compañeros que no conocen a nadie más. Los grupos se ordenan de mayor a menor, de modo que las grandes mesas familiares se reservan antes de que el salón se llene de parejas y personas solas.
Cada grupo se coloca en la primera mesa que aún tiene suficientes asientos libres, y solo se abre una mesa nueva cuando ninguna existente puede acoger al grupo entero.
Consejos prácticos para una boda real
Use grupos que reflejen cómo la gente quiere sentarse de verdad, no todas las etiquetas que se le ocurran: de ocho a quince afiliaciones con sentido es lo típico en una boda de cien invitados. Si el lugar ofrece mesas de distintos tamaños, ejecute la herramienta una vez por tamaño y compare los asientos vacíos: la salida le dice exactamente cuántos asientos quedan sin usar, que es el dato que importa cuando el catering cobra por cubierto.
A las parejas que deben sentarse juntas pero pertenecen a círculos distintos se les puede dar una etiqueta de grupo compartida para forzar el emparejamiento. Y recuerde que la herramienta optimiza la cohesión y el número de mesas, no la política: no sabrá que dos tíos no deben compartir mesa. Tome su resultado como un primer borrador sólido y luego mueva los dos o tres nombres que su conocimiento de la familia le indique.
Qué puede hacer con ella
Redacte el plano de mesas del banquete
Convierta la lista definitiva de invitados en un plan de mesas con una sola llamada y regenérelo al instante cuando cambien las confirmaciones.
Compare tamaños de mesa del lugar
Ejecute la misma lista con mesas de 8, 10 y 12 para ver qué distribución desperdicia menos asientos pagados.
Organice una cena de empresa o una gala
Mantenga juntos a los departamentos y equipos de clientes en las mesas del banquete sin dibujar el salón a mano.
Preguntas frecuentes
¿Cuánto cuesta?
También es gratis ejecutarlo en su navegador en esta página con el mismo motor.
¿Y los invitados sin grupo?
Cada invitado sin afiliación se trata como un grupo de una sola persona y se usa para rellenar los asientos restantes después de colocar los grupos más grandes.
¿El resultado es siempre el mismo para la misma lista?
Sí. El algoritmo es totalmente determinista: una entrada idéntica siempre produce un plano de mesas idéntico.
¿Minimiza el número de mesas?
Utiliza el primer ajuste decreciente, una heurística de empaquetado muy conocida que prioriza la integridad de los grupos y suele usar muy pocas mesas, informando del número de asientos vacíos para que pueda valorar la distribución.
¿Qué pasa si una familia es más grande que una mesa?
No se genera el plano y aparece un aviso claro con el nombre de ese grupo y su tamaño. Una familia nunca se divide entre mesas sin avisar: esa decisión le corresponde a usted, no a la herramienta.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/life/wedding-guest-seating \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"guests":[{"name":"Ana","group":"Bride family"},{"name":"Luis","group":"Bride family"},{"name":"Marta","group":"College friends"},{"name":"Pablo","group":"College friends"},{"name":"Sofia"}],"table_size":8}'const res = await fetch("https://api.kit.forhosting.com/life/wedding-guest-seating", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"guests": [
{
"name": "Ana",
"group": "Bride family"
},
{
"name": "Luis",
"group": "Bride family"
},
{
"name": "Marta",
"group": "College friends"
},
{
"name": "Pablo",
"group": "College friends"
},
{
"name": "Sofia"
}
],
"table_size": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/wedding-guest-seating",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"guests": [
{
"name": "Ana",
"group": "Bride family"
},
{
"name": "Luis",
"group": "Bride family"
},
{
"name": "Marta",
"group": "College friends"
},
{
"name": "Pablo",
"group": "College friends"
},
{
"name": "Sofia"
}
],
"table_size": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/wedding-guest-seating", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"guests":[{"name":"Ana","group":"Bride family"},{"name":"Luis","group":"Bride family"},{"name":"Marta","group":"College friends"},{"name":"Pablo","group":"College friends"},{"name":"Sofia"}],"table_size":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"guests":[{"name":"Ana","group":"Bride family"},{"name":"Luis","group":"Bride family"},{"name":"Marta","group":"College friends"},{"name":"Pablo","group":"College friends"},{"name":"Sofia"}],"table_size":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/wedding-guest-seating", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"guests": [
{
"name": "Ana",
"group": "Bride family"
},
{
"name": "Luis",
"group": "Bride family"
},
{
"name": "Marta",
"group": "College friends"
},
{
"name": "Pablo",
"group": "College friends"
},
{
"name": "Sofia"
}
],
"table_size": 8
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.wedding_guest_seating",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_guests | 1000 |
max_groups | 200 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
La API de asignación de mesas para bodas recibe una lista de invitados —cada uno con una afiliación de grupo opcional, como una rama de la familia o un círculo de amigos— y un tamaño de mesa, y devuelve un plan completo.
Cómo se mantienen unidos los grupos
Un grupo nunca se reparte entre mesas: si una sola afiliación tiene más miembros que el tamaño de la mesa, la API rechaza la entrada con un error claro que indica el grupo y su tamaño, porque dividir una familia es una decisión de planificación que debe tomar usted, no algo que el software deba decidir en silencio.
Preguntas técnicas
¿Qué ocurre si un grupo es más grande que una mesa?
La solicitud falla con un error invalid_input que indica el grupo y su tamaño. Los grupos nunca se dividen automáticamente.
¿Cuántos invitados admite?
Hasta 1000 invitados y 200 grupos distintos por solicitud, mucho más que cualquier boda.