Distribuidor de convidados em mesas de casamento: mapa automático
14 convidados em mesas de 8 viram 2 mesas: a família da noiva e os amigos da faculdade ocupam a primeira, e a família do noivo com dois convidados sem grupo fica na segunda, sobrando 2 lugares. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Tamanho da mesa
- 8
- Quantidade de mesas
- 2
- Número de convidados
- 14
- Assentos vazios
- 2
Os convidados do mesmo grupo sentam-se à mesma mesa sempre que couberem, os grupos maiores são alocados primeiro para não ficarem sem lugar por causa de assentos fragmentados, e qualquer grupo que simplesmente não caiba em uma mesa é reportado como erro, em vez de ser dividido silenciosamente. O resultado é um mapa de assentos determinístico e pronto para imprimir.
Um mapa de mesas sem planilha
Quem já organizou um casamento sabe que o mapa de assentos é a tarefa que consome as duas últimas semanas. A lista de convidados fica pronta, aí uma tia liga, um primo desiste, e as mesas cuidadosamente montadas desmoronam. O gerador de mapa de mesas para casamento tira a aritmética desse ciclo.
Você fornece a lista de convidados, cada um marcado com o grupo ao qual pertence — a família da noiva, os colegas do noivo, os amigos da faculdade — e o número de lugares por mesa. A ferramenta devolve as mesas, quem senta em cada uma e quantos lugares sobram. Mudou a lista?
Rode de novo e tenha um novo plano em milissegundos, em vez de uma noite arrastando nomes num documento. Como o algoritmo é determinístico, a mesma entrada sempre produz o mesmo mapa, então você pode comparar duas versões da lista com a certeza de que qualquer diferença vem dos dados, não do acaso.
Como os grupos ficam juntos
A distribuição usa a estratégia first-fit decreasing, a abordagem padrão para esse tipo de problema de empacotamento. Primeiro, os convidados são reunidos em seus grupos; quem não tem afiliação vira um grupo de uma pessoa, o que é ideal para acompanhantes e colegas que não conhecem mais ninguém. Os grupos são então ordenados do maior para o menor, de modo que as grandes mesas de família são garantidas antes que o salão se encha de casais e pessoas sozinhas.
Cada grupo é colocado na primeira mesa que ainda tem lugares suficientes, e uma nova mesa só é aberta quando nenhuma existente comporta o grupo inteiro.
Dicas práticas para um casamento de verdade
Use grupos que reflitam como as pessoas realmente querem sentar, não todos os rótulos que você puder inventar: de oito a quinze afiliações significativas é o típico para um casamento de cem convidados. Se o local oferece mesas de tamanhos diferentes, rode a ferramenta uma vez por tamanho e compare a contagem de lugares vazios — o resultado mostra exatamente quantos assentos ficam sem uso, o número que importa quando o buffet cobra por lugar.
Casais que devem sentar juntos, mas pertencem a círculos diferentes, podem receber o mesmo rótulo de grupo para forçar a combinação. E lembre-se: a ferramenta otimiza a coesão e o número de mesas, não a política familiar — ela não sabe que dois tios não devem dividir a mesma mesa. Trate o resultado como um excelente primeiro rascunho e depois mova os dois ou três nomes que o seu conhecimento da família mandar.
Casos de uso
Monte o mapa de mesas da recepção
Transforme a lista final de convidados em um plano de mesas em uma única chamada e gere-o novamente sempre que as confirmações mudarem.
Compare tamanhos de mesa do local
Rode a mesma lista com mesas de 8, 10 e 12 lugares para ver qual layout desperdiça menos assentos pagos.
Organize um jantar corporativo ou gala
Mantenha departamentos e equipes de clientes juntos nas mesas do banquete sem desenhar o salão à mão.
Perguntas frequentes
Quanto custa?
Também é grátis rodar no seu navegador nesta página, com o mesmo mecanismo.
E os convidados sem grupo?
Cada convidado sem afiliação é tratado como um grupo de uma pessoa e usado para preencher os lugares restantes depois que os grupos maiores são alocados.
O resultado é sempre o mesmo para a mesma lista?
Sim. O algoritmo é totalmente determinístico: entradas idênticas sempre geram mapas de assentos idênticos.
Ele minimiza o número de mesas?
Ele usa first-fit decreasing, uma heurística de empacotamento bem conhecida que prioriza a integridade dos grupos e normalmente usa poucas mesas, informando a contagem de lugares vazios para você avaliar o layout.
E se uma família for maior que uma mesa?
O mapa não é gerado e aparece um aviso claro com o nome desse grupo e o tamanho dele. Uma família nunca é dividida entre mesas sem aviso: essa decisão é sua, não da ferramenta.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"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
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.wedding_guest_seating",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_guests | 1000 |
max_groups | 200 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
A API de distribuição de convidados em mesas de casamento recebe uma lista de convidados — cada um com uma afiliação de grupo opcional, como um ramo da família ou um círculo de amigos — e o tamanho da mesa, e devolve um plano de mesas completo.
Como os grupos ficam juntos
Um grupo nunca é dividido entre mesas: se uma única afiliação tem mais membros que o tamanho da mesa, a API rejeita a entrada com um erro claro, informando o grupo e seu tamanho, porque dividir uma família é uma decisão de planejamento que você deve tomar, não algo que o software decida em silêncio.
Perguntas técnicas
E se um grupo for maior que uma mesa?
A requisição falha com um erro invalid_input informando o grupo e seu tamanho. Os grupos nunca são divididos automaticamente.
Quantos convidados ele suporta?
Até 1000 convidados e 200 grupos distintos por requisição, muito além de qualquer casamento.