Web-MVP (M1): FastAPI-API, Testoberflaeche, tische.ini-Upload, zwei neue Beispiele

- web/main.py: Session-basierte REST-API um den GA-Kern (POST /sitzung,
  .../tische, .../tische-datei, .../personen, .../berechnen,
  GET .../ergebnis[.svg]); Sessions in-memory mit 24h-TTL
- web/static/index.html: einfache Browser-Testoberflaeche (Tisch-Tabelle
  mit Presets, tische.ini-Upload, CSV-Gaesteliste, Kennzahlen, SVG)
- bin/run_web.bat/.sh + run_web_helper.ps1: start/stop/status inkl.
  Aufraeumen verwaister uvicorn-Reload-Kindprozesse (Zombie-Sockets)
- work/hochzeit: 120 Hochzeitsgaeste, Ehrentafel, Kindertisch/Teenager-
  Tisch fest gesetzt, Kinderalter normalverteilt, ~85% Auslastung
- work/innenhoefe: 300 Gaeste in zwei trapezfoermigen Innenhoefen mit
  4er-Tischen, 12 VIPs vor der Buehne, Umfeld.svg mit Tanzflaeche/Band
- Roadmap: Konzeptentscheidungen 1-11 (Zielgruppe, Einmalzahlung, MoR,
  Hetzner, Zwei-Marken-Strategie Sitz&Platz/SeatWonder), Namensrecherche
  im Anhang, M1-Fortschritt und GA-Lasttest-Datenpunkt dokumentiert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Michael Stangl
2026-07-11 10:21:45 +02:00
parent 5124b7fab6
commit 00dffc59eb
20 changed files with 5706 additions and 20 deletions
+1
View File
@@ -6,3 +6,4 @@ work/ausgabe.txt
out/
.vscode/
*.swp
/log/
+76
View File
@@ -0,0 +1,76 @@
@echo off
REM ================================================================
REM Verwaltet die lokale Web-Testinstanz (FastAPI/uvicorn, M1)
REM
REM run_web.bat start - startet den Server im Hintergrund
REM run_web.bat stop - beendet den Server (inkl. Reload-Kindprozesse)
REM run_web.bat status - zeigt ob und unter welcher PID er laeuft
REM run_web.bat - startet im Vordergrund (Strg+C zum Beenden)
REM
REM http://localhost:8000 Testoberflaeche
REM http://localhost:8000/docs interaktive API-Doku (Swagger)
REM
REM Die Prozess-/Portlogik liegt in run_web_helper.ps1 (cmd-Escaping
REM von mehrzeiligen PowerShell-Kommandos ist zu fehleranfaellig).
REM ================================================================
call "%~dp0setenv.bat" > nul
set WEB_PORT=8000
set HELFER=powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0run_web_helper.ps1"
if /I "%~1"=="start" goto :start
if /I "%~1"=="stop" goto :stop
if /I "%~1"=="status" goto :status
if "%~1"=="" goto :vordergrund
echo Unbekannter Parameter "%~1" - erlaubt: start ^| stop ^| status
exit /b 1
REM ----------------------------------------------------------------
:vordergrund
call :venv_pruefen || exit /b 1
echo Starte Web-Testinstanz im Vordergrund (Strg+C zum Beenden) ...
python -m uvicorn main:app --reload --app-dir "%PLATZ%\web" --port %WEB_PORT%
exit /b %errorlevel%
REM ----------------------------------------------------------------
:start
call :venv_pruefen || exit /b 1
%HELFER% check %WEB_PORT%
if not errorlevel 1 (
echo Server laeuft bereits auf Port %WEB_PORT% - erst "run_web.bat stop".
exit /b 1
)
if not exist "%PLATZ%\log" mkdir "%PLATZ%\log"
echo Starte Web-Testinstanz im Hintergrund ...
start "platz-web" /MIN cmd /c "call "%~dp0setenv.bat" > nul && call "%PLATZ%\.venv\Scripts\activate.bat" && python -m uvicorn main:app --reload --app-dir "%PLATZ%\web" --port %WEB_PORT% > "%PLATZ%\log\run_web.log" 2>&1"
REM kurz warten und pruefen, ob der Server wirklich hochkommt
REM (ping statt timeout: funktioniert auch ohne interaktive Konsole)
ping -n 4 127.0.0.1 > nul
%HELFER% check %WEB_PORT%
if errorlevel 1 (
echo FEHLER: Server ist nicht gestartet - siehe %PLATZ%\log\run_web.log
exit /b 1
)
echo Server laeuft: http://localhost:%WEB_PORT% ^(Logdatei: log\run_web.log^)
exit /b 0
REM ----------------------------------------------------------------
:stop
echo Beende alle uvicorn-Prozesse dieses Projekts auf Port %WEB_PORT% ...
%HELFER% stop %WEB_PORT%
exit /b 0
REM ----------------------------------------------------------------
:status
%HELFER% status %WEB_PORT%
exit /b %errorlevel%
REM ----------------------------------------------------------------
:venv_pruefen
if exist "%PLATZ%\.venv\Scripts\activate.bat" (
call "%PLATZ%\.venv\Scripts\activate.bat"
exit /b 0
)
echo FEHLER: kein .venv gefunden - bitte zuerst bin\install_py.bat ausfuehren
exit /b 1
+95
View File
@@ -0,0 +1,95 @@
#!/bin/bash
# ================================================================
# Verwaltet die lokale Web-Testinstanz (FastAPI/uvicorn, M1)
#
# run_web.sh start - startet den Server im Hintergrund
# run_web.sh stop - beendet den Server (inkl. Reload-Kindprozesse)
# run_web.sh status - zeigt ob und unter welcher PID er laeuft
# run_web.sh - startet im Vordergrund (Strg+C zum Beenden)
#
# http://localhost:8000 Testoberflaeche
# http://localhost:8000/docs interaktive API-Doku (Swagger)
# ================================================================
source "$(dirname "${BASH_SOURCE[0]}")/setenv.sh" > /dev/null
WEB_PORT=8000
PIDDATEI="$PLATZ/log/run_web.pid"
LOGDATEI="$PLATZ/log/run_web.log"
venv_pruefen() {
if [ -f "$PLATZ/.venv/bin/activate" ]; then
source "$PLATZ/.venv/bin/activate"
else
echo "FEHLER: kein .venv gefunden - bitte zuerst bin/install_py.sh ausfuehren"
return 1
fi
}
lauft_pid() {
# gibt die PID des Servers aus, wenn er laeuft (Rueckgabe 0), sonst 1
if [ -f "$PIDDATEI" ]; then
local pid
pid=$(cat "$PIDDATEI")
if kill -0 "$pid" 2> /dev/null; then
echo "$pid"
return 0
fi
rm -f "$PIDDATEI"
fi
# Fallback: nach dem Prozess suchen (z.B. PID-Datei verloren)
pgrep -f "uvicorn main:app.*--port $WEB_PORT" | head -1 && return 0
return 1
}
case "${1:-}" in
start)
venv_pruefen || exit 1
if pid=$(lauft_pid); then
echo "Server laeuft bereits (PID $pid) - erst 'run_web.sh stop'."
exit 1
fi
mkdir -p "$PLATZ/log"
echo "Starte Web-Testinstanz im Hintergrund ..."
nohup python -m uvicorn main:app --reload \
--app-dir "$PLATZ/web" --port "$WEB_PORT" \
> "$LOGDATEI" 2>&1 &
echo $! > "$PIDDATEI"
sleep 3
if pid=$(lauft_pid); then
echo "Server laeuft: http://localhost:$WEB_PORT (PID $pid, Log: log/run_web.log)"
else
echo "FEHLER: Server ist nicht gestartet - siehe $LOGDATEI"
exit 1
fi
;;
stop)
gestoppt=0
if pid=$(lauft_pid); then
# ganze Prozessgruppe beenden (uvicorn-Reloader + Kindprozesse)
pkill -TERM -P "$pid" 2> /dev/null && gestoppt=1
kill "$pid" 2> /dev/null && gestoppt=1
fi
# Nachzuegler, deren Elternprozess schon weg ist
pkill -f "uvicorn main:app.*--port $WEB_PORT" 2> /dev/null && gestoppt=1
rm -f "$PIDDATEI"
if [ "$gestoppt" = "1" ]; then echo "Beendet."; else echo "Es lief nichts."; fi
;;
status)
if pid=$(lauft_pid); then
echo "LAEUFT: http://localhost:$WEB_PORT (PID $pid)"
else
echo "GESTOPPT: kein Server auf Port $WEB_PORT"
fi
;;
"")
venv_pruefen || exit 1
echo "Starte Web-Testinstanz im Vordergrund (Strg+C zum Beenden) ..."
exec python -m uvicorn main:app --reload \
--app-dir "$PLATZ/web" --port "$WEB_PORT"
;;
*)
echo "Unbekannter Parameter '$1' - erlaubt: start | stop | status"
exit 1
;;
esac
+86
View File
@@ -0,0 +1,86 @@
# ================================================================
# PowerShell-Helfer fuer run_web.bat (start/stop/status)
# Aufruf: powershell -NoProfile -ExecutionPolicy Bypass
# -File run_web_helper.ps1 <status|stop|check> <port>
#
# "check" liefert nur den Exitcode (0 = Server lauscht, 1 = nicht)
# und keine Ausgabe - fuer die Pruefung nach dem Start.
#
# Verwaiste Socket-Eintraege (Listener, deren Prozess nicht mehr
# existiert - passiert nach abgestuerzten Reload-Kindprozessen)
# werden ueberall ignoriert.
# ================================================================
param(
[Parameter(Mandatory = $true)][ValidateSet('status', 'stop', 'check')]
[string]$Aktion,
[int]$Port = 8000
)
function Lebende-Listener([int]$p) {
try {
Get-NetTCPConnection -LocalPort $p -State Listen -ErrorAction Stop |
Where-Object { Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue }
} catch { @() }
}
function Uvicorn-Prozesse {
Get-CimInstance Win32_Process -Filter "Name like 'python%'" |
Where-Object { $_.CommandLine -match 'uvicorn main:app' }
}
switch ($Aktion) {
'check' {
if (Lebende-Listener $Port) { exit 0 } else { exit 1 }
}
'status' {
$l = Lebende-Listener $Port | Select-Object -First 1
if ($l) {
"LAEUFT: http://localhost:$Port (Listener-PID $($l.OwningProcess))"
foreach ($e in Uvicorn-Prozesse) { " uvicorn-Prozess: PID $($e.ProcessId)" }
exit 0
} else {
"GESTOPPT: kein Server auf Port $Port"
exit 1
}
}
'stop' {
$gefunden = $false
$alle = Get-CimInstance Win32_Process -Filter "Name like 'python%'"
$reloaderPids = @()
foreach ($e in ($alle | Where-Object { $_.CommandLine -match 'uvicorn main:app' })) {
$gefunden = $true
$reloaderPids += $e.ProcessId
# erst die Kindprozesse (Reload-Worker), dann den Reloader selbst
$alle | Where-Object { $_.ParentProcessId -eq $e.ProcessId } | ForEach-Object {
Stop-Process -Id $_.ProcessId -Force -Confirm:$false -ErrorAction SilentlyContinue
}
Stop-Process -Id $e.ProcessId -Force -Confirm:$false -ErrorAction SilentlyContinue
}
# Zombie-Jagd: uvicorn-Reload-Worker sind multiprocessing-Spawn-Kinder
# ("spawn_main(parent_pid=N, ...)"). Stirbt ihr Reloader unsanft,
# ueberleben sie MIT geerbtem Server-Socket und bedienen den Port
# unsichtbar weiter (weder "uvicorn" in der Kommandozeile noch
# Eintrag als Socket-Besitzer!). Erkennung: spawn_main-Prozess,
# dessen parent_pid tot oder ein eben beendeter Reloader ist.
foreach ($k in ($alle | Where-Object { $_.CommandLine -match 'multiprocessing.spawn.*spawn_main' })) {
if ($k.CommandLine -match 'parent_pid=(\d+)') {
$eltern = [int]$Matches[1]
$elternTot = -not (Get-Process -Id $eltern -ErrorAction SilentlyContinue)
if ($elternTot -or ($reloaderPids -contains $eltern)) {
$gefunden = $true
Stop-Process -Id $k.ProcessId -Force -Confirm:$false -ErrorAction SilentlyContinue
}
}
}
# Nachzuegler: alles Lebende, das den Port noch haelt
Lebende-Listener $Port | ForEach-Object {
$gefunden = $true
Stop-Process -Id $_.OwningProcess -Force -Confirm:$false -ErrorAction SilentlyContinue
}
if ($gefunden) { 'Beendet.' } else { 'Es lief nichts.' }
exit 0
}
}
@@ -15,8 +15,8 @@
<circle cx="206" cy="138.8" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="125.6" cy="45.2" r="35.2" fill="white" stroke="black" stroke-width="1.5"/>
<text x="125.6" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 4</text>
<circle cx="125.6" cy="32" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="125.6" cy="58.4" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="125.6" cy="32" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="125.6" cy="58.4" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="45.2" cy="125.6" r="35.2" fill="white" stroke="black" stroke-width="1.5"/>
<text x="45.2" y="88.4" text-anchor="middle" font-size="10" fill="black">Tisch 5</text>
<circle cx="45.2" cy="112.4" r="12" fill="#f58231" stroke="black" stroke-width="1"/>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

+20 -12
View File
@@ -186,17 +186,21 @@ Die folgenden Grundsatzfragen sind entschieden und gelten für alle Meilensteine
**Ziel:** Eine Person kann übers Web eine Hochzeit planen, ohne Login. Ergebnis: PDF/SVG-Export.
Session-basiert, nichts wird dauerhaft gespeichert (schont Datenschutz-Aufwand in dieser Phase).
- [ ] REST-API um den bestehenden Kern (FastAPI empfohlen: async, OpenAPI-Doku gratis,
gut für Traffic-Spitzen an Wochenenden)
- `POST /sitzung` — legt eine Arbeits-Session an (Tische + Personen)
- `POST /sitzung/{id}/tische` — Tisch-Layout (Ersatz für `tische.ini`)
- [x] REST-API um den bestehenden Kern (FastAPI) — umgesetzt in `web/main.py`,
Start per `bin/run_web.bat`/`.sh` (uvicorn --reload, Port 8000), Swagger unter `/docs`
- `POST /sitzung` — legt eine Arbeits-Session an (in-memory, TTL 24h)
- `POST /sitzung/{id}/tische` — Tisch-Layout als JSON (Ersatz für `tische.ini`);
Nachbarliste wird aus räumlicher Nähe der Koordinaten abgeleitet
- `POST /sitzung/{id}/personen` — CSV-Upload (Ersatz für `bestellung.xml`)
- `POST /sitzung/{id}/berechnen` — startet die GA-Optimierung
- `GET /sitzung/{id}/ergebnis.svg` — liefert `alsSVG()`-Resultat
- [ ] **CSV-Format definieren und Parser bauen** (Analogon zu `XMLConfig`):
Spalten z.B. `Vorname;Nachname;Titel;Gruppe;Tisch(optional=VIP)`
→ wird zu `Personen`/`Gruppen`/VIP-Map, exakt wie `XMLConfig.HandleBestellung()`
heute — reiner Adapter, kein Kernumbau.
- `POST /sitzung/{id}/berechnen` — startet die GA-Optimierung (jeder Aufruf = neue Variante)
- `GET /sitzung/{id}/ergebnis` + `GET /sitzung/{id}/ergebnis.svg` — Ergebnis als JSON/SVG
- [x] **CSV-Format definiert und Parser gebaut** `libs/CSVConfig.py` (Adapter analog
`XMLConfig`): Spalten `Vorname;Nachname;Titel;Gruppe;Tisch;Anzahl`; `Tisch` = VIP-
Fixplatz, `Anzahl` = Sammelbuchungs-Expansion, leere `Gruppe` = Einzelgast;
`MagNicht`/`MagGern` werden akzeptiert aber noch ignoriert (Konzeptentscheidung Nr. 10)
- [x] Einfache Browser-Testoberfläche (`web/static/index.html`): Tisch-Tabelle mit
Presets, CSV-Textfeld/-Upload, Berechnen-Button, Kennzahlen + SVG-Anzeige —
Zwischenschritt, wird durch den Konva-Tisch-Editor (unten) abgelöst
- [ ] **Interaktiver Tisch-Editor** (Frontend, React/Vue + SVG):
Kreise per Drag & Drop platzieren, Kapazität einstellen, Nachbarschaft automatisch
aus räumlicher Nähe ableiten (statt manueller `Nachbarliste`-Pflege in `tische.ini`)
@@ -314,8 +318,12 @@ parallel anlaufen — eher ~44,5 Monate bis M4-Abschluss.
1. **Datenschutz wird unterschätzt** — sobald echte Gästelisten dauerhaft gespeichert
werden (ab M3), ist das kein Nebenthema mehr. Frühzeitig Rechtsberatung einholen,
nicht erst kurz vor Launch.
2. **GA-Performance bei großen Sälen**noch nicht lastgetestet mit z.B. 300+ Personen
und vielen Tischen; ggf. Optimierungsbedarf vor M2.
2. **GA-Performance bei großen Sälen**erster Datenpunkt (2026-07-11): das Beispiel
`work/innenhoefe` mit 300 Gästen an 88 Tischen rechnet mit dem Easy-Zyklus in ~0,4 s
durch — weit unter der 5-s-Schwelle, ab der M2 eine Job-Queue vorsieht. Offen bleibt
der Test mit größeren Zyklen (mehr Generationen für bessere Lösungsqualität bei
vielen Trennungen) — die Lösungsgüte bei 4er-Tischen mit großen Gruppen (Wertigkeit
384) legt nahe, dass hier eher mehr GA-Iterationen nötig sind als bisher.
3. **Wettbewerb ist real und etabliert** — siehe Abschnitt "Marktübersicht" oben.
PerfectTablePlan verfolgt seit Jahren denselben GA-Ansatz, allerdings als Desktop-Tool.
Differenzierung muss über Web-nativ + DSGVO-Hosting + detailliertere Regeln
+5 -6
View File
@@ -1,8 +1,7 @@
# Python-Abhaengigkeiten fuer platz
#
# Aktuell werden nur Module aus der Standardbibliothek verwendet
# (configparser, xml.dom.minidom, random, ...).
# Keine externen Pakete erforderlich.
#
# Beispiel:
# requests==2.31.0
# Der Kern (libs/) verwendet nur die Standardbibliothek.
# Die folgenden Pakete braucht nur die Web-API (web/main.py, Roadmap M1):
fastapi>=0.110
uvicorn[standard]>=0.29
python-multipart>=0.0.9
+470
View File
@@ -0,0 +1,470 @@
"""
REST-API um den bestehenden Sitzplatz-Kern (Meilenstein 1 der Roadmap).
Session-basiert, nichts wird dauerhaft gespeichert: jede Sitzung lebt
im Speicher des Servers und verfaellt nach 24 Stunden (TTL) — bewusst
ohne Accounts/DB, siehe Roadmap M1 ("schont Datenschutz-Aufwand").
Endpunkte (siehe auch /docs — interaktive Swagger-UI von FastAPI):
POST /sitzung — legt eine Arbeits-Session an
GET /sitzung/{id} — Status der Session
POST /sitzung/{id}/tische — Tisch-Layout als JSON (Ersatz tische.ini)
POST /sitzung/{id}/personen — Gaesteliste als CSV-Upload (Ersatz bestellung.xml)
POST /sitzung/{id}/berechnen — startet die GA-Optimierung
GET /sitzung/{id}/ergebnis — Ergebnis als JSON (Tische -> Personen)
GET /sitzung/{id}/ergebnis.svg — Ergebnis als SVG (alsSVG aus dem Kern)
Start (lokale Testinstanz, siehe bin/run_web.bat / bin/run_web.sh):
python -m uvicorn main:app --reload --app-dir web
"""
import ast
import math
import os
import sys
import tempfile
import threading
import time
import uuid
# Projektwurzel und Pfade robust aus der eigenen Lage ableiten, damit der
# Server auch ohne vorheriges setenv laeuft (PLATZ_* hat Vorrang, falls gesetzt)
BASISDIR = os.path.dirname( os.path.dirname( os.path.abspath( __file__ ) ) )
LIBSDIR = os.environ.get( 'PLATZ_LIBS', os.path.join( BASISDIR, 'libs' ) )
CFGDIR = os.environ.get( 'PLATZ_CFG', os.path.join( BASISDIR, 'cfg' ) )
if LIBSDIR not in sys.path:
sys.path.insert( 0, LIBSDIR )
from fastapi import FastAPI, File, HTTPException, UploadFile
from fastapi.responses import Response
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel, Field
from ga import Farm, Zyklus
from CSVConfig import CSVConfig
from Strukturdaten import Sitzplatzverteilung, Strafliste, Tisch, Tische
app = FastAPI(
title='Sitz & Platz — API',
description='Sitzplatz-Optimierung per genetischem Algorithmus '
'(Meilenstein 1: Session-basiert, ohne Accounts)',
version='0.1.0' )
# ---------------------------------------------------------------- GA-Konfig
# Zyklus und Strafliste einmal beim Start laden (wie in libs/platz.py)
import configparser
_PlatzCfg = configparser.ConfigParser()
_PlatzCfg.read( os.path.join( CFGDIR, 'platz.cfg' ) )
ZYKLUSDATEI = os.path.expandvars( os.path.normpath(
_PlatzCfg.get( 'Config', 'Zyklusdatei',
fallback=os.path.join( CFGDIR, 'zyklus.cfg' ) ) ) )
ZYKLUSART = _PlatzCfg.get( 'Config', 'Zyklusart', fallback='Easy' )
STRAFENDATEI = os.path.expandvars( os.path.normpath(
_PlatzCfg.get( 'Config', 'Strafendatei',
fallback=os.path.join( CFGDIR, 'strafen.cfg' ) ) ) )
if not os.path.isfile( ZYKLUSDATEI ):
ZYKLUSDATEI = os.path.join( CFGDIR, 'zyklus.cfg' )
if not os.path.isfile( STRAFENDATEI ):
STRAFENDATEI = os.path.join( CFGDIR, 'strafen.cfg' )
GAZyklus = Zyklus()
GAZyklus.laden( ZYKLUSDATEI, ZYKLUSART )
Strafen = Strafliste()
Strafen.laden( STRAFENDATEI )
# ---------------------------------------------------------------- Sessions
SESSION_TTL_SEKUNDEN = 24 * 3600
Sessions = {}
SessionsLock = threading.Lock()
def _SessionsAufraeumen():
"""Sessions loeschen, deren TTL abgelaufen ist (Datenschutz per Design)"""
Jetzt = time.time()
with SessionsLock:
Abgelaufen = [ Sid for Sid, S in Sessions.items()
if Jetzt - S['erzeugt'] > SESSION_TTL_SEKUNDEN ]
for Sid in Abgelaufen:
del Sessions[Sid]
def _GibSession(SitzungsId):
_SessionsAufraeumen()
with SessionsLock:
S = Sessions.get( SitzungsId )
if S is None:
raise HTTPException( status_code=404,
detail='Sitzung nicht gefunden oder abgelaufen (TTL 24h)' )
return S
# ------------------------------------------------------------ API-Modelle
class TischEingabe(BaseModel):
"""ein Tisch aus dem Frontend (Ersatz fuer eine tische.ini-Section)"""
id: int | None = Field( default=None, description='Tisch-Id; leer = fortlaufend' )
nummer: int | None = Field( default=None, description='Anzeigenummer; leer = wie Id' )
hof: int = Field( default=1, description='Hof/Raum-Nummer' )
plaetze: int = Field( gt=0, le=100, description='Anzahl Sitzplaetze' )
x: float = Field( description='X-Koordinate im Raster' )
y: float = Field( description='Y-Koordinate im Raster' )
nachbarn: list[int] | None = Field( default=None,
description='explizite Nachbar-Tisch-Ids; leer = aus Naehe ableiten' )
class TischLayout(BaseModel):
tische: list[TischEingabe] = Field( min_length=1 )
nachbarRadius: float = Field( default=1.5, gt=0,
description='max. Rasterabstand, bis zu dem zwei Tische als '
'Nachbarn gelten (nur fuer Tische ohne explizite Liste)' )
# --------------------------------------------------------------- Hilfen
def _NachbarnAbleiten(TischListe, Radius):
"""Nachbarliste aus raeumlicher Naehe der Koordinaten ableiten
(Roadmap M1: Ersatz fuer manuelle Nachbarliste-Pflege).
Explizit angegebene Nachbarn bleiben erhalten und werden
beidseitig ergaenzt."""
Nachbarn = { T.id: set( T.nachbarn or [] ) for T in TischListe }
for T1 in TischListe:
for T2 in TischListe:
if T1.id == T2.id:
continue
if T1.nachbarn is None or T2.nachbarn is None:
Abstand = math.dist( (T1.x, T1.y), (T2.x, T2.y) )
if Abstand <= Radius:
Nachbarn[T1.id].add( T2.id )
Nachbarn[T2.id].add( T1.id )
# expliziten Angaben beidseitig machen
for Tid, Menge in Nachbarn.items():
for NachbarId in Menge:
if NachbarId in Nachbarn:
Nachbarn[NachbarId].add( Tid )
return { Tid: sorted(Menge) for Tid, Menge in Nachbarn.items() }
def _TischeBauen(S):
"""baut aus dem gespeicherten Layout frische Tisch-Objekte
(pro Berechnung neu, damit keine Reste vorheriger Laeufe kleben)"""
TE = Tische( [] )
for T in S['tische']:
TE.Tisch_dazu( Tisch(
T['id'],
Plaetze=T['plaetze'],
Koordinaten=( T['x'], T['y'] ),
Nachbarliste=T['nachbarn'],
Hof=T['hof'],
Nummer=T['nummer'] ) )
return TE
def _ErgebnisJSON(S):
"""baut die JSON-Darstellung des besten Ergebnisses einer Session"""
SV = S['ergebnis']
GruppenNamen = S.get( 'gruppenNamen', {} )
def GruppeVonPerson(P):
try:
G = SV.Gruppen.GruppeVonPid( P.Id )
return GruppenNamen.get( G.Id, 'Gruppe %s' % G.Id )
except KeyError:
return 'VIP'
TischListe = []
for T in SV.Tische:
Personen = [ {
'titel': P._Titel,
'vorname': P._Vorname,
'nachname': P._Name,
'gruppe': GruppeVonPerson( P ),
} for P in T ]
Personen.sort( key=lambda p: (p['gruppe'], p['nachname'], p['vorname']) )
TischListe.append( {
'id': T.Id,
'nummer': T.Nummer,
'hof': T.Hof,
'plaetze': T.Plaetze,
'besetzt': T.besetztePlaetze(),
'frei': T.freiePlaetze(),
'wert': SV.TischWertGet( T ),
'personen': Personen,
} )
TischListe.sort( key=lambda t: t['id'] )
GruppenListe = []
for G in SV.Gruppen:
GruppenListe.append( {
'id': G.Id,
'name': GruppenNamen.get( G.Id, 'Gruppe %s' % G.Id ),
'anzahl': G.Anzahl(),
'teilungen': SV.GruppenTeilungGet( G ),
'wert': SV.GruppenWertGet( G ),
} )
GruppenListe.sort( key=lambda g: g['id'] )
return {
'wertigkeit': SV.value,
'variante': S['varianten'],
'tische': TischListe,
'gruppen': GruppenListe,
}
# --------------------------------------------------------------- Endpunkte
@app.post( '/sitzung', status_code=201 )
def SitzungAnlegen():
"""legt eine neue Arbeits-Session an (TTL 24h, nur im Speicher)"""
_SessionsAufraeumen()
SitzungsId = uuid.uuid4().hex
with SessionsLock:
Sessions[SitzungsId] = {
'erzeugt': time.time(),
'tische': None,
'personen': None,
'ergebnis': None,
'varianten': 0,
}
return { 'id': SitzungsId, 'ttlStunden': SESSION_TTL_SEKUNDEN // 3600 }
@app.get( '/sitzung/{SitzungsId}' )
def SitzungStatus(SitzungsId: str):
"""Status: was ist schon da, was fehlt noch"""
S = _GibSession( SitzungsId )
return {
'id': SitzungsId,
'tische': len( S['tische'] ) if S['tische'] else 0,
'personen': S['personen']['nLeute'] if S['personen'] else 0,
'vips': S['personen']['nVips'] if S['personen'] else 0,
'berechnet': S['ergebnis'] is not None,
'varianten': S['varianten'],
}
@app.post( '/sitzung/{SitzungsId}/tische' )
def TischeSetzen(SitzungsId: str, Layout: TischLayout):
"""Tisch-Layout uebernehmen (JSON-Ersatz fuer tische.ini);
Nachbarschaft wird aus raeumlicher Naehe abgeleitet"""
S = _GibSession( SitzungsId )
# Ids vergeben/pruefen
NaechsteId = 1
Vergeben = set()
for T in Layout.tische:
if T.id is None:
while NaechsteId in Vergeben:
NaechsteId = NaechsteId + 1
T.id = NaechsteId
if T.id in Vergeben:
raise HTTPException( status_code=400,
detail='Tisch-Id %d ist doppelt' % T.id )
Vergeben.add( T.id )
Nachbarn = _NachbarnAbleiten( Layout.tische, Layout.nachbarRadius )
S['tische'] = [ {
'id': T.id,
'nummer': T.nummer if T.nummer is not None else T.id,
'hof': T.hof,
'plaetze': T.plaetze,
'x': T.x,
'y': T.y,
'nachbarn': Nachbarn[T.id],
} for T in Layout.tische ]
S['ergebnis'] = None
S['varianten'] = 0
return {
'tische': S['tische'],
'plaetzeGesamt': sum( T['plaetze'] for T in S['tische'] ),
}
@app.post( '/sitzung/{SitzungsId}/tische-datei' )
def TischDateiHochladen(SitzungsId: str, datei: UploadFile = File(...)):
"""bestehende tische.ini hochladen (gleiches Format wie fuer die CLI,
z.B. work/hochzeit/tische.ini); die Nachbarliste aus der Datei
wird unveraendert uebernommen, nichts wird neu abgeleitet"""
S = _GibSession( SitzungsId )
Rohdaten = datei.file.read()
try:
Text = Rohdaten.decode( 'utf-8-sig' )
except UnicodeDecodeError:
Text = Rohdaten.decode( 'cp1252' )
config = configparser.ConfigParser()
try:
config.read_string( Text )
except configparser.Error as Fehler:
raise HTTPException( status_code=400,
detail='tische.ini nicht lesbar: %s' % Fehler )
if not config.sections():
raise HTTPException( status_code=400,
detail='tische.ini enthaelt keine Tisch-Sektionen ([1], [2], ...)' )
# gleiche Feldsemantik wie Tische.laden() in Strukturdaten.py,
# aber mit ast.literal_eval statt eval (Upload = fremde Eingabe)
TischListe = []
for Sektion in config.sections():
try:
Tid = int( Sektion )
Plaetze = int( ast.literal_eval( config.get( Sektion, 'Plaetze' ) ) )
Koords = ast.literal_eval( config.get( Sektion, 'Koordinaten' ) )
Nachbarn = list( ast.literal_eval(
config.get( Sektion, 'Nachbarliste' ) ) )
Nummer = int( ast.literal_eval(
config.get( Sektion, 'Nummer', fallback=Sektion ) ) )
Hof = int( ast.literal_eval(
config.get( Sektion, 'Hof', fallback='1' ) ) )
except (ValueError, SyntaxError, configparser.Error) as Fehler:
raise HTTPException( status_code=400,
detail='tische.ini, Sektion [%s]: %s' % (Sektion, Fehler) )
if Plaetze < 1:
raise HTTPException( status_code=400,
detail='tische.ini, Sektion [%s]: Plaetze muss >= 1 sein'
% Sektion )
TischListe.append( {
'id': Tid,
'nummer': Nummer,
'hof': Hof,
'plaetze': Plaetze,
'x': float( Koords[0] ),
'y': float( Koords[1] ),
'nachbarn': sorted( int(N) for N in Nachbarn ),
} )
Ids = [ T['id'] for T in TischListe ]
if len( Ids ) != len( set( Ids ) ):
raise HTTPException( status_code=400,
detail='tische.ini enthaelt doppelte Tisch-Ids' )
S['tische'] = TischListe
S['ergebnis'] = None
S['varianten'] = 0
return {
'tische': S['tische'],
'plaetzeGesamt': sum( T['plaetze'] for T in S['tische'] ),
}
@app.post( '/sitzung/{SitzungsId}/personen' )
def PersonenHochladen(SitzungsId: str, datei: UploadFile = File(...)):
"""Gaesteliste als CSV hochladen (Ersatz fuer bestellung.xml);
Format siehe libs/CSVConfig.py"""
S = _GibSession( SitzungsId )
Rohdaten = datei.file.read()
try:
Text = Rohdaten.decode( 'utf-8-sig' )
except UnicodeDecodeError:
Text = Rohdaten.decode( 'cp1252' ) # Excel/Windows-Fallback
try:
[ PN, GN, VIPGruppe, VipHash, GruppenNamen ] = \
CSVConfig().HandleGaesteliste( Text )
except ValueError as Fehler:
raise HTTPException( status_code=400, detail=str(Fehler) )
S['personen'] = {
'PN': PN,
'GN': GN,
'VIPGruppe': VIPGruppe,
'VipHash': VipHash,
'nLeute': GN.NLeute,
'nVips': VIPGruppe.Anzahl(),
}
S['gruppenNamen'] = GruppenNamen
S['ergebnis'] = None
S['varianten'] = 0
return {
'personen': GN.NLeute,
'vips': VIPGruppe.Anzahl(),
'gruppen': [ {
'id': G.Id,
'name': GruppenNamen.get( G.Id, 'Gruppe %s' % G.Id ),
'anzahl': G.Anzahl(),
} for G in GN ],
}
@app.post( '/sitzung/{SitzungsId}/berechnen' )
def Berechnen(SitzungsId: str):
"""startet die GA-Optimierung; jeder Aufruf erzeugt eine neue Variante"""
S = _GibSession( SitzungsId )
if S['tische'] is None:
raise HTTPException( status_code=400,
detail='Erst das Tisch-Layout setzen (POST .../tische)' )
if S['personen'] is None:
raise HTTPException( status_code=400,
detail='Erst die Gaesteliste hochladen (POST .../personen)' )
TE = _TischeBauen( S )
P = S['personen']
# Vorab-Pruefungen mit klaren Fehlermeldungen (der Kern wirft sonst
# nur IndexError/AttributeError tief aus der Platzierung heraus)
GesamtLeute = P['nLeute'] + P['nVips']
if GesamtLeute > TE.NStuehle:
raise HTTPException( status_code=400,
detail='Zu wenig Stuehle: %d Personen, aber nur %d Plaetze'
% (GesamtLeute, TE.NStuehle) )
VIPsProTisch = {}
for Pid, Tid in P['VipHash'].items():
VIPsProTisch[Tid] = VIPsProTisch.get( Tid, 0 ) + 1
for Tid, AnzahlVIPs in VIPsProTisch.items():
T = TE.vonId( Tid )
if T is None:
raise HTTPException( status_code=400,
detail='VIP-Tisch %d existiert nicht im Layout' % Tid )
if AnzahlVIPs > T.Plaetze:
raise HTTPException( status_code=400,
detail='Tisch %d hat %d Plaetze, aber %d VIPs sind '
'dort fest gesetzt' % (Tid, T.Plaetze, AnzahlVIPs) )
try:
GAFarm = Farm( GAZyklus, Sitzplatzverteilung,
Tische=TE, Gruppen=P['GN'], Strafen=Strafen,
VIPListe=P['VipHash'], VIPs=P['VIPGruppe'] )
except IndexError as Fehler:
raise HTTPException( status_code=400, detail=str(Fehler) )
S['ergebnis'] = GAFarm.Bester()
S['varianten'] = S['varianten'] + 1
return _ErgebnisJSON( S )
@app.get( '/sitzung/{SitzungsId}/ergebnis' )
def Ergebnis(SitzungsId: str):
"""das beste bisher berechnete Ergebnis als JSON"""
S = _GibSession( SitzungsId )
if S['ergebnis'] is None:
raise HTTPException( status_code=404,
detail='Noch nichts berechnet (POST .../berechnen)' )
return _ErgebnisJSON( S )
@app.get( '/sitzung/{SitzungsId}/ergebnis.svg' )
def ErgebnisSVG(SitzungsId: str):
"""das beste bisher berechnete Ergebnis als SVG (alsSVG aus dem Kern)"""
S = _GibSession( SitzungsId )
if S['ergebnis'] is None:
raise HTTPException( status_code=404,
detail='Noch nichts berechnet (POST .../berechnen)' )
# alsSVG schreibt in eine Datei -> Tempdatei schreiben, lesen, loeschen
Handle, TempPfad = tempfile.mkstemp( suffix='.svg' )
os.close( Handle )
try:
S['ergebnis'].alsSVG( TempPfad )
fsock = open( TempPfad, 'r' )
SVG = fsock.read()
fsock.close()
finally:
os.remove( TempPfad )
return Response( content=SVG, media_type='image/svg+xml' )
# statisches Test-Frontend unter / (muss nach den API-Routen gemountet sein)
app.mount( '/', StaticFiles(
directory=os.path.join( os.path.dirname( os.path.abspath( __file__ ) ),
'static' ),
html=True ), name='static' )
+329
View File
@@ -0,0 +1,329 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sitz &amp; Platz — Testoberfläche (M1)</title>
<style>
:root {
--akzent: #2f6f4f;
--rand: #d9d4c8;
--hintergrund: #faf8f3;
}
* { box-sizing: border-box; }
body {
font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
margin: 0; background: var(--hintergrund); color: #2a2a24;
line-height: 1.5;
}
header {
background: var(--akzent); color: white;
padding: 1rem 1.5rem;
}
header h1 { margin: 0; font-size: 1.3rem; }
header p { margin: .2rem 0 0; opacity: .85; font-size: .85rem; }
main { max-width: 60rem; margin: 0 auto; padding: 1rem 1.5rem 4rem; }
section {
background: white; border: 1px solid var(--rand);
border-radius: 8px; padding: 1rem 1.25rem; margin-top: 1.25rem;
}
h2 { font-size: 1.05rem; margin: 0 0 .75rem; color: var(--akzent); }
table { border-collapse: collapse; width: 100%; font-size: .9rem; }
th, td { border: 1px solid var(--rand); padding: .3rem .5rem; text-align: left; }
th { background: #f1eee6; }
input[type=number] { width: 4.5rem; }
textarea {
width: 100%; min-height: 11rem; font-family: ui-monospace, monospace;
font-size: .85rem; border: 1px solid var(--rand); border-radius: 4px;
padding: .5rem;
}
button {
background: var(--akzent); color: white; border: 0;
border-radius: 4px; padding: .45rem .9rem; font-size: .9rem;
cursor: pointer; margin: .25rem .35rem .25rem 0;
}
button.sekundaer { background: #8b8577; }
button:disabled { background: #b9b4a6; cursor: not-allowed; }
.status { font-size: .85rem; margin-top: .5rem; min-height: 1.2rem; }
.status.ok { color: var(--akzent); }
.status.fehler { color: #a03030; white-space: pre-wrap; }
#svgBild { max-width: 100%; border: 1px solid var(--rand); border-radius: 4px;
margin-top: .75rem; background: white; }
.kennzahl { display: inline-block; background: #f1eee6; border-radius: 4px;
padding: .3rem .7rem; margin: .15rem .3rem .15rem 0; font-size: .9rem; }
.kennzahl b { color: var(--akzent); }
.hinweis { font-size: .8rem; color: #6b6557; }
</style>
</head>
<body>
<header>
<h1>Sitz &amp; Platz <small style="font-weight:normal">— Testoberfläche (Meilenstein 1)</small></h1>
<p>Session-basiert, nichts wird dauerhaft gespeichert (TTL 24 h). Sitzung: <code id="sitzungsId">wird angelegt…</code></p>
</header>
<main>
<section>
<h2>1. Tische definieren</h2>
<p class="hinweis">Koordinaten sind Rasterpositionen (wie in tische.ini). Tische, die
näher als der Nachbar-Radius (1,5 Rastereinheiten) beieinander liegen, gelten
automatisch als Nachbarn — Gruppen, die geteilt werden müssen, kommen bevorzugt
an Nachbartische.</p>
<table id="tischTabelle">
<thead>
<tr><th>Tisch-Nr.</th><th>Plätze</th><th>X</th><th>Y</th><th></th></tr>
</thead>
<tbody></tbody>
</table>
<button type="button" onclick="tischZeile()">+ Tisch hinzufügen</button>
<button type="button" class="sekundaer" onclick="presetReihe()">Preset: 4er-Reihe</button>
<button type="button" class="sekundaer" onclick="presetRaster()">Preset: 3×3-Raster</button>
<br>
<label class="hinweis">Oder eine bestehende <code>tische.ini</code> laden
(z.&nbsp;B. aus <code>work/hochzeit</code>):</label>
<input type="file" id="tischDatei" accept=".ini,text/plain">
<button type="button" class="sekundaer" onclick="tischDateiLaden()">tische.ini laden</button>
<br>
<button type="button" onclick="tischeSpeichern()">Tische speichern</button>
<div class="status" id="tischStatus"></div>
</section>
<section>
<h2>2. Gästeliste (CSV)</h2>
<p class="hinweis">Spalten: <code>Vorname;Nachname;Titel;Gruppe;Tisch;Anzahl</code>
<code>Gruppe</code> hält Personen zusammen (leer = Einzelgast),
<code>Tisch</code> setzt VIPs fest (z.&nbsp;B. Brautpaar an Tisch 1),
<code>Anzahl</code> expandiert eine Zeile in mehrere Buchungen
(anonyme Sammelbuchung). Datei hochladen <em>oder</em> direkt hier bearbeiten:</p>
<textarea id="csvText"></textarea>
<br>
<input type="file" id="csvDatei" accept=".csv,text/csv">
<br>
<button type="button" onclick="gaesteHochladen()">Gästeliste übernehmen</button>
<div class="status" id="gaesteStatus"></div>
<div id="gruppenUebersicht"></div>
</section>
<section>
<h2>3. Sitzordnung berechnen</h2>
<p class="hinweis">Jeder Klick startet den genetischen Algorithmus neu und liefert
eine neue Variante — die Wertigkeit (0 = perfekt, negativer = schlechter)
macht Varianten vergleichbar.</p>
<button type="button" id="berechnenKnopf" onclick="berechnen()" disabled>Sitzordnung berechnen</button>
<div class="status" id="rechnenStatus"></div>
<div id="kennzahlen"></div>
<div id="ergebnisTabellen"></div>
<img id="svgBild" alt="" style="display:none">
</section>
</main>
<script>
'use strict';
let sitzung = null;
async function api(pfad, optionen) {
const antwort = await fetch(pfad, optionen);
const daten = await antwort.json().catch(() => null);
if (!antwort.ok) {
const detail = daten && daten.detail
? (typeof daten.detail === 'string' ? daten.detail : JSON.stringify(daten.detail, null, 2))
: antwort.statusText;
throw new Error(detail);
}
return daten;
}
function status(id, text, klasse) {
const el = document.getElementById(id);
el.textContent = text;
el.className = 'status ' + (klasse || '');
}
/* ------------------------------------------------ 1. Tische */
function tischZeile(plaetze, x, y, tid) {
const tbody = document.querySelector('#tischTabelle tbody');
const nr = tid ?? tbody.children.length + 1;
const tr = document.createElement('tr');
if (tid !== undefined) tr.dataset.tid = tid; // echte Id aus tische.ini behalten
tr.innerHTML =
'<td class="tischNr">' + nr + '</td>' +
'<td><input type="number" min="1" max="100" value="' + (plaetze ?? 8) + '" class="plaetze"></td>' +
'<td><input type="number" step="1" value="' + (x ?? nr) + '" class="x"></td>' +
'<td><input type="number" step="1" value="' + (y ?? 1) + '" class="y"></td>' +
'<td><button type="button" class="sekundaer" onclick="this.closest(\'tr\').remove(); nummerieren()">✕</button></td>';
tbody.appendChild(tr);
}
function nummerieren() {
document.querySelectorAll('#tischTabelle tbody tr').forEach((tr, i) => {
if (tr.dataset.tid === undefined)
tr.querySelector('.tischNr').textContent = i + 1;
});
}
function tischeLeeren() {
document.querySelector('#tischTabelle tbody').innerHTML = '';
}
function presetReihe() {
tischeLeeren();
for (let i = 1; i <= 4; i++) tischZeile(5, i, 1);
}
function presetRaster() {
tischeLeeren();
for (let y = 1; y <= 3; y++)
for (let x = 1; x <= 3; x++)
tischZeile(8, x, y);
}
async function tischeSpeichern() {
const zeilen = [...document.querySelectorAll('#tischTabelle tbody tr')];
if (zeilen.length === 0) { status('tischStatus', 'Mindestens ein Tisch nötig.', 'fehler'); return; }
// Zeilen aus einer geladenen tische.ini behalten ihre echte Id
// (wichtig fuer VIP-Bindungen wie "Tisch 16"); neue Zeilen bekommen
// die naechste freie Id
const vergeben = new Set(zeilen.map(tr => parseInt(tr.dataset.tid, 10)).filter(n => !isNaN(n)));
let naechste = 1;
const freieId = () => { while (vergeben.has(naechste)) naechste++; vergeben.add(naechste); return naechste; };
const tische = zeilen.map(tr => ({
id: tr.dataset.tid !== undefined ? parseInt(tr.dataset.tid, 10) : freieId(),
plaetze: parseInt(tr.querySelector('.plaetze').value, 10),
x: parseFloat(tr.querySelector('.x').value),
y: parseFloat(tr.querySelector('.y').value),
}));
try {
const r = await api('/sitzung/' + sitzung + '/tische', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ tische }),
});
const nachbarn = r.tische.map(t => 'Tisch ' + t.id + ' ↔ [' + t.nachbarn.join(', ') + ']').join(' ');
status('tischStatus', '✓ ' + r.tische.length + ' Tische, ' + r.plaetzeGesamt +
' Plätze gesamt. Abgeleitete Nachbarn: ' + nachbarn, 'ok');
berechnenFreigeben();
} catch (e) { status('tischStatus', 'Fehler: ' + e.message, 'fehler'); }
}
async function tischDateiLaden() {
const eingabe = document.getElementById('tischDatei');
if (eingabe.files.length === 0) {
status('tischStatus', 'Bitte zuerst eine tische.ini auswählen.', 'fehler');
return;
}
const form = new FormData();
form.append('datei', eingabe.files[0]);
try {
const r = await api('/sitzung/' + sitzung + '/tische-datei', { method: 'POST', body: form });
tischeLeeren();
for (const t of r.tische) tischZeile(t.plaetze, t.x, t.y, t.id);
status('tischStatus', '✓ ' + r.tische.length + ' Tische aus Datei übernommen (' +
r.plaetzeGesamt + ' Plätze) — Layout ist bereits gespeichert, ' +
'„Tische speichern“ ist nur nach Änderungen nötig.', 'ok');
berechnenFreigeben();
} catch (e) { status('tischStatus', 'Fehler: ' + e.message, 'fehler'); }
}
/* ------------------------------------------------ 2. Gäste */
const beispielCSV = `Vorname;Nachname;Titel;Gruppe;Tisch;Anzahl
Britta;Beispiel;;Brautpaar;1;
Bernd;Beispiel;Dr.;Brautpaar;1;
Anna;Huber;;Familie Huber;;
Berta;Huber;;Familie Huber;;
Carl;Huber;;Familie Huber;;
Doris;Huber;;Familie Huber;;
Emil;Meier;;Familie Meier;;
Frieda;Meier;;Familie Meier;;
Gustav;Meier;;Familie Meier;;
Hanna;Schmidt;;Studienfreunde;;
Igor;Petrov;;Studienfreunde;;
Julia;Weber;;Studienfreunde;;
Gast;Kollegium;;Kollegen;;4
Karl;Einzelgast;;;;
`;
async function gaesteHochladen() {
const dateiInput = document.getElementById('csvDatei');
let blob;
if (dateiInput.files.length > 0) {
blob = dateiInput.files[0];
} else {
blob = new Blob([document.getElementById('csvText').value], { type: 'text/csv' });
}
const form = new FormData();
form.append('datei', blob, 'gaeste.csv');
try {
const r = await api('/sitzung/' + sitzung + '/personen', { method: 'POST', body: form });
status('gaesteStatus', '✓ ' + r.personen + ' Personen in ' + r.gruppen.length +
' Gruppen, dazu ' + r.vips + ' VIPs mit festem Tisch.', 'ok');
const html = '<table><thead><tr><th>Gruppe</th><th>Personen</th></tr></thead><tbody>' +
r.gruppen.map(g => '<tr><td>' + g.name + '</td><td>' + g.anzahl + '</td></tr>').join('') +
'</tbody></table>';
document.getElementById('gruppenUebersicht').innerHTML = html;
berechnenFreigeben();
} catch (e) { status('gaesteStatus', 'Fehler: ' + e.message, 'fehler'); }
}
/* ------------------------------------------------ 3. Berechnen */
async function berechnenFreigeben() {
try {
const s = await api('/sitzung/' + sitzung);
document.getElementById('berechnenKnopf').disabled = !(s.tische > 0 && s.personen > 0);
} catch (e) { /* Session ggf. abgelaufen — beim Berechnen gemeldet */ }
}
async function berechnen() {
const knopf = document.getElementById('berechnenKnopf');
knopf.disabled = true;
status('rechnenStatus', 'Der genetische Algorithmus läuft…');
try {
const r = await api('/sitzung/' + sitzung + '/berechnen', { method: 'POST' });
status('rechnenStatus', '✓ Variante ' + r.variante + ' berechnet.', 'ok');
knopf.textContent = 'Neue Variante berechnen';
zeigeErgebnis(r);
const svg = await fetch('/sitzung/' + sitzung + '/ergebnis.svg');
const svgText = await svg.text();
const bild = document.getElementById('svgBild');
bild.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svgText);
bild.style.display = 'block';
} catch (e) {
status('rechnenStatus', 'Fehler: ' + e.message, 'fehler');
} finally {
knopf.disabled = false;
}
}
function zeigeErgebnis(r) {
const getrennte = r.gruppen.filter(g => g.teilungen > 0).length;
document.getElementById('kennzahlen').innerHTML =
'<span class="kennzahl">Wertigkeit: <b>' + r.wertigkeit + '</b></span>' +
'<span class="kennzahl">Variante: <b>' + r.variante + '</b></span>' +
'<span class="kennzahl">getrennte Gruppen: <b>' + getrennte + '</b></span>';
let html = '<table><thead><tr><th>Tisch</th><th>Belegung</th><th>Gäste (Gruppe)</th></tr></thead><tbody>';
for (const t of r.tische) {
const gaeste = t.personen.map(p =>
((p.titel ? p.titel + ' ' : '') + p.vorname + ' ' + p.nachname +
' <span class="hinweis">(' + p.gruppe + ')</span>')).join(', ');
html += '<tr><td>Tisch ' + t.nummer + '</td><td>' + t.besetzt + '/' + t.plaetze +
'</td><td>' + gaeste + '</td></tr>';
}
html += '</tbody></table>';
html += '<h2 style="margin-top:1rem">Gruppen</h2>' +
'<table><thead><tr><th>Gruppe</th><th>Personen</th><th>Teilungen</th><th>Strafpunkte</th></tr></thead><tbody>' +
r.gruppen.map(g => '<tr><td>' + g.name + '</td><td>' + g.anzahl + '</td><td>' +
g.teilungen + '</td><td>' + g.wert + '</td></tr>').join('') +
'</tbody></table>';
document.getElementById('ergebnisTabellen').innerHTML = html;
}
/* ------------------------------------------------ Start */
window.addEventListener('DOMContentLoaded', async () => {
document.getElementById('csvText').value = beispielCSV;
presetReihe();
try {
const r = await api('/sitzung', { method: 'POST' });
sitzung = r.id;
document.getElementById('sitzungsId').textContent = sitzung;
} catch (e) {
document.getElementById('sitzungsId').textContent = 'Fehler: ' + e.message;
}
});
</script>
</body>
</html>
+120
View File
@@ -0,0 +1,120 @@
Aksoy, Rainer, = Hof 1, Tisch 13, Nummer 7
Aksoy, Renate, = Hof 1, Tisch 13, Nummer 2
Aydin, Horst, = Hof 1, Tisch 14, Nummer 6
Aydin, Ursula, = Hof 1, Tisch 14, Nummer 8
Barth, Hannelore, = Hof 1, Tisch 9, Nummer 7
Berger, Sergej, = Hof 1, Tisch 2, Nummer 5
Brandt, Andreas, = Hof 1, Tisch 15, Nummer 2
Brandt, Anja, = Hof 1, Tisch 15, Nummer 3
Brandt, Anton, = Hof 1, Tisch 16, Nummer 14
Brandt, Ben, = Hof 1, Tisch 17, Nummer 5
Brandt, Daniel, = Hof 1, Tisch 11, Nummer 7
Brandt, Felix, = Hof 1, Tisch 16, Nummer 13
Brandt, Frieda, = Hof 1, Tisch 16, Nummer 8
Brandt, Greta, = Hof 1, Tisch 16, Nummer 3
Brandt, Helga, = Hof 1, Tisch 1, Nummer 2
Brandt, Julia, = Hof 1, Tisch 1, Nummer 9
Brandt, Kathrin, = Hof 1, Tisch 11, Nummer 4
Brandt, Lena, = Hof 1, Tisch 15, Nummer 6
Brandt, Milan, = Hof 1, Tisch 15, Nummer 5
Brandt, Paul, = Hof 1, Tisch 17, Nummer 6
Brandt, Sofia, = Hof 1, Tisch 15, Nummer 8
Brandt, Theo, = Hof 1, Tisch 15, Nummer 4
Brandt, Werner, = Hof 1, Tisch 1, Nummer 6
Busch, Stefanie, = Hof 1, Tisch 2, Nummer 3
Demir, Elif, = Hof 1, Tisch 10, Nummer 2
Demir, Hannelore, = Hof 1, Tisch 14, Nummer 5
Demir, Ingrid, = Hof 1, Tisch 14, Nummer 2
Demir, Monika, = Hof 1, Tisch 14, Nummer 3
Dietrich, Jennifer, = Hof 1, Tisch 2, Nummer 6
Dietrich, Nicole, = Hof 1, Tisch 12, Nummer 2
Erdem, Erika, = Hof 1, Tisch 15, Nummer 9
Erdem, Gerhard, = Hof 1, Tisch 9, Nummer 2
Erdem, Rainer, = Hof 1, Tisch 9, Nummer 3
Esposito, Christian, = Hof 1, Tisch 12, Nummer 8
Esposito, Gisela, = Hof 1, Tisch 9, Nummer 6
Esposito, Julia, = Hof 1, Tisch 8, Nummer 4
Fischer, Heinz, = Hof 1, Tisch 14, Nummer 4
Fischer, Helga, = Hof 1, Tisch 14, Nummer 7
Fischer, Nicole, = Hof 1, Tisch 12, Nummer 4
Fischer, Sven, = Hof 1, Tisch 10, Nummer 3
Frank, Erika, = Hof 1, Tisch 9, Nummer 8
Frank, Nadine, = Hof 1, Tisch 11, Nummer 9
Frank, Timo, = Hof 1, Tisch 10, Nummer 4
Frank, Tobias, = Hof 1, Tisch 1, Nummer 11
Franke, Brigitte, = Hof 1, Tisch 9, Nummer 9
Hansen, Olga, = Hof 1, Tisch 11, Nummer 5
Hansen, Wolfgang, = Hof 1, Tisch 9, Nummer 5
Hoffmann, Lena, = Hof 1, Tisch 12, Nummer 7
Horn, Daniel, = Hof 1, Tisch 11, Nummer 3
Horn, Svenja, = Hof 1, Tisch 2, Nummer 2
Klein, Stefan, = Hof 1, Tisch 10, Nummer 5
Koch, Andreas, = Hof 1, Tisch 2, Nummer 7
Koch, Giovanna, = Hof 1, Tisch 8, Nummer 2
Kovac, Giovanna, = Hof 1, Tisch 8, Nummer 8
Kraus, Dennis, = Hof 1, Tisch 4, Nummer 4
Kraus, Matteo, = Hof 1, Tisch 16, Nummer 4
Kraus, Melanie, = Hof 1, Tisch 4, Nummer 2
Kuhn, Leni, = Hof 1, Tisch 16, Nummer 11
Kuhn, Sarah, = Hof 1, Tisch 1, Nummer 10
Kuhn, Stefan, = Hof 1, Tisch 2, Nummer 9
Kuhn, Timo, = Hof 1, Tisch 1, Nummer 7
Lange, Milan, = Hof 1, Tisch 11, Nummer 8
Meyer, Anton, = Hof 1, Tisch 17, Nummer 7
Meyer, Christian, = Hof 1, Tisch 2, Nummer 4
Meyer, Ida, = Hof 1, Tisch 17, Nummer 4
Meyer, Marco, = Hof 1, Tisch 12, Nummer 9
Meyer, Mila, = Hof 1, Tisch 16, Nummer 10
Meyer, Sandra, = Hof 1, Tisch 12, Nummer 6
Meyer, Wolfgang, = Hof 1, Tisch 9, Nummer 4
Musikverein, Gast, = Hof 1, Tisch 4, Nummer 3
Musikverein, Gast, = Hof 1, Tisch 4, Nummer 5
Musikverein, Gast, = Hof 1, Tisch 4, Nummer 6
Musikverein, Gast, = Hof 1, Tisch 4, Nummer 7
Musikverein, Gast, = Hof 1, Tisch 4, Nummer 8
Musikverein, Gast, = Hof 1, Tisch 4, Nummer 9
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 2
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 3
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 4
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 5
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 6
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 7
Musikverein, Gast, = Hof 1, Tisch 5, Nummer 8
Peters, Melanie, = Hof 1, Tisch 8, Nummer 7
Peters, Yusuf, = Hof 1, Tisch 8, Nummer 9
Polat, Matthias, = Hof 1, Tisch 12, Nummer 3
Roth, Stefanie, = Hof 1, Tisch 2, Nummer 8
Schmidt, Dennis, = Hof 1, Tisch 8, Nummer 3
Schmitt, Markus, = Hof 1, Tisch 11, Nummer 6
Schwarz, Elias, = Hof 1, Tisch 16, Nummer 12
Schwarz, Guenter, = Hof 1, Tisch 13, Nummer 5
Schwarz, Liam, = Hof 1, Tisch 16, Nummer 6
Schwarz, Sarah, = Hof 1, Tisch 13, Nummer 9
Schwarz, Yusuf, = Hof 1, Tisch 13, Nummer 8
Simon, Jennifer, = Hof 1, Tisch 10, Nummer 6
Simon, Patrick, = Hof 1, Tisch 8, Nummer 6
Simon, Stefanie, = Hof 1, Tisch 10, Nummer 9
Sommer, Daniel, = Hof 1, Tisch 1, Nummer 12
Sommer, Dennis, = Hof 1, Tisch 13, Nummer 3
Sommer, Dennis, = Hof 1, Tisch 3, Nummer 4
Sommer, Dieter, = Hof 1, Tisch 1, Nummer 4
Sommer, Emil, = Hof 1, Tisch 16, Nummer 2
Sommer, Ida, = Hof 1, Tisch 16, Nummer 9
Sommer, Jennifer, = Hof 1, Tisch 13, Nummer 6
Sommer, Lina, = Hof 1, Tisch 3, Nummer 2
Sommer, Max, = Hof 1, Tisch 16, Nummer 7
Sommer, Nicole, = Hof 1, Tisch 3, Nummer 3
Sommer, Renate, = Hof 1, Tisch 1, Nummer 3
Sommer, Theo, = Hof 1, Tisch 16, Nummer 5
Stein, Andreas, = Hof 1, Tisch 10, Nummer 8
Stein, Werner, = Hof 1, Tisch 13, Nummer 4
Tran, Heinz, = Hof 1, Tisch 15, Nummer 7
Vogel, Anton, = Hof 1, Tisch 17, Nummer 3
Vogel, Max, = Hof 1, Tisch 17, Nummer 2
Vogel, Sandra, = Hof 1, Tisch 1, Nummer 8
Vogel, Svenja, = Hof 1, Tisch 8, Nummer 5
Vogel, Yusuf, = Hof 1, Tisch 1, Nummer 5
Wagner, Daniel, = Hof 1, Tisch 10, Nummer 7
Wagner, Timo, = Hof 1, Tisch 12, Nummer 5
Winkler, Sarah, = Hof 1, Tisch 1, Nummer 13
Yilmaz, Olga, = Hof 1, Tisch 11, Nummer 2
1 Aksoy Rainer = Hof 1 Tisch 13 Nummer 7
2 Aksoy Renate = Hof 1 Tisch 13 Nummer 2
3 Aydin Horst = Hof 1 Tisch 14 Nummer 6
4 Aydin Ursula = Hof 1 Tisch 14 Nummer 8
5 Barth Hannelore = Hof 1 Tisch 9 Nummer 7
6 Berger Sergej = Hof 1 Tisch 2 Nummer 5
7 Brandt Andreas = Hof 1 Tisch 15 Nummer 2
8 Brandt Anja = Hof 1 Tisch 15 Nummer 3
9 Brandt Anton = Hof 1 Tisch 16 Nummer 14
10 Brandt Ben = Hof 1 Tisch 17 Nummer 5
11 Brandt Daniel = Hof 1 Tisch 11 Nummer 7
12 Brandt Felix = Hof 1 Tisch 16 Nummer 13
13 Brandt Frieda = Hof 1 Tisch 16 Nummer 8
14 Brandt Greta = Hof 1 Tisch 16 Nummer 3
15 Brandt Helga = Hof 1 Tisch 1 Nummer 2
16 Brandt Julia = Hof 1 Tisch 1 Nummer 9
17 Brandt Kathrin = Hof 1 Tisch 11 Nummer 4
18 Brandt Lena = Hof 1 Tisch 15 Nummer 6
19 Brandt Milan = Hof 1 Tisch 15 Nummer 5
20 Brandt Paul = Hof 1 Tisch 17 Nummer 6
21 Brandt Sofia = Hof 1 Tisch 15 Nummer 8
22 Brandt Theo = Hof 1 Tisch 15 Nummer 4
23 Brandt Werner = Hof 1 Tisch 1 Nummer 6
24 Busch Stefanie = Hof 1 Tisch 2 Nummer 3
25 Demir Elif = Hof 1 Tisch 10 Nummer 2
26 Demir Hannelore = Hof 1 Tisch 14 Nummer 5
27 Demir Ingrid = Hof 1 Tisch 14 Nummer 2
28 Demir Monika = Hof 1 Tisch 14 Nummer 3
29 Dietrich Jennifer = Hof 1 Tisch 2 Nummer 6
30 Dietrich Nicole = Hof 1 Tisch 12 Nummer 2
31 Erdem Erika = Hof 1 Tisch 15 Nummer 9
32 Erdem Gerhard = Hof 1 Tisch 9 Nummer 2
33 Erdem Rainer = Hof 1 Tisch 9 Nummer 3
34 Esposito Christian = Hof 1 Tisch 12 Nummer 8
35 Esposito Gisela = Hof 1 Tisch 9 Nummer 6
36 Esposito Julia = Hof 1 Tisch 8 Nummer 4
37 Fischer Heinz = Hof 1 Tisch 14 Nummer 4
38 Fischer Helga = Hof 1 Tisch 14 Nummer 7
39 Fischer Nicole = Hof 1 Tisch 12 Nummer 4
40 Fischer Sven = Hof 1 Tisch 10 Nummer 3
41 Frank Erika = Hof 1 Tisch 9 Nummer 8
42 Frank Nadine = Hof 1 Tisch 11 Nummer 9
43 Frank Timo = Hof 1 Tisch 10 Nummer 4
44 Frank Tobias = Hof 1 Tisch 1 Nummer 11
45 Franke Brigitte = Hof 1 Tisch 9 Nummer 9
46 Hansen Olga = Hof 1 Tisch 11 Nummer 5
47 Hansen Wolfgang = Hof 1 Tisch 9 Nummer 5
48 Hoffmann Lena = Hof 1 Tisch 12 Nummer 7
49 Horn Daniel = Hof 1 Tisch 11 Nummer 3
50 Horn Svenja = Hof 1 Tisch 2 Nummer 2
51 Klein Stefan = Hof 1 Tisch 10 Nummer 5
52 Koch Andreas = Hof 1 Tisch 2 Nummer 7
53 Koch Giovanna = Hof 1 Tisch 8 Nummer 2
54 Kovac Giovanna = Hof 1 Tisch 8 Nummer 8
55 Kraus Dennis = Hof 1 Tisch 4 Nummer 4
56 Kraus Matteo = Hof 1 Tisch 16 Nummer 4
57 Kraus Melanie = Hof 1 Tisch 4 Nummer 2
58 Kuhn Leni = Hof 1 Tisch 16 Nummer 11
59 Kuhn Sarah = Hof 1 Tisch 1 Nummer 10
60 Kuhn Stefan = Hof 1 Tisch 2 Nummer 9
61 Kuhn Timo = Hof 1 Tisch 1 Nummer 7
62 Lange Milan = Hof 1 Tisch 11 Nummer 8
63 Meyer Anton = Hof 1 Tisch 17 Nummer 7
64 Meyer Christian = Hof 1 Tisch 2 Nummer 4
65 Meyer Ida = Hof 1 Tisch 17 Nummer 4
66 Meyer Marco = Hof 1 Tisch 12 Nummer 9
67 Meyer Mila = Hof 1 Tisch 16 Nummer 10
68 Meyer Sandra = Hof 1 Tisch 12 Nummer 6
69 Meyer Wolfgang = Hof 1 Tisch 9 Nummer 4
70 Musikverein Gast = Hof 1 Tisch 4 Nummer 3
71 Musikverein Gast = Hof 1 Tisch 4 Nummer 5
72 Musikverein Gast = Hof 1 Tisch 4 Nummer 6
73 Musikverein Gast = Hof 1 Tisch 4 Nummer 7
74 Musikverein Gast = Hof 1 Tisch 4 Nummer 8
75 Musikverein Gast = Hof 1 Tisch 4 Nummer 9
76 Musikverein Gast = Hof 1 Tisch 5 Nummer 2
77 Musikverein Gast = Hof 1 Tisch 5 Nummer 3
78 Musikverein Gast = Hof 1 Tisch 5 Nummer 4
79 Musikverein Gast = Hof 1 Tisch 5 Nummer 5
80 Musikverein Gast = Hof 1 Tisch 5 Nummer 6
81 Musikverein Gast = Hof 1 Tisch 5 Nummer 7
82 Musikverein Gast = Hof 1 Tisch 5 Nummer 8
83 Peters Melanie = Hof 1 Tisch 8 Nummer 7
84 Peters Yusuf = Hof 1 Tisch 8 Nummer 9
85 Polat Matthias = Hof 1 Tisch 12 Nummer 3
86 Roth Stefanie = Hof 1 Tisch 2 Nummer 8
87 Schmidt Dennis = Hof 1 Tisch 8 Nummer 3
88 Schmitt Markus = Hof 1 Tisch 11 Nummer 6
89 Schwarz Elias = Hof 1 Tisch 16 Nummer 12
90 Schwarz Guenter = Hof 1 Tisch 13 Nummer 5
91 Schwarz Liam = Hof 1 Tisch 16 Nummer 6
92 Schwarz Sarah = Hof 1 Tisch 13 Nummer 9
93 Schwarz Yusuf = Hof 1 Tisch 13 Nummer 8
94 Simon Jennifer = Hof 1 Tisch 10 Nummer 6
95 Simon Patrick = Hof 1 Tisch 8 Nummer 6
96 Simon Stefanie = Hof 1 Tisch 10 Nummer 9
97 Sommer Daniel = Hof 1 Tisch 1 Nummer 12
98 Sommer Dennis = Hof 1 Tisch 13 Nummer 3
99 Sommer Dennis = Hof 1 Tisch 3 Nummer 4
100 Sommer Dieter = Hof 1 Tisch 1 Nummer 4
101 Sommer Emil = Hof 1 Tisch 16 Nummer 2
102 Sommer Ida = Hof 1 Tisch 16 Nummer 9
103 Sommer Jennifer = Hof 1 Tisch 13 Nummer 6
104 Sommer Lina = Hof 1 Tisch 3 Nummer 2
105 Sommer Max = Hof 1 Tisch 16 Nummer 7
106 Sommer Nicole = Hof 1 Tisch 3 Nummer 3
107 Sommer Renate = Hof 1 Tisch 1 Nummer 3
108 Sommer Theo = Hof 1 Tisch 16 Nummer 5
109 Stein Andreas = Hof 1 Tisch 10 Nummer 8
110 Stein Werner = Hof 1 Tisch 13 Nummer 4
111 Tran Heinz = Hof 1 Tisch 15 Nummer 7
112 Vogel Anton = Hof 1 Tisch 17 Nummer 3
113 Vogel Max = Hof 1 Tisch 17 Nummer 2
114 Vogel Sandra = Hof 1 Tisch 1 Nummer 8
115 Vogel Svenja = Hof 1 Tisch 8 Nummer 5
116 Vogel Yusuf = Hof 1 Tisch 1 Nummer 5
117 Wagner Daniel = Hof 1 Tisch 10 Nummer 7
118 Wagner Timo = Hof 1 Tisch 12 Nummer 5
119 Winkler Sarah = Hof 1 Tisch 1 Nummer 13
120 Yilmaz Olga = Hof 1 Tisch 11 Nummer 2
+158
View File
@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="995.887" height="667.258" viewBox="0 0 995.887 667.258">
<rect width="100%" height="100%" fill="white"/>
<circle cx="744.415" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="744.415" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 6</text>
<circle cx="87.1573" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="87.1573" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 7</text>
<circle cx="251.472" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="251.472" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 3</text>
<circle cx="251.472" cy="216.979" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="281.344" cy="268.718" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="221.6" cy="268.718" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="908.73" cy="415.786" r="48.4" fill="white" stroke="black" stroke-width="1.5"/>
<text x="908.73" y="365.386" text-anchor="middle" font-size="10" fill="black">Tisch 17</text>
<circle cx="908.73" cy="389.386" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="931.593" cy="402.586" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="931.593" cy="428.986" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="908.73" cy="442.186" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="885.867" cy="428.986" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="885.867" cy="402.586" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="580.101" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 5</text>
<circle cx="580.101" cy="216.979" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="607.069" cy="229.966" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="613.729" cy="259.147" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="595.067" cy="282.549" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="565.135" cy="282.549" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="546.472" cy="259.147" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="553.133" cy="229.966" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="415.786" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 14</text>
<circle cx="415.786" cy="545.608" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="442.754" cy="558.595" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="449.415" cy="587.776" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="430.752" cy="611.178" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="400.82" cy="611.178" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="382.158" cy="587.776" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="388.818" cy="558.595" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="87.1573" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 2</text>
<circle cx="87.1573" cy="216.979" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="227.081" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="121.651" cy="251.472" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="275.862" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="285.965" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="275.862" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="52.664" cy="251.472" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="227.081" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="251.472" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="415.786" y="192.979" text-anchor="middle" font-size="10" fill="black">Tisch 4</text>
<circle cx="415.786" cy="216.979" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="227.081" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="450.28" cy="251.472" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="275.862" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="285.965" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="275.862" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="381.293" cy="251.472" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="227.081" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="251.472" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 8</text>
<circle cx="251.472" cy="381.293" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="391.396" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="285.965" cy="415.786" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="440.177" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="450.28" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="440.177" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="216.979" cy="415.786" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="391.396" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="415.786" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 9</text>
<circle cx="415.786" cy="381.293" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="391.396" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="450.28" cy="415.786" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="440.177" cy="440.177" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="450.28" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="440.177" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="381.293" cy="415.786" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="391.396" cy="391.396" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="580.101" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 10</text>
<circle cx="580.101" cy="381.293" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="391.396" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="614.594" cy="415.786" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="440.177" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="450.28" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="440.177" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="545.608" cy="415.786" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="391.396" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="744.415" cy="415.786" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="744.415" y="357.293" text-anchor="middle" font-size="10" fill="black">Tisch 11</text>
<circle cx="744.415" cy="381.293" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="768.806" cy="391.396" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="778.909" cy="415.786" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="768.806" cy="440.177" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="744.415" cy="450.28" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="720.025" cy="440.177" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="709.922" cy="415.786" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="720.025" cy="391.396" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="87.1573" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 12</text>
<circle cx="87.1573" cy="545.608" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="555.711" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="121.651" cy="580.101" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="111.548" cy="604.491" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="87.1573" cy="614.594" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="604.491" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="52.664" cy="580.101" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="62.7669" cy="555.711" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="251.472" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 13</text>
<circle cx="251.472" cy="545.608" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="555.711" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="285.965" cy="580.101" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="275.862" cy="604.491" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="251.472" cy="614.594" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="604.491" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="216.979" cy="580.101" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="227.081" cy="555.711" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="580.101" r="56.4933" fill="white" stroke="black" stroke-width="1.5"/>
<text x="580.101" y="521.608" text-anchor="middle" font-size="10" fill="black">Tisch 15</text>
<circle cx="580.101" cy="545.608" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="555.711" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="614.594" cy="580.101" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="604.491" cy="604.491" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="580.101" cy="614.594" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="604.491" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="545.608" cy="580.101" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="555.711" cy="555.711" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="87.1573" r="73.0009" fill="white" stroke="black" stroke-width="1.5"/>
<text x="415.786" y="12.1564" text-anchor="middle" font-size="10" fill="black">Tisch 1</text>
<circle cx="415.786" cy="36.1564" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="441.287" cy="42.9892" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="459.954" cy="61.6568" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="466.787" cy="87.1573" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="459.954" cy="112.658" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="441.287" cy="131.325" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="415.786" cy="138.158" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="390.286" cy="131.325" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="371.618" cy="112.658" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="364.785" cy="87.1573" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="371.618" cy="61.6568" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="390.286" cy="42.9892" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="908.73" cy="251.472" r="77.1573" fill="white" stroke="black" stroke-width="1.5"/>
<text x="908.73" y="172.315" text-anchor="middle" font-size="10" fill="black">Tisch 16</text>
<circle cx="908.73" cy="196.315" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="934.363" cy="202.632" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="954.124" cy="220.139" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="963.485" cy="244.823" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="960.303" cy="271.031" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="945.306" cy="292.758" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="921.93" cy="305.026" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="895.53" cy="305.026" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="872.154" cy="292.758" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="857.157" cy="271.031" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="853.975" cy="244.823" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="863.336" cy="220.139" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="883.097" cy="202.632" r="12" fill="#888888" stroke="black" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

+154
View File
@@ -0,0 +1,154 @@
[1]
Helga Brandt = Hof 1, Tisch 1, Nummer 1
Renate Sommer = Hof 1, Tisch 1, Nummer 2
Dieter Sommer = Hof 1, Tisch 1, Nummer 3
Yusuf Vogel = Hof 1, Tisch 1, Nummer 4
Werner Brandt = Hof 1, Tisch 1, Nummer 5
Timo Kuhn = Hof 1, Tisch 1, Nummer 6
Sandra Vogel = Hof 1, Tisch 1, Nummer 7
Julia Brandt = Hof 1, Tisch 1, Nummer 8
Sarah Kuhn = Hof 1, Tisch 1, Nummer 9
Tobias Frank = Hof 1, Tisch 1, Nummer 10
Daniel Sommer = Hof 1, Tisch 1, Nummer 11
Sarah Winkler = Hof 1, Tisch 1, Nummer 12
[2]
Svenja Horn = Hof 1, Tisch 2, Nummer 1
Stefanie Busch = Hof 1, Tisch 2, Nummer 2
Christian Meyer = Hof 1, Tisch 2, Nummer 3
Sergej Berger = Hof 1, Tisch 2, Nummer 4
Jennifer Dietrich = Hof 1, Tisch 2, Nummer 5
Andreas Koch = Hof 1, Tisch 2, Nummer 6
Stefanie Roth = Hof 1, Tisch 2, Nummer 7
Stefan Kuhn = Hof 1, Tisch 2, Nummer 8
[3]
Lina Sommer = Hof 1, Tisch 3, Nummer 1
Nicole Sommer = Hof 1, Tisch 3, Nummer 2
Dennis Sommer = Hof 1, Tisch 3, Nummer 3
[4]
Melanie Kraus = Hof 1, Tisch 4, Nummer 1
Gast Musikverein = Hof 1, Tisch 4, Nummer 2
Dennis Kraus = Hof 1, Tisch 4, Nummer 3
Gast Musikverein = Hof 1, Tisch 4, Nummer 4
Gast Musikverein = Hof 1, Tisch 4, Nummer 5
Gast Musikverein = Hof 1, Tisch 4, Nummer 6
Gast Musikverein = Hof 1, Tisch 4, Nummer 7
Gast Musikverein = Hof 1, Tisch 4, Nummer 8
[5]
Gast Musikverein = Hof 1, Tisch 5, Nummer 1
Gast Musikverein = Hof 1, Tisch 5, Nummer 2
Gast Musikverein = Hof 1, Tisch 5, Nummer 3
Gast Musikverein = Hof 1, Tisch 5, Nummer 4
Gast Musikverein = Hof 1, Tisch 5, Nummer 5
Gast Musikverein = Hof 1, Tisch 5, Nummer 6
Gast Musikverein = Hof 1, Tisch 5, Nummer 7
[6]
[7]
[8]
Giovanna Koch = Hof 1, Tisch 8, Nummer 1
Dennis Schmidt = Hof 1, Tisch 8, Nummer 2
Julia Esposito = Hof 1, Tisch 8, Nummer 3
Svenja Vogel = Hof 1, Tisch 8, Nummer 4
Patrick Simon = Hof 1, Tisch 8, Nummer 5
Melanie Peters = Hof 1, Tisch 8, Nummer 6
Giovanna Kovac = Hof 1, Tisch 8, Nummer 7
Yusuf Peters = Hof 1, Tisch 8, Nummer 8
[9]
Gerhard Erdem = Hof 1, Tisch 9, Nummer 1
Rainer Erdem = Hof 1, Tisch 9, Nummer 2
Wolfgang Meyer = Hof 1, Tisch 9, Nummer 3
Wolfgang Hansen = Hof 1, Tisch 9, Nummer 4
Gisela Esposito = Hof 1, Tisch 9, Nummer 5
Hannelore Barth = Hof 1, Tisch 9, Nummer 6
Erika Frank = Hof 1, Tisch 9, Nummer 7
Brigitte Franke = Hof 1, Tisch 9, Nummer 8
[10]
Elif Demir = Hof 1, Tisch 10, Nummer 1
Sven Fischer = Hof 1, Tisch 10, Nummer 2
Timo Frank = Hof 1, Tisch 10, Nummer 3
Stefan Klein = Hof 1, Tisch 10, Nummer 4
Jennifer Simon = Hof 1, Tisch 10, Nummer 5
Daniel Wagner = Hof 1, Tisch 10, Nummer 6
Andreas Stein = Hof 1, Tisch 10, Nummer 7
Stefanie Simon = Hof 1, Tisch 10, Nummer 8
[11]
Olga Yilmaz = Hof 1, Tisch 11, Nummer 1
Daniel Horn = Hof 1, Tisch 11, Nummer 2
Kathrin Brandt = Hof 1, Tisch 11, Nummer 3
Olga Hansen = Hof 1, Tisch 11, Nummer 4
Markus Schmitt = Hof 1, Tisch 11, Nummer 5
Daniel Brandt = Hof 1, Tisch 11, Nummer 6
Milan Lange = Hof 1, Tisch 11, Nummer 7
Nadine Frank = Hof 1, Tisch 11, Nummer 8
[12]
Nicole Dietrich = Hof 1, Tisch 12, Nummer 1
Matthias Polat = Hof 1, Tisch 12, Nummer 2
Nicole Fischer = Hof 1, Tisch 12, Nummer 3
Timo Wagner = Hof 1, Tisch 12, Nummer 4
Sandra Meyer = Hof 1, Tisch 12, Nummer 5
Lena Hoffmann = Hof 1, Tisch 12, Nummer 6
Christian Esposito = Hof 1, Tisch 12, Nummer 7
Marco Meyer = Hof 1, Tisch 12, Nummer 8
[13]
Renate Aksoy = Hof 1, Tisch 13, Nummer 1
Dennis Sommer = Hof 1, Tisch 13, Nummer 2
Werner Stein = Hof 1, Tisch 13, Nummer 3
Guenter Schwarz = Hof 1, Tisch 13, Nummer 4
Jennifer Sommer = Hof 1, Tisch 13, Nummer 5
Rainer Aksoy = Hof 1, Tisch 13, Nummer 6
Yusuf Schwarz = Hof 1, Tisch 13, Nummer 7
Sarah Schwarz = Hof 1, Tisch 13, Nummer 8
[14]
Ingrid Demir = Hof 1, Tisch 14, Nummer 1
Monika Demir = Hof 1, Tisch 14, Nummer 2
Heinz Fischer = Hof 1, Tisch 14, Nummer 3
Hannelore Demir = Hof 1, Tisch 14, Nummer 4
Horst Aydin = Hof 1, Tisch 14, Nummer 5
Helga Fischer = Hof 1, Tisch 14, Nummer 6
Ursula Aydin = Hof 1, Tisch 14, Nummer 7
[15]
Andreas Brandt = Hof 1, Tisch 15, Nummer 1
Anja Brandt = Hof 1, Tisch 15, Nummer 2
Theo Brandt = Hof 1, Tisch 15, Nummer 3
Milan Brandt = Hof 1, Tisch 15, Nummer 4
Lena Brandt = Hof 1, Tisch 15, Nummer 5
Heinz Tran = Hof 1, Tisch 15, Nummer 6
Sofia Brandt = Hof 1, Tisch 15, Nummer 7
Erika Erdem = Hof 1, Tisch 15, Nummer 8
[16]
Emil Sommer = Hof 1, Tisch 16, Nummer 1
Greta Brandt = Hof 1, Tisch 16, Nummer 2
Matteo Kraus = Hof 1, Tisch 16, Nummer 3
Theo Sommer = Hof 1, Tisch 16, Nummer 4
Liam Schwarz = Hof 1, Tisch 16, Nummer 5
Max Sommer = Hof 1, Tisch 16, Nummer 6
Frieda Brandt = Hof 1, Tisch 16, Nummer 7
Ida Sommer = Hof 1, Tisch 16, Nummer 8
Mila Meyer = Hof 1, Tisch 16, Nummer 9
Leni Kuhn = Hof 1, Tisch 16, Nummer 10
Elias Schwarz = Hof 1, Tisch 16, Nummer 11
Felix Brandt = Hof 1, Tisch 16, Nummer 12
Anton Brandt = Hof 1, Tisch 16, Nummer 13
[17]
Max Vogel = Hof 1, Tisch 17, Nummer 1
Anton Vogel = Hof 1, Tisch 17, Nummer 2
Ida Meyer = Hof 1, Tisch 17, Nummer 3
Ben Brandt = Hof 1, Tisch 17, Nummer 4
Paul Brandt = Hof 1, Tisch 17, Nummer 5
Anton Meyer = Hof 1, Tisch 17, Nummer 6
+549
View File
@@ -0,0 +1,549 @@
<Bestellung>
<!-- Hochzeit in der Gaststaette "Zum Goldenen Hirschen": 120 Gaeste, 143 Plaetze (84%% Auslastung). Ehrentafel = Tisch 1, Kindertisch = Tisch 16, Teenager-Tisch = Tisch 17. -->
<!-- Ehrentafel: Brautpaar, Brauteltern, Braeutigameltern, Trauzeugen (fest an Tisch 1) -->
<Gruppe>
<Person>
<Vorname>Julia</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Daniel</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Werner</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Helga</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Dieter</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Renate</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Sarah</Vorname>
<Nachname>Winkler</Nachname>
</Person>
<Person>
<Vorname>Tobias</Vorname>
<Nachname>Frank</Nachname>
</Person>
<Tisch>1</Tisch>
</Gruppe>
<!-- Familie Peters (Braut-Seite, Geschwister Melanie) -->
<Gruppe>
<Person>
<Vorname>Yusuf</Vorname>
<Nachname>Peters</Nachname>
</Person>
<Person>
<Vorname>Melanie</Vorname>
<Nachname>Peters</Nachname>
</Person>
</Gruppe>
<!-- Familie Brandt (Braut-Seite, Geschwister Daniel): Felix (12 J.) am Kindertisch; Ben (13 J.) am Teenager-Tisch -->
<Gruppe>
<Person>
<Vorname>Daniel</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Kathrin</Vorname>
<Nachname>Brandt</Nachname>
</Person>
</Gruppe>
<!-- Familie Kraus (Braut-Seite, Geschwister Melanie): Matteo (9 J.) am Kindertisch -->
<Gruppe>
<Person>
<Vorname>Dennis</Vorname>
<Nachname>Kraus</Nachname>
</Person>
<Person>
<Vorname>Melanie</Vorname>
<Nachname>Kraus</Nachname>
</Person>
</Gruppe>
<!-- Familie Brandt (Braut-Seite, Geschwister Andreas): Theo (3 J.) sitzt bei den Eltern; Anton (10 J.) am Kindertisch; Frieda (12 J.) am Kindertisch; Paul (19 J.) am Teenager-Tisch -->
<Gruppe>
<Person>
<Vorname>Andreas</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Lena</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Theo</Vorname>
<Nachname>Brandt</Nachname>
</Person>
</Gruppe>
<!-- Familie Meyer (Braut-Seite, Geschwister Sandra): Mila (10 J.) am Kindertisch; Anton (16 J.) am Teenager-Tisch; Ida (16 J.) am Teenager-Tisch -->
<Gruppe>
<Person>
<Vorname>Marco</Vorname>
<Nachname>Meyer</Nachname>
</Person>
<Person>
<Vorname>Sandra</Vorname>
<Nachname>Meyer</Nachname>
</Person>
</Gruppe>
<!-- Familie Brandt (Braut-Seite, Geschwister Milan): Sofia (2 J.) sitzt bei den Eltern; Greta (7 J.) am Kindertisch -->
<Gruppe>
<Person>
<Vorname>Milan</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Anja</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Sofia</Vorname>
<Nachname>Brandt</Nachname>
</Person>
</Gruppe>
<!-- Familie Vogel (Braut-Seite, Geschwister Sandra): Anton (14 J.) am Teenager-Tisch; Max (15 J.) am Teenager-Tisch -->
<Gruppe>
<Person>
<Vorname>Yusuf</Vorname>
<Nachname>Vogel</Nachname>
</Person>
<Person>
<Vorname>Sandra</Vorname>
<Nachname>Vogel</Nachname>
</Person>
</Gruppe>
<!-- Familie Sommer (Braeutigam-Seite, Geschwister Dennis): Lina (3 J.) sitzt bei den Eltern; Theo (8 J.) am Kindertisch; Max (12 J.) am Kindertisch -->
<Gruppe>
<Person>
<Vorname>Dennis</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Nicole</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Lina</Vorname>
<Nachname>Sommer</Nachname>
</Person>
</Gruppe>
<!-- Familie Kuhn (Braeutigam-Seite, Geschwister Sarah): Leni (10 J.) am Kindertisch -->
<Gruppe>
<Person>
<Vorname>Timo</Vorname>
<Nachname>Kuhn</Nachname>
</Person>
<Person>
<Vorname>Sarah</Vorname>
<Nachname>Kuhn</Nachname>
</Person>
</Gruppe>
<!-- Familie Sommer (Braeutigam-Seite, Geschwister Dennis): Emil (8 J.) am Kindertisch; Ida (8 J.) am Kindertisch -->
<Gruppe>
<Person>
<Vorname>Dennis</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Jennifer</Vorname>
<Nachname>Sommer</Nachname>
</Person>
</Gruppe>
<!-- Familie Schwarz (Braeutigam-Seite, Geschwister Sarah): Liam (8 J.) am Kindertisch; Elias (8 J.) am Kindertisch -->
<Gruppe>
<Person>
<Vorname>Yusuf</Vorname>
<Nachname>Schwarz</Nachname>
</Person>
<Person>
<Vorname>Sarah</Vorname>
<Nachname>Schwarz</Nachname>
</Person>
</Gruppe>
<!-- Onkel und Tante (Braut-Seite) -->
<Gruppe>
<Person>
<Vorname>Horst</Vorname>
<Nachname>Aydin</Nachname>
</Person>
<Person>
<Vorname>Ursula</Vorname>
<Nachname>Aydin</Nachname>
</Person>
</Gruppe>
<!-- Onkel und Tante mit Cousine (Braut-Seite) -->
<Gruppe>
<Person>
<Vorname>Ingrid</Vorname>
<Nachname>Demir</Nachname>
</Person>
<Person>
<Vorname>Monika</Vorname>
<Nachname>Demir</Nachname>
</Person>
<Person>
<Vorname>Hannelore</Vorname>
<Nachname>Demir</Nachname>
</Person>
</Gruppe>
<!-- Onkel und Tante (Braeutigam-Seite) -->
<Gruppe>
<Person>
<Vorname>Heinz</Vorname>
<Nachname>Fischer</Nachname>
</Person>
<Person>
<Vorname>Helga</Vorname>
<Nachname>Fischer</Nachname>
</Person>
</Gruppe>
<!-- Grosstante mit Begleitung -->
<Gruppe>
<Person>
<Vorname>Heinz</Vorname>
<Nachname>Tran</Nachname>
</Person>
<Person>
<Vorname>Erika</Vorname>
<Nachname>Erdem</Nachname>
</Person>
</Gruppe>
<!-- Studienfreunde der Braut -->
<Gruppe>
<Person>
<Vorname>Nicole</Vorname>
<Nachname>Fischer</Nachname>
</Person>
<Person>
<Vorname>Matthias</Vorname>
<Nachname>Polat</Nachname>
</Person>
<Person>
<Vorname>Christian</Vorname>
<Nachname>Esposito</Nachname>
</Person>
<Person>
<Vorname>Lena</Vorname>
<Nachname>Hoffmann</Nachname>
</Person>
<Person>
<Vorname>Timo</Vorname>
<Nachname>Wagner</Nachname>
</Person>
<Person>
<Vorname>Nicole</Vorname>
<Nachname>Dietrich</Nachname>
</Person>
</Gruppe>
<!-- Kegelclub des Brautvaters -->
<Gruppe>
<Person>
<Vorname>Wolfgang</Vorname>
<Nachname>Hansen</Nachname>
</Person>
<Person>
<Vorname>Hannelore</Vorname>
<Nachname>Barth</Nachname>
</Person>
<Person>
<Vorname>Erika</Vorname>
<Nachname>Frank</Nachname>
</Person>
<Person>
<Vorname>Gerhard</Vorname>
<Nachname>Erdem</Nachname>
</Person>
<Person>
<Vorname>Rainer</Vorname>
<Nachname>Erdem</Nachname>
</Person>
<Person>
<Vorname>Gisela</Vorname>
<Nachname>Esposito</Nachname>
</Person>
<Person>
<Vorname>Brigitte</Vorname>
<Nachname>Franke</Nachname>
</Person>
<Person>
<Vorname>Wolfgang</Vorname>
<Nachname>Meyer</Nachname>
</Person>
</Gruppe>
<!-- Arbeitskolleginnen der Braut -->
<Gruppe>
<Person>
<Vorname>Elif</Vorname>
<Nachname>Demir</Nachname>
</Person>
<Person>
<Vorname>Jennifer</Vorname>
<Nachname>Simon</Nachname>
</Person>
<Person>
<Vorname>Andreas</Vorname>
<Nachname>Stein</Nachname>
</Person>
<Person>
<Vorname>Stefan</Vorname>
<Nachname>Klein</Nachname>
</Person>
<Person>
<Vorname>Timo</Vorname>
<Nachname>Frank</Nachname>
</Person>
<Person>
<Vorname>Daniel</Vorname>
<Nachname>Wagner</Nachname>
</Person>
<Person>
<Vorname>Stefanie</Vorname>
<Nachname>Simon</Nachname>
</Person>
</Gruppe>
<!-- Arbeitskollegen des Braeutigams -->
<Gruppe>
<Person>
<Vorname>Nadine</Vorname>
<Nachname>Frank</Nachname>
</Person>
<Person>
<Vorname>Markus</Vorname>
<Nachname>Schmitt</Nachname>
</Person>
<Person>
<Vorname>Olga</Vorname>
<Nachname>Yilmaz</Nachname>
</Person>
<Person>
<Vorname>Olga</Vorname>
<Nachname>Hansen</Nachname>
</Person>
<Person>
<Vorname>Daniel</Vorname>
<Nachname>Horn</Nachname>
</Person>
<Person>
<Vorname>Milan</Vorname>
<Nachname>Lange</Nachname>
</Person>
</Gruppe>
<!-- Nachbarn der Brauteltern -->
<Gruppe>
<Person>
<Vorname>Guenter</Vorname>
<Nachname>Schwarz</Nachname>
</Person>
<Person>
<Vorname>Rainer</Vorname>
<Nachname>Aksoy</Nachname>
</Person>
<Person>
<Vorname>Renate</Vorname>
<Nachname>Aksoy</Nachname>
</Person>
<Person>
<Vorname>Werner</Vorname>
<Nachname>Stein</Nachname>
</Person>
</Gruppe>
<!-- Fussballverein des Braeutigams -->
<Gruppe>
<Person>
<Vorname>Sergej</Vorname>
<Nachname>Berger</Nachname>
</Person>
<Person>
<Vorname>Giovanna</Vorname>
<Nachname>Kovac</Nachname>
</Person>
<Person>
<Vorname>Dennis</Vorname>
<Nachname>Schmidt</Nachname>
</Person>
<Person>
<Vorname>Patrick</Vorname>
<Nachname>Simon</Nachname>
</Person>
<Person>
<Vorname>Stefanie</Vorname>
<Nachname>Busch</Nachname>
</Person>
<Person>
<Vorname>Andreas</Vorname>
<Nachname>Koch</Nachname>
</Person>
<Person>
<Vorname>Svenja</Vorname>
<Nachname>Vogel</Nachname>
</Person>
<Person>
<Vorname>Giovanna</Vorname>
<Nachname>Koch</Nachname>
</Person>
<Person>
<Vorname>Julia</Vorname>
<Nachname>Esposito</Nachname>
</Person>
</Gruppe>
<!-- Freundinnen aus der Schulzeit -->
<Gruppe>
<Person>
<Vorname>Jennifer</Vorname>
<Nachname>Dietrich</Nachname>
</Person>
<Person>
<Vorname>Christian</Vorname>
<Nachname>Meyer</Nachname>
</Person>
<Person>
<Vorname>Svenja</Vorname>
<Nachname>Horn</Nachname>
</Person>
<Person>
<Vorname>Stefanie</Vorname>
<Nachname>Roth</Nachname>
</Person>
<Person>
<Vorname>Stefan</Vorname>
<Nachname>Kuhn</Nachname>
</Person>
</Gruppe>
<!-- Kindertisch (5-12 Jahre, fest an Tisch 16) -->
<Gruppe>
<Person>
<Vorname>Felix</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Matteo</Vorname>
<Nachname>Kraus</Nachname>
</Person>
<Person>
<Vorname>Anton</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Frieda</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Mila</Vorname>
<Nachname>Meyer</Nachname>
</Person>
<Person>
<Vorname>Greta</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Theo</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Max</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Leni</Vorname>
<Nachname>Kuhn</Nachname>
</Person>
<Person>
<Vorname>Emil</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Ida</Vorname>
<Nachname>Sommer</Nachname>
</Person>
<Person>
<Vorname>Liam</Vorname>
<Nachname>Schwarz</Nachname>
</Person>
<Person>
<Vorname>Elias</Vorname>
<Nachname>Schwarz</Nachname>
</Person>
<Tisch>16</Tisch>
</Gruppe>
<!-- Teenager-Tisch (13-19 Jahre, fest an Tisch 17) -->
<Gruppe>
<Person>
<Vorname>Ben</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Paul</Vorname>
<Nachname>Brandt</Nachname>
</Person>
<Person>
<Vorname>Anton</Vorname>
<Nachname>Meyer</Nachname>
</Person>
<Person>
<Vorname>Ida</Vorname>
<Nachname>Meyer</Nachname>
</Person>
<Person>
<Vorname>Anton</Vorname>
<Nachname>Vogel</Nachname>
</Person>
<Person>
<Vorname>Max</Vorname>
<Nachname>Vogel</Nachname>
</Person>
<Tisch>17</Tisch>
</Gruppe>
<!-- Musikverein (anonyme Sammelbuchung, 13 Karten) -->
<Gruppe>
<Person>
<Vorname>Gast</Vorname>
<Nachname>Musikverein</Nachname>
</Person>
<Anzahl>13</Anzahl>
</Gruppe>
<!-- alleinreisender Gast -->
<Gruppe>
<Person>
<Vorname>Sven</Vorname>
<Nachname>Fischer</Nachname>
</Person>
</Gruppe>
</Bestellung>
+118
View File
@@ -0,0 +1,118 @@
[1]
Nummer=1
Hof=1
Plaetze=12
Nachbarliste=[3, 4, 5]
Koordinaten=(2,0)
[2]
Nummer=2
Hof=1
Plaetze=8
Nachbarliste=[3, 7, 8]
Koordinaten=(0,1)
[3]
Nummer=3
Hof=1
Plaetze=8
Nachbarliste=[1, 2, 4, 7, 8, 9]
Koordinaten=(1,1)
[4]
Nummer=4
Hof=1
Plaetze=8
Nachbarliste=[1, 3, 5, 8, 9, 10]
Koordinaten=(2,1)
[5]
Nummer=5
Hof=1
Plaetze=8
Nachbarliste=[1, 4, 6, 9, 10, 11]
Koordinaten=(3,1)
[6]
Nummer=6
Hof=1
Plaetze=8
Nachbarliste=[5, 10, 11, 16, 17]
Koordinaten=(4,1)
[7]
Nummer=7
Hof=1
Plaetze=8
Nachbarliste=[2, 3, 8, 12, 13]
Koordinaten=(0,2)
[8]
Nummer=8
Hof=1
Plaetze=8
Nachbarliste=[2, 3, 4, 7, 9, 12, 13, 14]
Koordinaten=(1,2)
[9]
Nummer=9
Hof=1
Plaetze=8
Nachbarliste=[3, 4, 5, 8, 10, 13, 14, 15]
Koordinaten=(2,2)
[10]
Nummer=10
Hof=1
Plaetze=8
Nachbarliste=[4, 5, 6, 9, 11, 14, 15]
Koordinaten=(3,2)
[11]
Nummer=11
Hof=1
Plaetze=8
Nachbarliste=[5, 6, 10, 15, 16, 17]
Koordinaten=(4,2)
[12]
Nummer=12
Hof=1
Plaetze=8
Nachbarliste=[7, 8, 13]
Koordinaten=(0,3)
[13]
Nummer=13
Hof=1
Plaetze=8
Nachbarliste=[7, 8, 9, 12, 14]
Koordinaten=(1,3)
[14]
Nummer=14
Hof=1
Plaetze=8
Nachbarliste=[8, 9, 10, 13, 15]
Koordinaten=(2,3)
[15]
Nummer=15
Hof=1
Plaetze=8
Nachbarliste=[9, 10, 11, 14]
Koordinaten=(3,3)
[16]
Nummer=16
Hof=1
Plaetze=13
Nachbarliste=[6, 11, 17]
Koordinaten=(5,1)
[17]
Nummer=17
Hof=1
Plaetze=6
Nachbarliste=[6, 11, 16]
Koordinaten=(5,2)
+300
View File
@@ -0,0 +1,300 @@
Aksoy, Luca, = Hof 1, Tisch 14, Nummer 3
Aksoy, Marie, = Hof 1, Tisch 24, Nummer 5
Aksoy, Marija, = Hof 2, Tisch 54, Nummer 5
Aksoy, Michael, Dr. = Hof 2, Tisch 59, Nummer 4
Aksoy, Nadine, = Hof 1, Tisch 14, Nummer 4
Aksoy, Nicole, = Hof 1, Tisch 38, Nummer 5
Aksoy, Sergej, = Hof 1, Tisch 14, Nummer 2
Aksoy, Sofia, = Hof 1, Tisch 14, Nummer 5
Aksoy, Thomas, = Hof 1, Tisch 24, Nummer 2
Albrecht, Andreas, = Hof 1, Tisch 17, Nummer 5
Albrecht, Emre, Prof. Dr. = Hof 2, Tisch 67, Nummer 2
Albrecht, Sarah, = Hof 1, Tisch 17, Nummer 2
Albrecht, Yusuf, Prof. Dr. = Hof 1, Tisch 18, Nummer 3
Arnold, Christian, = Hof 2, Tisch 52, Nummer 3
Arnold, Jennifer, = Hof 2, Tisch 53, Nummer 5
Arnold, Jennifer, Dr. = Hof 2, Tisch 67, Nummer 4
Arnold, Leni, = Hof 2, Tisch 52, Nummer 4
Arnold, Mila, = Hof 2, Tisch 52, Nummer 2
Arnold, Nadine, = Hof 1, Tisch 40, Nummer 4
Arnold, Patrick, = Hof 2, Tisch 53, Nummer 4
Barth, Lina, = Hof 2, Tisch 66, Nummer 5
Barth, Markus, = Hof 1, Tisch 45, Nummer 2
Barth, Nadine, = Hof 2, Tisch 66, Nummer 3
Barth, Patrick, = Hof 2, Tisch 66, Nummer 2
Barth, Timo, = Hof 2, Tisch 66, Nummer 4
Bauer, Dragana, = Hof 1, Tisch 42, Nummer 2
Bauer, Yusuf, = Hof 1, Tisch 2, Nummer 3
Becker, Jan, = Hof 2, Tisch 50, Nummer 2
Becker, Marija, = Hof 1, Tisch 26, Nummer 2
Becker, Nicole, = Hof 2, Tisch 50, Nummer 4
Becker, Sandra, = Hof 2, Tisch 50, Nummer 3
Berger, Andreas, = Hof 1, Tisch 33, Nummer 2
Berger, Anton, = Hof 1, Tisch 25, Nummer 2
Berger, Jennifer, = Hof 1, Tisch 25, Nummer 3
Berger, Layla, = Hof 1, Tisch 25, Nummer 4
Berger, Nadine, Dr. = Hof 2, Tisch 77, Nummer 2
Berger, Stefan, = Hof 1, Tisch 33, Nummer 4
Berger, Svenja, = Hof 1, Tisch 33, Nummer 3
Bianchi, Jan, Dr. = Hof 1, Tisch 1, Nummer 4
Bianchi, Mia, = Hof 1, Tisch 21, Nummer 2
Bianchi, Sandra, = Hof 1, Tisch 21, Nummer 3
Bianchi, Thomas, = Hof 1, Tisch 21, Nummer 4
Bianchi, Thomas, = Hof 2, Tisch 67, Nummer 5
Braun, Christian, = Hof 1, Tisch 37, Nummer 2
Braun, Dragana, = Hof 1, Tisch 36, Nummer 5
Braun, Jan, = Hof 1, Tisch 36, Nummer 2
Braun, Julia, = Hof 1, Tisch 37, Nummer 3
Braun, Milan, = Hof 1, Tisch 37, Nummer 5
Braun, Nadine, = Hof 1, Tisch 37, Nummer 4
Busch, Emre, = Hof 1, Tisch 28, Nummer 2
Busch, Marie, = Hof 1, Tisch 28, Nummer 5
Busch, Michael, = Hof 1, Tisch 28, Nummer 4
Busch, Olga, = Hof 1, Tisch 28, Nummer 3
Busch, Patrick, = Hof 2, Tisch 49, Nummer 2
Celik, Elif, = Hof 1, Tisch 19, Nummer 5
Celik, Patrick, = Hof 1, Tisch 19, Nummer 4
Dallmann, Charlotte, = Hof 1, Tisch 7, Nummer 5
Dallmann, Heinrich, = Hof 1, Tisch 7, Nummer 4
Dallmann, Margarete, = Hof 1, Tisch 7, Nummer 3
Dallmann, Maximilian, = Hof 1, Tisch 7, Nummer 2
Demir, Sandra, Dr. = Hof 1, Tisch 19, Nummer 2
Dietrich, Dragana, Prof. Dr. = Hof 2, Tisch 59, Nummer 5
Dietrich, Jennifer, = Hof 2, Tisch 78, Nummer 2
Dietrich, Marco, = Hof 2, Tisch 78, Nummer 3
Dietrich, Sofia, = Hof 2, Tisch 78, Nummer 4
Engel, Anja, = Hof 1, Tisch 10, Nummer 4
Engel, Anton, = Hof 1, Tisch 11, Nummer 4
Engel, Julia, = Hof 1, Tisch 11, Nummer 2
Engel, Nicole, = Hof 1, Tisch 11, Nummer 3
Engel, Yusuf, = Hof 1, Tisch 10, Nummer 2
Esposito, Jan, Dr. = Hof 1, Tisch 12, Nummer 3
Esposito, Yusuf, Prof. Dr. = Hof 1, Tisch 26, Nummer 3
Frank, Dennis, = Hof 1, Tisch 10, Nummer 5
Frank, Finn, = Hof 1, Tisch 9, Nummer 4
Frank, Lena, = Hof 1, Tisch 9, Nummer 3
Frank, Marie, = Hof 1, Tisch 10, Nummer 3
Frank, Nadine, = Hof 1, Tisch 9, Nummer 2
Franke, Amira, = Hof 2, Tisch 73, Nummer 3
Franke, Julia, = Hof 2, Tisch 81, Nummer 2
Franke, Marco, = Hof 2, Tisch 81, Nummer 3
Franke, Michael, = Hof 2, Tisch 73, Nummer 2
Franke, Olga, = Hof 2, Tisch 81, Nummer 4
Freifrau von Waldeck, Antonia, = Hof 1, Tisch 6, Nummer 4
Freiherr von Waldeck, Konstantin, Dr. = Hof 1, Tisch 6, Nummer 2
Grothe, Alexander, Dr. h.c. = Hof 1, Tisch 5, Nummer 5
Grothe, Beate, = Hof 1, Tisch 5, Nummer 2
Haas, Jennifer, Dr. = Hof 1, Tisch 45, Nummer 4
Haas, Patrick, = Hof 1, Tisch 42, Nummer 4
Hansen, Giovanna, = Hof 1, Tisch 30, Nummer 4
Hansen, Markus, = Hof 1, Tisch 30, Nummer 3
Hansen, Nicole, Dr. = Hof 1, Tisch 42, Nummer 3
Hansen, Olga, = Hof 1, Tisch 30, Nummer 2
Hansen, Thomas, = Hof 1, Tisch 12, Nummer 5
Hartmann, Deniz, = Hof 2, Tisch 85, Nummer 4
Hartmann, Marija, = Hof 2, Tisch 86, Nummer 3
Hartmann, Nadine, = Hof 2, Tisch 86, Nummer 2
Hartmann, Olga, = Hof 2, Tisch 85, Nummer 3
Hartmann, Thomas, = Hof 2, Tisch 85, Nummer 2
Hoffmann, Emre, = Hof 2, Tisch 49, Nummer 3
Hoffmann, Patrick, Prof. Dr. = Hof 1, Tisch 40, Nummer 5
Hoffmann, Thomas, Dr. = Hof 1, Tisch 32, Nummer 4
Horn, Kathrin, = Hof 2, Tisch 84, Nummer 4
Horn, Layla, = Hof 2, Tisch 84, Nummer 3
Horn, Leon, = Hof 2, Tisch 84, Nummer 5
Horn, Michael, = Hof 2, Tisch 84, Nummer 2
Kaya, Christina, = Hof 1, Tisch 43, Nummer 4
Kaya, Luca, = Hof 1, Tisch 43, Nummer 3
Kaya, Nicole, = Hof 1, Tisch 43, Nummer 2
Kaya, Patrick, Dr. = Hof 1, Tisch 1, Nummer 2
Kaya, Timo, Prof. Dr. = Hof 1, Tisch 19, Nummer 3
Kessler, Ferdinand, Dr. = Hof 1, Tisch 5, Nummer 4
Kessler, Viktoria, = Hof 1, Tisch 5, Nummer 3
Klein, Emre, = Hof 1, Tisch 2, Nummer 4
Klein, Lina, = Hof 2, Tisch 63, Nummer 4
Klein, Markus, = Hof 1, Tisch 38, Nummer 4
Klein, Milan, = Hof 2, Tisch 63, Nummer 2
Klein, Olga, Dr. = Hof 2, Tisch 57, Nummer 2
Klein, Stefanie, = Hof 2, Tisch 63, Nummer 3
Koch, Emil, = Hof 2, Tisch 48, Nummer 2
Koch, Jan, = Hof 2, Tisch 48, Nummer 5
Koch, Kathrin, Dr. = Hof 2, Tisch 68, Nummer 3
Koch, Marie, = Hof 2, Tisch 48, Nummer 3
Koch, Michael, = Hof 2, Tisch 49, Nummer 4
Koch, Olga, = Hof 2, Tisch 48, Nummer 4
Koch, Sarah, = Hof 2, Tisch 49, Nummer 5
Kovac, Anja, = Hof 1, Tisch 15, Nummer 3
Kovac, Henry, = Hof 1, Tisch 15, Nummer 2
Kovac, Lena, = Hof 1, Tisch 15, Nummer 4
Kovac, Luca, = Hof 2, Tisch 71, Nummer 2
Kovac, Marco, = Hof 1, Tisch 15, Nummer 5
Kovac, Marija, = Hof 1, Tisch 24, Nummer 4
Kovac, Matthias, = Hof 1, Tisch 26, Nummer 4
Kovac, Tobias, = Hof 1, Tisch 24, Nummer 3
Kraus, Markus, = Hof 1, Tisch 3, Nummer 5
Kraus, Patrick, Dr. = Hof 2, Tisch 57, Nummer 5
Krause, Andreas, = Hof 2, Tisch 74, Nummer 5
Krause, Arda, = Hof 2, Tisch 74, Nummer 4
Krause, Christina, Dr. = Hof 1, Tisch 1, Nummer 3
Krause, Daniel, = Hof 1, Tisch 38, Nummer 3
Krause, Dragana, Dr. = Hof 2, Tisch 71, Nummer 3
Krause, Emma, = Hof 2, Tisch 74, Nummer 2
Krause, Julia, = Hof 2, Tisch 74, Nummer 3
Krause, Matthias, = Hof 2, Tisch 58, Nummer 4
Krause, Thomas, = Hof 1, Tisch 41, Nummer 2
Kuhn, Julia, Dr. = Hof 2, Tisch 68, Nummer 4
Lange, Dragana, = Hof 2, Tisch 72, Nummer 2
Lange, Jan, = Hof 2, Tisch 73, Nummer 5
Lange, Michael, = Hof 2, Tisch 72, Nummer 3
Lange, Sergej, = Hof 2, Tisch 59, Nummer 3
Lange, Sofia, = Hof 2, Tisch 72, Nummer 4
Lange, Svenja, = Hof 2, Tisch 73, Nummer 4
Lehmann, Giovanna, = Hof 1, Tisch 16, Nummer 2
Lehmann, Layla, = Hof 1, Tisch 16, Nummer 5
Lehmann, Markus, = Hof 1, Tisch 16, Nummer 4
Lehmann, Milan, = Hof 1, Tisch 16, Nummer 3
Lehmann, Nicole, = Hof 1, Tisch 17, Nummer 3
Lehmann, Patrick, = Hof 2, Tisch 77, Nummer 4
Lehmann, Thomas, = Hof 1, Tisch 17, Nummer 4
Ludwig, Aylin, Dr. = Hof 2, Tisch 57, Nummer 4
Ludwig, Elias, = Hof 2, Tisch 56, Nummer 3
Ludwig, Elif, = Hof 2, Tisch 56, Nummer 4
Ludwig, Emre, = Hof 2, Tisch 56, Nummer 2
Ludwig, Emre, Prof. Dr. = Hof 1, Tisch 38, Nummer 2
Ludwig, Giovanna, = Hof 2, Tisch 56, Nummer 5
Maier, Arda, = Hof 2, Tisch 60, Nummer 2
Maier, Christian, = Hof 2, Tisch 60, Nummer 4
Maier, Olga, = Hof 2, Tisch 60, Nummer 3
Maier, Sarah, = Hof 2, Tisch 60, Nummer 5
Neumann, Jennifer, = Hof 2, Tisch 83, Nummer 4
Neumann, Lina, = Hof 2, Tisch 83, Nummer 3
Neumann, Matteo, = Hof 2, Tisch 83, Nummer 2
Neumann, Thomas, = Hof 2, Tisch 83, Nummer 5
Nguyen, Anja, = Hof 2, Tisch 51, Nummer 3
Nguyen, Daniel, = Hof 2, Tisch 51, Nummer 4
Nguyen, Julia, = Hof 1, Tisch 13, Nummer 4
Nguyen, Sofia, = Hof 2, Tisch 51, Nummer 2
Nowak, Aylin, = Hof 1, Tisch 36, Nummer 3
Nowak, Felix, = Hof 1, Tisch 35, Nummer 2
Nowak, Kathrin, = Hof 1, Tisch 36, Nummer 4
Nowak, Lina, = Hof 1, Tisch 35, Nummer 4
Nowak, Markus, = Hof 1, Tisch 35, Nummer 5
Nowak, Noah, = Hof 1, Tisch 35, Nummer 3
Ott, Daniel, = Hof 2, Tisch 86, Nummer 5
Ott, Hannah, = Hof 2, Tisch 80, Nummer 3
Ott, Luca, = Hof 2, Tisch 71, Nummer 4
Ott, Matthias, = Hof 2, Tisch 80, Nummer 2
Ott, Melanie, = Hof 2, Tisch 80, Nummer 4
Ott, Olga, = Hof 2, Tisch 86, Nummer 4
Ott, Sergej, Prof. Dr. = Hof 1, Tisch 42, Nummer 5
Ott, Yusuf, Prof. Dr. = Hof 2, Tisch 77, Nummer 3
Peters, Christian, = Hof 1, Tisch 3, Nummer 4
Peters, Nicole, = Hof 1, Tisch 41, Nummer 3
Petrov, Giovanna, = Hof 1, Tisch 3, Nummer 3
Petrov, Kathrin, = Hof 1, Tisch 20, Nummer 4
Petrov, Kathrin, Prof. Dr. = Hof 1, Tisch 4, Nummer 2
Petrov, Matthias, = Hof 1, Tisch 45, Nummer 5
Petrov, Milan, = Hof 1, Tisch 20, Nummer 5
Petrov, Sergej, = Hof 2, Tisch 54, Nummer 3
Pohl, Dragana, = Hof 2, Tisch 75, Nummer 4
Pohl, Emre, = Hof 2, Tisch 75, Nummer 5
Pohl, Mia, = Hof 2, Tisch 75, Nummer 2
Pohl, Theo, = Hof 2, Tisch 75, Nummer 3
Polat, Kathrin, = Hof 2, Tisch 54, Nummer 2
Polat, Katrin, = Hof 2, Tisch 88, Nummer 3
Polat, Marija, = Hof 1, Tisch 40, Nummer 2
Polat, Markus, = Hof 2, Tisch 88, Nummer 2
Polat, Sarah, = Hof 2, Tisch 53, Nummer 2
Polat, Stefan, = Hof 2, Tisch 53, Nummer 3
Polat, Stefanie, = Hof 2, Tisch 88, Nummer 4
Popescu, Matthias, = Hof 1, Tisch 18, Nummer 5
Richter, Anja, = Hof 1, Tisch 31, Nummer 5
Richter, Anja, Prof. Dr. = Hof 2, Tisch 65, Nummer 3
Richter, Anton, = Hof 1, Tisch 31, Nummer 4
Richter, Greta, = Hof 1, Tisch 31, Nummer 3
Richter, Julia, Prof. Dr. = Hof 1, Tisch 45, Nummer 3
Richter, Marco, = Hof 1, Tisch 40, Nummer 3
Richter, Matthias, = Hof 1, Tisch 31, Nummer 2
Richter, Stefan, = Hof 2, Tisch 62, Nummer 3
Rossi, Emilia, = Hof 1, Tisch 29, Nummer 4
Rossi, Luca, = Hof 1, Tisch 29, Nummer 3
Rossi, Melanie, = Hof 1, Tisch 29, Nummer 2
Roth, Christian, = Hof 2, Tisch 64, Nummer 3
Roth, Julia, Prof. Dr. = Hof 1, Tisch 13, Nummer 3
Roth, Olga, = Hof 2, Tisch 67, Nummer 3
Roth, Sarah, = Hof 2, Tisch 64, Nummer 2
Roth, Sofia, = Hof 2, Tisch 64, Nummer 4
Sahin, Kathrin, = Hof 2, Tisch 55, Nummer 2
Sahin, Markus, = Hof 2, Tisch 55, Nummer 4
Sahin, Nicole, = Hof 2, Tisch 55, Nummer 5
Sahin, Patrick, = Hof 2, Tisch 55, Nummer 3
Sahin, Thomas, = Hof 2, Tisch 65, Nummer 2
Schmidt, Giovanna, = Hof 1, Tisch 44, Nummer 3
Schmidt, Marie, = Hof 1, Tisch 44, Nummer 2
Schmidt, Matthias, = Hof 1, Tisch 44, Nummer 5
Schmidt, Nicole, = Hof 1, Tisch 12, Nummer 4
Schmitt, Dennis, Prof. Dr. = Hof 2, Tisch 62, Nummer 4
Schmitt, Markus, = Hof 1, Tisch 22, Nummer 5
Schmitt, Markus, = Hof 1, Tisch 4, Nummer 3
Schmitt, Sarah, = Hof 1, Tisch 22, Nummer 4
Schmitt, Sofia, = Hof 1, Tisch 22, Nummer 2
Schmitt, Stefan, Prof. Dr. = Hof 2, Tisch 69, Nummer 4
Schwarz, Giovanna, = Hof 2, Tisch 58, Nummer 3
Seidel, Anja, Dr. = Hof 1, Tisch 32, Nummer 5
Seidel, Markus, Dr. = Hof 1, Tisch 3, Nummer 2
Seidel, Yusuf, Prof. Dr. = Hof 1, Tisch 2, Nummer 5
Seifert, Elif, = Hof 1, Tisch 23, Nummer 4
Seifert, Leni, = Hof 1, Tisch 23, Nummer 3
Seifert, Marco, Prof. Dr. = Hof 2, Tisch 57, Nummer 3
Seifert, Nicole, = Hof 1, Tisch 22, Nummer 3
Seifert, Stefanie, Dr. = Hof 1, Tisch 13, Nummer 2
Seifert, Timo, = Hof 1, Tisch 23, Nummer 5
Seifert, Yusuf, = Hof 1, Tisch 23, Nummer 2
Simon, Andreas, = Hof 2, Tisch 61, Nummer 2
Simon, Emma, = Hof 2, Tisch 61, Nummer 4
Simon, Lena, = Hof 2, Tisch 61, Nummer 5
Simon, Markus, = Hof 2, Tisch 61, Nummer 3
Simon, Svenja, = Hof 1, Tisch 18, Nummer 2
Stein, Ben, = Hof 2, Tisch 76, Nummer 5
Stein, Emilia, = Hof 2, Tisch 76, Nummer 4
Stein, Giovanna, = Hof 2, Tisch 76, Nummer 2
Stein, Markus, Prof. Dr. = Hof 1, Tisch 18, Nummer 4
Stein, Nadine, Dr. = Hof 1, Tisch 4, Nummer 4
Stein, Thomas, = Hof 2, Tisch 76, Nummer 3
Steinbach, Elisabeth, = Hof 1, Tisch 6, Nummer 3
Steinbach, Georg, = Hof 1, Tisch 6, Nummer 5
Thiel, Christina, = Hof 2, Tisch 82, Nummer 2
Thiel, Jan, Dr. = Hof 2, Tisch 65, Nummer 4
Thiel, Julia, = Hof 2, Tisch 82, Nummer 3
Thiel, Yusuf, = Hof 2, Tisch 82, Nummer 4
Tran, Marija, = Hof 2, Tisch 69, Nummer 2
Tran, Olga, = Hof 1, Tisch 32, Nummer 2
Tran, Thomas, Prof. Dr. = Hof 2, Tisch 54, Nummer 4
Wagner, Henry, = Hof 2, Tisch 46, Nummer 3
Wagner, Marco, = Hof 2, Tisch 46, Nummer 5
Wagner, Nicole, = Hof 2, Tisch 46, Nummer 4
Wagner, Sarah, = Hof 2, Tisch 46, Nummer 2
Weber, Andreas, = Hof 1, Tisch 44, Nummer 4
Weber, Julia, = Hof 1, Tisch 2, Nummer 2
Weber, Katrin, = Hof 2, Tisch 68, Nummer 2
Weber, Yusuf, = Hof 2, Tisch 58, Nummer 2
Werner, Andreas, = Hof 1, Tisch 39, Nummer 4
Werner, Dennis, Prof. Dr. = Hof 1, Tisch 32, Nummer 3
Werner, Katrin, = Hof 2, Tisch 59, Nummer 2
Werner, Luca, = Hof 2, Tisch 69, Nummer 3
Werner, Marco, = Hof 1, Tisch 39, Nummer 3
Werner, Nadine, = Hof 1, Tisch 39, Nummer 5
Werner, Sandra, = Hof 1, Tisch 39, Nummer 2
Winkler, Lena, = Hof 1, Tisch 20, Nummer 2
Winkler, Marco, = Hof 1, Tisch 1, Nummer 5
Winkler, Patrick, = Hof 1, Tisch 20, Nummer 3
Winkler, Thomas, = Hof 1, Tisch 12, Nummer 2
Wolf, Ben, = Hof 2, Tisch 79, Nummer 5
Wolf, Emma, = Hof 2, Tisch 79, Nummer 4
Wolf, Julia, = Hof 2, Tisch 79, Nummer 3
Wolf, Thomas, = Hof 2, Tisch 79, Nummer 2
Zimmermann, Jan, = Hof 2, Tisch 70, Nummer 2
Zimmermann, Markus, = Hof 2, Tisch 70, Nummer 3
Zimmermann, Mia, = Hof 2, Tisch 70, Nummer 4
Zimmermann, Patrick, = Hof 2, Tisch 62, Nummer 2
Zimmermann, Svenja, = Hof 2, Tisch 70, Nummer 5
1 Aksoy Luca = Hof 1 Tisch 14 Nummer 3
2 Aksoy Marie = Hof 1 Tisch 24 Nummer 5
3 Aksoy Marija = Hof 2 Tisch 54 Nummer 5
4 Aksoy Michael Dr. = Hof 2 Tisch 59 Nummer 4
5 Aksoy Nadine = Hof 1 Tisch 14 Nummer 4
6 Aksoy Nicole = Hof 1 Tisch 38 Nummer 5
7 Aksoy Sergej = Hof 1 Tisch 14 Nummer 2
8 Aksoy Sofia = Hof 1 Tisch 14 Nummer 5
9 Aksoy Thomas = Hof 1 Tisch 24 Nummer 2
10 Albrecht Andreas = Hof 1 Tisch 17 Nummer 5
11 Albrecht Emre Prof. Dr. = Hof 2 Tisch 67 Nummer 2
12 Albrecht Sarah = Hof 1 Tisch 17 Nummer 2
13 Albrecht Yusuf Prof. Dr. = Hof 1 Tisch 18 Nummer 3
14 Arnold Christian = Hof 2 Tisch 52 Nummer 3
15 Arnold Jennifer = Hof 2 Tisch 53 Nummer 5
16 Arnold Jennifer Dr. = Hof 2 Tisch 67 Nummer 4
17 Arnold Leni = Hof 2 Tisch 52 Nummer 4
18 Arnold Mila = Hof 2 Tisch 52 Nummer 2
19 Arnold Nadine = Hof 1 Tisch 40 Nummer 4
20 Arnold Patrick = Hof 2 Tisch 53 Nummer 4
21 Barth Lina = Hof 2 Tisch 66 Nummer 5
22 Barth Markus = Hof 1 Tisch 45 Nummer 2
23 Barth Nadine = Hof 2 Tisch 66 Nummer 3
24 Barth Patrick = Hof 2 Tisch 66 Nummer 2
25 Barth Timo = Hof 2 Tisch 66 Nummer 4
26 Bauer Dragana = Hof 1 Tisch 42 Nummer 2
27 Bauer Yusuf = Hof 1 Tisch 2 Nummer 3
28 Becker Jan = Hof 2 Tisch 50 Nummer 2
29 Becker Marija = Hof 1 Tisch 26 Nummer 2
30 Becker Nicole = Hof 2 Tisch 50 Nummer 4
31 Becker Sandra = Hof 2 Tisch 50 Nummer 3
32 Berger Andreas = Hof 1 Tisch 33 Nummer 2
33 Berger Anton = Hof 1 Tisch 25 Nummer 2
34 Berger Jennifer = Hof 1 Tisch 25 Nummer 3
35 Berger Layla = Hof 1 Tisch 25 Nummer 4
36 Berger Nadine Dr. = Hof 2 Tisch 77 Nummer 2
37 Berger Stefan = Hof 1 Tisch 33 Nummer 4
38 Berger Svenja = Hof 1 Tisch 33 Nummer 3
39 Bianchi Jan Dr. = Hof 1 Tisch 1 Nummer 4
40 Bianchi Mia = Hof 1 Tisch 21 Nummer 2
41 Bianchi Sandra = Hof 1 Tisch 21 Nummer 3
42 Bianchi Thomas = Hof 1 Tisch 21 Nummer 4
43 Bianchi Thomas = Hof 2 Tisch 67 Nummer 5
44 Braun Christian = Hof 1 Tisch 37 Nummer 2
45 Braun Dragana = Hof 1 Tisch 36 Nummer 5
46 Braun Jan = Hof 1 Tisch 36 Nummer 2
47 Braun Julia = Hof 1 Tisch 37 Nummer 3
48 Braun Milan = Hof 1 Tisch 37 Nummer 5
49 Braun Nadine = Hof 1 Tisch 37 Nummer 4
50 Busch Emre = Hof 1 Tisch 28 Nummer 2
51 Busch Marie = Hof 1 Tisch 28 Nummer 5
52 Busch Michael = Hof 1 Tisch 28 Nummer 4
53 Busch Olga = Hof 1 Tisch 28 Nummer 3
54 Busch Patrick = Hof 2 Tisch 49 Nummer 2
55 Celik Elif = Hof 1 Tisch 19 Nummer 5
56 Celik Patrick = Hof 1 Tisch 19 Nummer 4
57 Dallmann Charlotte = Hof 1 Tisch 7 Nummer 5
58 Dallmann Heinrich = Hof 1 Tisch 7 Nummer 4
59 Dallmann Margarete = Hof 1 Tisch 7 Nummer 3
60 Dallmann Maximilian = Hof 1 Tisch 7 Nummer 2
61 Demir Sandra Dr. = Hof 1 Tisch 19 Nummer 2
62 Dietrich Dragana Prof. Dr. = Hof 2 Tisch 59 Nummer 5
63 Dietrich Jennifer = Hof 2 Tisch 78 Nummer 2
64 Dietrich Marco = Hof 2 Tisch 78 Nummer 3
65 Dietrich Sofia = Hof 2 Tisch 78 Nummer 4
66 Engel Anja = Hof 1 Tisch 10 Nummer 4
67 Engel Anton = Hof 1 Tisch 11 Nummer 4
68 Engel Julia = Hof 1 Tisch 11 Nummer 2
69 Engel Nicole = Hof 1 Tisch 11 Nummer 3
70 Engel Yusuf = Hof 1 Tisch 10 Nummer 2
71 Esposito Jan Dr. = Hof 1 Tisch 12 Nummer 3
72 Esposito Yusuf Prof. Dr. = Hof 1 Tisch 26 Nummer 3
73 Frank Dennis = Hof 1 Tisch 10 Nummer 5
74 Frank Finn = Hof 1 Tisch 9 Nummer 4
75 Frank Lena = Hof 1 Tisch 9 Nummer 3
76 Frank Marie = Hof 1 Tisch 10 Nummer 3
77 Frank Nadine = Hof 1 Tisch 9 Nummer 2
78 Franke Amira = Hof 2 Tisch 73 Nummer 3
79 Franke Julia = Hof 2 Tisch 81 Nummer 2
80 Franke Marco = Hof 2 Tisch 81 Nummer 3
81 Franke Michael = Hof 2 Tisch 73 Nummer 2
82 Franke Olga = Hof 2 Tisch 81 Nummer 4
83 Freifrau von Waldeck Antonia = Hof 1 Tisch 6 Nummer 4
84 Freiherr von Waldeck Konstantin Dr. = Hof 1 Tisch 6 Nummer 2
85 Grothe Alexander Dr. h.c. = Hof 1 Tisch 5 Nummer 5
86 Grothe Beate = Hof 1 Tisch 5 Nummer 2
87 Haas Jennifer Dr. = Hof 1 Tisch 45 Nummer 4
88 Haas Patrick = Hof 1 Tisch 42 Nummer 4
89 Hansen Giovanna = Hof 1 Tisch 30 Nummer 4
90 Hansen Markus = Hof 1 Tisch 30 Nummer 3
91 Hansen Nicole Dr. = Hof 1 Tisch 42 Nummer 3
92 Hansen Olga = Hof 1 Tisch 30 Nummer 2
93 Hansen Thomas = Hof 1 Tisch 12 Nummer 5
94 Hartmann Deniz = Hof 2 Tisch 85 Nummer 4
95 Hartmann Marija = Hof 2 Tisch 86 Nummer 3
96 Hartmann Nadine = Hof 2 Tisch 86 Nummer 2
97 Hartmann Olga = Hof 2 Tisch 85 Nummer 3
98 Hartmann Thomas = Hof 2 Tisch 85 Nummer 2
99 Hoffmann Emre = Hof 2 Tisch 49 Nummer 3
100 Hoffmann Patrick Prof. Dr. = Hof 1 Tisch 40 Nummer 5
101 Hoffmann Thomas Dr. = Hof 1 Tisch 32 Nummer 4
102 Horn Kathrin = Hof 2 Tisch 84 Nummer 4
103 Horn Layla = Hof 2 Tisch 84 Nummer 3
104 Horn Leon = Hof 2 Tisch 84 Nummer 5
105 Horn Michael = Hof 2 Tisch 84 Nummer 2
106 Kaya Christina = Hof 1 Tisch 43 Nummer 4
107 Kaya Luca = Hof 1 Tisch 43 Nummer 3
108 Kaya Nicole = Hof 1 Tisch 43 Nummer 2
109 Kaya Patrick Dr. = Hof 1 Tisch 1 Nummer 2
110 Kaya Timo Prof. Dr. = Hof 1 Tisch 19 Nummer 3
111 Kessler Ferdinand Dr. = Hof 1 Tisch 5 Nummer 4
112 Kessler Viktoria = Hof 1 Tisch 5 Nummer 3
113 Klein Emre = Hof 1 Tisch 2 Nummer 4
114 Klein Lina = Hof 2 Tisch 63 Nummer 4
115 Klein Markus = Hof 1 Tisch 38 Nummer 4
116 Klein Milan = Hof 2 Tisch 63 Nummer 2
117 Klein Olga Dr. = Hof 2 Tisch 57 Nummer 2
118 Klein Stefanie = Hof 2 Tisch 63 Nummer 3
119 Koch Emil = Hof 2 Tisch 48 Nummer 2
120 Koch Jan = Hof 2 Tisch 48 Nummer 5
121 Koch Kathrin Dr. = Hof 2 Tisch 68 Nummer 3
122 Koch Marie = Hof 2 Tisch 48 Nummer 3
123 Koch Michael = Hof 2 Tisch 49 Nummer 4
124 Koch Olga = Hof 2 Tisch 48 Nummer 4
125 Koch Sarah = Hof 2 Tisch 49 Nummer 5
126 Kovac Anja = Hof 1 Tisch 15 Nummer 3
127 Kovac Henry = Hof 1 Tisch 15 Nummer 2
128 Kovac Lena = Hof 1 Tisch 15 Nummer 4
129 Kovac Luca = Hof 2 Tisch 71 Nummer 2
130 Kovac Marco = Hof 1 Tisch 15 Nummer 5
131 Kovac Marija = Hof 1 Tisch 24 Nummer 4
132 Kovac Matthias = Hof 1 Tisch 26 Nummer 4
133 Kovac Tobias = Hof 1 Tisch 24 Nummer 3
134 Kraus Markus = Hof 1 Tisch 3 Nummer 5
135 Kraus Patrick Dr. = Hof 2 Tisch 57 Nummer 5
136 Krause Andreas = Hof 2 Tisch 74 Nummer 5
137 Krause Arda = Hof 2 Tisch 74 Nummer 4
138 Krause Christina Dr. = Hof 1 Tisch 1 Nummer 3
139 Krause Daniel = Hof 1 Tisch 38 Nummer 3
140 Krause Dragana Dr. = Hof 2 Tisch 71 Nummer 3
141 Krause Emma = Hof 2 Tisch 74 Nummer 2
142 Krause Julia = Hof 2 Tisch 74 Nummer 3
143 Krause Matthias = Hof 2 Tisch 58 Nummer 4
144 Krause Thomas = Hof 1 Tisch 41 Nummer 2
145 Kuhn Julia Dr. = Hof 2 Tisch 68 Nummer 4
146 Lange Dragana = Hof 2 Tisch 72 Nummer 2
147 Lange Jan = Hof 2 Tisch 73 Nummer 5
148 Lange Michael = Hof 2 Tisch 72 Nummer 3
149 Lange Sergej = Hof 2 Tisch 59 Nummer 3
150 Lange Sofia = Hof 2 Tisch 72 Nummer 4
151 Lange Svenja = Hof 2 Tisch 73 Nummer 4
152 Lehmann Giovanna = Hof 1 Tisch 16 Nummer 2
153 Lehmann Layla = Hof 1 Tisch 16 Nummer 5
154 Lehmann Markus = Hof 1 Tisch 16 Nummer 4
155 Lehmann Milan = Hof 1 Tisch 16 Nummer 3
156 Lehmann Nicole = Hof 1 Tisch 17 Nummer 3
157 Lehmann Patrick = Hof 2 Tisch 77 Nummer 4
158 Lehmann Thomas = Hof 1 Tisch 17 Nummer 4
159 Ludwig Aylin Dr. = Hof 2 Tisch 57 Nummer 4
160 Ludwig Elias = Hof 2 Tisch 56 Nummer 3
161 Ludwig Elif = Hof 2 Tisch 56 Nummer 4
162 Ludwig Emre = Hof 2 Tisch 56 Nummer 2
163 Ludwig Emre Prof. Dr. = Hof 1 Tisch 38 Nummer 2
164 Ludwig Giovanna = Hof 2 Tisch 56 Nummer 5
165 Maier Arda = Hof 2 Tisch 60 Nummer 2
166 Maier Christian = Hof 2 Tisch 60 Nummer 4
167 Maier Olga = Hof 2 Tisch 60 Nummer 3
168 Maier Sarah = Hof 2 Tisch 60 Nummer 5
169 Neumann Jennifer = Hof 2 Tisch 83 Nummer 4
170 Neumann Lina = Hof 2 Tisch 83 Nummer 3
171 Neumann Matteo = Hof 2 Tisch 83 Nummer 2
172 Neumann Thomas = Hof 2 Tisch 83 Nummer 5
173 Nguyen Anja = Hof 2 Tisch 51 Nummer 3
174 Nguyen Daniel = Hof 2 Tisch 51 Nummer 4
175 Nguyen Julia = Hof 1 Tisch 13 Nummer 4
176 Nguyen Sofia = Hof 2 Tisch 51 Nummer 2
177 Nowak Aylin = Hof 1 Tisch 36 Nummer 3
178 Nowak Felix = Hof 1 Tisch 35 Nummer 2
179 Nowak Kathrin = Hof 1 Tisch 36 Nummer 4
180 Nowak Lina = Hof 1 Tisch 35 Nummer 4
181 Nowak Markus = Hof 1 Tisch 35 Nummer 5
182 Nowak Noah = Hof 1 Tisch 35 Nummer 3
183 Ott Daniel = Hof 2 Tisch 86 Nummer 5
184 Ott Hannah = Hof 2 Tisch 80 Nummer 3
185 Ott Luca = Hof 2 Tisch 71 Nummer 4
186 Ott Matthias = Hof 2 Tisch 80 Nummer 2
187 Ott Melanie = Hof 2 Tisch 80 Nummer 4
188 Ott Olga = Hof 2 Tisch 86 Nummer 4
189 Ott Sergej Prof. Dr. = Hof 1 Tisch 42 Nummer 5
190 Ott Yusuf Prof. Dr. = Hof 2 Tisch 77 Nummer 3
191 Peters Christian = Hof 1 Tisch 3 Nummer 4
192 Peters Nicole = Hof 1 Tisch 41 Nummer 3
193 Petrov Giovanna = Hof 1 Tisch 3 Nummer 3
194 Petrov Kathrin = Hof 1 Tisch 20 Nummer 4
195 Petrov Kathrin Prof. Dr. = Hof 1 Tisch 4 Nummer 2
196 Petrov Matthias = Hof 1 Tisch 45 Nummer 5
197 Petrov Milan = Hof 1 Tisch 20 Nummer 5
198 Petrov Sergej = Hof 2 Tisch 54 Nummer 3
199 Pohl Dragana = Hof 2 Tisch 75 Nummer 4
200 Pohl Emre = Hof 2 Tisch 75 Nummer 5
201 Pohl Mia = Hof 2 Tisch 75 Nummer 2
202 Pohl Theo = Hof 2 Tisch 75 Nummer 3
203 Polat Kathrin = Hof 2 Tisch 54 Nummer 2
204 Polat Katrin = Hof 2 Tisch 88 Nummer 3
205 Polat Marija = Hof 1 Tisch 40 Nummer 2
206 Polat Markus = Hof 2 Tisch 88 Nummer 2
207 Polat Sarah = Hof 2 Tisch 53 Nummer 2
208 Polat Stefan = Hof 2 Tisch 53 Nummer 3
209 Polat Stefanie = Hof 2 Tisch 88 Nummer 4
210 Popescu Matthias = Hof 1 Tisch 18 Nummer 5
211 Richter Anja = Hof 1 Tisch 31 Nummer 5
212 Richter Anja Prof. Dr. = Hof 2 Tisch 65 Nummer 3
213 Richter Anton = Hof 1 Tisch 31 Nummer 4
214 Richter Greta = Hof 1 Tisch 31 Nummer 3
215 Richter Julia Prof. Dr. = Hof 1 Tisch 45 Nummer 3
216 Richter Marco = Hof 1 Tisch 40 Nummer 3
217 Richter Matthias = Hof 1 Tisch 31 Nummer 2
218 Richter Stefan = Hof 2 Tisch 62 Nummer 3
219 Rossi Emilia = Hof 1 Tisch 29 Nummer 4
220 Rossi Luca = Hof 1 Tisch 29 Nummer 3
221 Rossi Melanie = Hof 1 Tisch 29 Nummer 2
222 Roth Christian = Hof 2 Tisch 64 Nummer 3
223 Roth Julia Prof. Dr. = Hof 1 Tisch 13 Nummer 3
224 Roth Olga = Hof 2 Tisch 67 Nummer 3
225 Roth Sarah = Hof 2 Tisch 64 Nummer 2
226 Roth Sofia = Hof 2 Tisch 64 Nummer 4
227 Sahin Kathrin = Hof 2 Tisch 55 Nummer 2
228 Sahin Markus = Hof 2 Tisch 55 Nummer 4
229 Sahin Nicole = Hof 2 Tisch 55 Nummer 5
230 Sahin Patrick = Hof 2 Tisch 55 Nummer 3
231 Sahin Thomas = Hof 2 Tisch 65 Nummer 2
232 Schmidt Giovanna = Hof 1 Tisch 44 Nummer 3
233 Schmidt Marie = Hof 1 Tisch 44 Nummer 2
234 Schmidt Matthias = Hof 1 Tisch 44 Nummer 5
235 Schmidt Nicole = Hof 1 Tisch 12 Nummer 4
236 Schmitt Dennis Prof. Dr. = Hof 2 Tisch 62 Nummer 4
237 Schmitt Markus = Hof 1 Tisch 22 Nummer 5
238 Schmitt Markus = Hof 1 Tisch 4 Nummer 3
239 Schmitt Sarah = Hof 1 Tisch 22 Nummer 4
240 Schmitt Sofia = Hof 1 Tisch 22 Nummer 2
241 Schmitt Stefan Prof. Dr. = Hof 2 Tisch 69 Nummer 4
242 Schwarz Giovanna = Hof 2 Tisch 58 Nummer 3
243 Seidel Anja Dr. = Hof 1 Tisch 32 Nummer 5
244 Seidel Markus Dr. = Hof 1 Tisch 3 Nummer 2
245 Seidel Yusuf Prof. Dr. = Hof 1 Tisch 2 Nummer 5
246 Seifert Elif = Hof 1 Tisch 23 Nummer 4
247 Seifert Leni = Hof 1 Tisch 23 Nummer 3
248 Seifert Marco Prof. Dr. = Hof 2 Tisch 57 Nummer 3
249 Seifert Nicole = Hof 1 Tisch 22 Nummer 3
250 Seifert Stefanie Dr. = Hof 1 Tisch 13 Nummer 2
251 Seifert Timo = Hof 1 Tisch 23 Nummer 5
252 Seifert Yusuf = Hof 1 Tisch 23 Nummer 2
253 Simon Andreas = Hof 2 Tisch 61 Nummer 2
254 Simon Emma = Hof 2 Tisch 61 Nummer 4
255 Simon Lena = Hof 2 Tisch 61 Nummer 5
256 Simon Markus = Hof 2 Tisch 61 Nummer 3
257 Simon Svenja = Hof 1 Tisch 18 Nummer 2
258 Stein Ben = Hof 2 Tisch 76 Nummer 5
259 Stein Emilia = Hof 2 Tisch 76 Nummer 4
260 Stein Giovanna = Hof 2 Tisch 76 Nummer 2
261 Stein Markus Prof. Dr. = Hof 1 Tisch 18 Nummer 4
262 Stein Nadine Dr. = Hof 1 Tisch 4 Nummer 4
263 Stein Thomas = Hof 2 Tisch 76 Nummer 3
264 Steinbach Elisabeth = Hof 1 Tisch 6 Nummer 3
265 Steinbach Georg = Hof 1 Tisch 6 Nummer 5
266 Thiel Christina = Hof 2 Tisch 82 Nummer 2
267 Thiel Jan Dr. = Hof 2 Tisch 65 Nummer 4
268 Thiel Julia = Hof 2 Tisch 82 Nummer 3
269 Thiel Yusuf = Hof 2 Tisch 82 Nummer 4
270 Tran Marija = Hof 2 Tisch 69 Nummer 2
271 Tran Olga = Hof 1 Tisch 32 Nummer 2
272 Tran Thomas Prof. Dr. = Hof 2 Tisch 54 Nummer 4
273 Wagner Henry = Hof 2 Tisch 46 Nummer 3
274 Wagner Marco = Hof 2 Tisch 46 Nummer 5
275 Wagner Nicole = Hof 2 Tisch 46 Nummer 4
276 Wagner Sarah = Hof 2 Tisch 46 Nummer 2
277 Weber Andreas = Hof 1 Tisch 44 Nummer 4
278 Weber Julia = Hof 1 Tisch 2 Nummer 2
279 Weber Katrin = Hof 2 Tisch 68 Nummer 2
280 Weber Yusuf = Hof 2 Tisch 58 Nummer 2
281 Werner Andreas = Hof 1 Tisch 39 Nummer 4
282 Werner Dennis Prof. Dr. = Hof 1 Tisch 32 Nummer 3
283 Werner Katrin = Hof 2 Tisch 59 Nummer 2
284 Werner Luca = Hof 2 Tisch 69 Nummer 3
285 Werner Marco = Hof 1 Tisch 39 Nummer 3
286 Werner Nadine = Hof 1 Tisch 39 Nummer 5
287 Werner Sandra = Hof 1 Tisch 39 Nummer 2
288 Winkler Lena = Hof 1 Tisch 20 Nummer 2
289 Winkler Marco = Hof 1 Tisch 1 Nummer 5
290 Winkler Patrick = Hof 1 Tisch 20 Nummer 3
291 Winkler Thomas = Hof 1 Tisch 12 Nummer 2
292 Wolf Ben = Hof 2 Tisch 79 Nummer 5
293 Wolf Emma = Hof 2 Tisch 79 Nummer 4
294 Wolf Julia = Hof 2 Tisch 79 Nummer 3
295 Wolf Thomas = Hof 2 Tisch 79 Nummer 2
296 Zimmermann Jan = Hof 2 Tisch 70 Nummer 2
297 Zimmermann Markus = Hof 2 Tisch 70 Nummer 3
298 Zimmermann Mia = Hof 2 Tisch 70 Nummer 4
299 Zimmermann Patrick = Hof 2 Tisch 62 Nummer 2
300 Zimmermann Svenja = Hof 2 Tisch 70 Nummer 5
+480
View File
@@ -0,0 +1,480 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="2476.05" height="466.676" viewBox="0 0 2476.05 466.676">
<rect width="100%" height="100%" fill="white"/>
<circle cx="690.014" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="690.014" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 8</text>
<circle cx="598.679" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="598.679" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 27</text>
<circle cx="461.676" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="461.676" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 34</text>
<circle cx="1603.37" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1603.37" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 47</text>
<circle cx="2060.04" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2060.04" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 87</text>
<circle cx="416.009" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="416.009" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 41</text>
<circle cx="416.009" cy="397.341" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="416.009" cy="434.676" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="324.673" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="324.673" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 4</text>
<circle cx="324.673" cy="32" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="340.84" cy="60.0014" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="308.507" cy="60.0014" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="781.35" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="781.35" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 9</text>
<circle cx="781.35" cy="32" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="797.516" cy="60.0014" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="765.183" cy="60.0014" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="964.02" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="964.02" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 11</text>
<circle cx="964.02" cy="32" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="980.187" cy="60.0014" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="947.853" cy="60.0014" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="187.67" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="187.67" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 13</text>
<circle cx="187.67" cy="123.335" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="203.837" cy="151.337" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="171.504" cy="151.337" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="918.352" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="918.352" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 21</text>
<circle cx="918.352" cy="123.335" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="934.519" cy="151.337" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="902.186" cy="151.337" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="416.009" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="416.009" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 25</text>
<circle cx="416.009" cy="214.67" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="432.175" cy="242.672" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="399.842" cy="242.672" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="507.344" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="507.344" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 26</text>
<circle cx="507.344" cy="214.67" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="523.51" cy="242.672" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="491.177" cy="242.672" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="781.35" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="781.35" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 29</text>
<circle cx="781.35" cy="214.67" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="797.516" cy="242.672" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="765.183" cy="242.672" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="872.685" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="872.685" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 30</text>
<circle cx="872.685" cy="214.67" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="888.851" cy="242.672" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="856.518" cy="242.672" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="370.341" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="370.341" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 33</text>
<circle cx="370.341" cy="306.006" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="386.508" cy="334.007" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="354.174" cy="334.007" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="598.679" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="598.679" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 43</text>
<circle cx="598.679" cy="397.341" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="614.846" cy="425.342" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="582.512" cy="425.342" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="1877.37" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1877.37" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 50</text>
<circle cx="1877.37" cy="32" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1893.54" cy="60.0014" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1861.21" cy="60.0014" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1968.71" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1968.71" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 51</text>
<circle cx="1968.71" cy="32" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="1984.87" cy="60.0014" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="1952.54" cy="60.0014" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2060.04" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2060.04" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 52</text>
<circle cx="2060.04" cy="32" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="2076.21" cy="60.0014" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="2043.88" cy="60.0014" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="1649.03" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1649.03" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 58</text>
<circle cx="1649.03" cy="123.335" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1665.2" cy="151.337" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1632.87" cy="151.337" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="2014.38" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2014.38" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 62</text>
<circle cx="2014.38" cy="123.335" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="2030.54" cy="151.337" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="1998.21" cy="151.337" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="2105.71" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2105.71" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 63</text>
<circle cx="2105.71" cy="123.335" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="2121.88" cy="151.337" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="2089.54" cy="151.337" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="2197.05" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2197.05" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 64</text>
<circle cx="2197.05" cy="123.335" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="2213.21" cy="151.337" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="2180.88" cy="151.337" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="2288.38" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2288.38" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 65</text>
<circle cx="2288.38" cy="123.335" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="2304.55" cy="151.337" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="2272.21" cy="151.337" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="1694.7" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1694.7" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 68</text>
<circle cx="1694.7" cy="214.67" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1710.87" cy="242.672" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1678.54" cy="242.672" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1786.04" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1786.04" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 69</text>
<circle cx="1786.04" cy="214.67" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1802.2" cy="242.672" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1769.87" cy="242.672" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1968.71" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1968.71" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 71</text>
<circle cx="1968.71" cy="214.67" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="1984.87" cy="242.672" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="1952.54" cy="242.672" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="2060.04" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2060.04" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 72</text>
<circle cx="2060.04" cy="214.67" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="2076.21" cy="242.672" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="2043.88" cy="242.672" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="1740.37" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1740.37" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 77</text>
<circle cx="1740.37" cy="306.006" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1756.54" cy="334.007" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1724.2" cy="334.007" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1831.7" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1831.7" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 78</text>
<circle cx="1831.7" cy="306.006" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1847.87" cy="334.007" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1815.54" cy="334.007" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="2014.38" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2014.38" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 80</text>
<circle cx="2014.38" cy="306.006" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="2030.54" cy="334.007" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1998.21" cy="334.007" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="2105.71" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2105.71" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 81</text>
<circle cx="2105.71" cy="306.006" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="2121.88" cy="334.007" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="2089.54" cy="334.007" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="2197.05" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2197.05" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 82</text>
<circle cx="2197.05" cy="306.006" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="2213.21" cy="334.007" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="2180.88" cy="334.007" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="1877.37" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1877.37" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 85</text>
<circle cx="1877.37" cy="397.341" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1893.54" cy="425.342" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1861.21" cy="425.342" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="2151.38" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2151.38" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 88</text>
<circle cx="2151.38" cy="397.341" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2167.54" cy="425.342" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2135.21" cy="425.342" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="50.6676" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="50.6676" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 1</text>
<circle cx="50.6676" cy="32" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="69.3352" cy="50.6676" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="50.6676" cy="69.3352" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="32" cy="50.6676" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="142.003" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="142.003" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 2</text>
<circle cx="142.003" cy="32" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="160.67" cy="50.6676" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="142.003" cy="69.3352" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="123.335" cy="50.6676" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="233.338" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="233.338" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 3</text>
<circle cx="233.338" cy="32" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="252.006" cy="50.6676" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="233.338" cy="69.3352" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="214.67" cy="50.6676" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="416.009" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="416.009" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 5</text>
<circle cx="416.009" cy="32" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="434.676" cy="50.6676" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="416.009" cy="69.3352" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="397.341" cy="50.6676" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="507.344" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="507.344" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 6</text>
<circle cx="507.344" cy="32" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="526.011" cy="50.6676" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="507.344" cy="69.3352" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="488.676" cy="50.6676" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="598.679" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="598.679" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 7</text>
<circle cx="598.679" cy="32" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="617.347" cy="50.6676" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="598.679" cy="69.3352" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="580.011" cy="50.6676" r="12" fill="#888888" stroke="black" stroke-width="1"/>
<circle cx="872.685" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="872.685" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 10</text>
<circle cx="872.685" cy="32" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="891.352" cy="50.6676" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="872.685" cy="69.3352" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="854.017" cy="50.6676" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="96.3352" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="96.3352" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 12</text>
<circle cx="96.3352" cy="123.335" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="115.003" cy="142.003" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="96.3352" cy="160.67" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="77.6676" cy="142.003" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="279.006" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="279.006" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 14</text>
<circle cx="279.006" cy="123.335" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="297.673" cy="142.003" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="279.006" cy="160.67" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="260.338" cy="142.003" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="370.341" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="370.341" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 15</text>
<circle cx="370.341" cy="123.335" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="389.009" cy="142.003" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="370.341" cy="160.67" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="351.673" cy="142.003" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="461.676" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="461.676" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 16</text>
<circle cx="461.676" cy="123.335" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="480.344" cy="142.003" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="461.676" cy="160.67" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="443.009" cy="142.003" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="553.011" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="553.011" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 17</text>
<circle cx="553.011" cy="123.335" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="571.679" cy="142.003" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="553.011" cy="160.67" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="534.344" cy="142.003" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="644.347" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="644.347" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 18</text>
<circle cx="644.347" cy="123.335" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="663.014" cy="142.003" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="644.347" cy="160.67" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="625.679" cy="142.003" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="735.682" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="735.682" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 19</text>
<circle cx="735.682" cy="123.335" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="754.35" cy="142.003" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="735.682" cy="160.67" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="717.014" cy="142.003" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="827.017" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="827.017" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 20</text>
<circle cx="827.017" cy="123.335" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="845.685" cy="142.003" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="827.017" cy="160.67" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="808.35" cy="142.003" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="142.003" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="142.003" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 22</text>
<circle cx="142.003" cy="214.67" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="160.67" cy="233.338" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="142.003" cy="252.006" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="123.335" cy="233.338" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="233.338" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="233.338" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 23</text>
<circle cx="233.338" cy="214.67" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="252.006" cy="233.338" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="233.338" cy="252.006" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="214.67" cy="233.338" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="324.673" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="324.673" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 24</text>
<circle cx="324.673" cy="214.67" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="343.341" cy="233.338" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="324.673" cy="252.006" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="306.006" cy="233.338" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="690.014" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="690.014" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 28</text>
<circle cx="690.014" cy="214.67" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="708.682" cy="233.338" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="690.014" cy="252.006" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="671.347" cy="233.338" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="187.67" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="187.67" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 31</text>
<circle cx="187.67" cy="306.006" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="206.338" cy="324.673" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="187.67" cy="343.341" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="169.003" cy="324.673" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="279.006" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="279.006" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 32</text>
<circle cx="279.006" cy="306.006" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="297.673" cy="324.673" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="279.006" cy="343.341" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="260.338" cy="324.673" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="553.011" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="553.011" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 35</text>
<circle cx="553.011" cy="306.006" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="571.679" cy="324.673" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="553.011" cy="343.341" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="534.344" cy="324.673" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="644.347" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="644.347" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 36</text>
<circle cx="644.347" cy="306.006" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="663.014" cy="324.673" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="644.347" cy="343.341" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="625.679" cy="324.673" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="735.682" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="735.682" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 37</text>
<circle cx="735.682" cy="306.006" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="754.35" cy="324.673" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="735.682" cy="343.341" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="717.014" cy="324.673" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="827.017" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="827.017" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 38</text>
<circle cx="827.017" cy="306.006" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="845.685" cy="324.673" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="827.017" cy="343.341" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="808.35" cy="324.673" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="233.338" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="233.338" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 39</text>
<circle cx="233.338" cy="397.341" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="252.006" cy="416.009" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="233.338" cy="434.676" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="214.67" cy="416.009" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="324.673" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="324.673" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 40</text>
<circle cx="324.673" cy="397.341" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="343.341" cy="416.009" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="324.673" cy="434.676" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="306.006" cy="416.009" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="507.344" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="507.344" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 42</text>
<circle cx="507.344" cy="397.341" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="526.011" cy="416.009" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="507.344" cy="434.676" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="488.676" cy="416.009" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="690.014" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="690.014" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 44</text>
<circle cx="690.014" cy="397.341" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="708.682" cy="416.009" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="690.014" cy="434.676" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="671.347" cy="416.009" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="781.35" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="781.35" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 45</text>
<circle cx="781.35" cy="397.341" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="800.017" cy="416.009" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="781.35" cy="434.676" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="762.682" cy="416.009" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1512.03" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1512.03" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 46</text>
<circle cx="1512.03" cy="32" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1530.7" cy="50.6676" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1512.03" cy="69.3352" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1493.36" cy="50.6676" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1694.7" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1694.7" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 48</text>
<circle cx="1694.7" cy="32" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1713.37" cy="50.6676" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1694.7" cy="69.3352" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1676.03" cy="50.6676" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1786.04" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1786.04" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 49</text>
<circle cx="1786.04" cy="32" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="1804.7" cy="50.6676" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="1786.04" cy="69.3352" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1767.37" cy="50.6676" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="2151.38" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2151.38" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 53</text>
<circle cx="2151.38" cy="32" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2170.05" cy="50.6676" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2151.38" cy="69.3352" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="2132.71" cy="50.6676" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="2242.71" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2242.71" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 54</text>
<circle cx="2242.71" cy="32" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="2261.38" cy="50.6676" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="2242.71" cy="69.3352" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="2224.05" cy="50.6676" r="12" fill="#dcbeff" stroke="black" stroke-width="1"/>
<circle cx="2334.05" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2334.05" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 55</text>
<circle cx="2334.05" cy="32" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="2352.72" cy="50.6676" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="2334.05" cy="69.3352" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="2315.38" cy="50.6676" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="2425.38" cy="50.6676" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2425.38" y="8" text-anchor="middle" font-size="10" fill="black">Tisch 56</text>
<circle cx="2425.38" cy="32" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2444.05" cy="50.6676" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2425.38" cy="69.3352" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="2406.72" cy="50.6676" r="12" fill="#800000" stroke="black" stroke-width="1"/>
<circle cx="1557.7" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1557.7" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 57</text>
<circle cx="1557.7" cy="123.335" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="1576.37" cy="142.003" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1557.7" cy="160.67" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1539.03" cy="142.003" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1740.37" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1740.37" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 59</text>
<circle cx="1740.37" cy="123.335" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="1759.04" cy="142.003" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="1740.37" cy="160.67" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="1721.7" cy="142.003" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="1831.7" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1831.7" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 60</text>
<circle cx="1831.7" cy="123.335" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1850.37" cy="142.003" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1831.7" cy="160.67" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1813.04" cy="142.003" r="12" fill="#000075" stroke="black" stroke-width="1"/>
<circle cx="1923.04" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1923.04" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 61</text>
<circle cx="1923.04" cy="123.335" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="1941.71" cy="142.003" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="1923.04" cy="160.67" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="1904.37" cy="142.003" r="12" fill="#e6194b" stroke="black" stroke-width="1"/>
<circle cx="2379.72" cy="142.003" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2379.72" y="99.3352" text-anchor="middle" font-size="10" fill="black">Tisch 66</text>
<circle cx="2379.72" cy="123.335" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="2398.38" cy="142.003" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="2379.72" cy="160.67" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="2361.05" cy="142.003" r="12" fill="#3cb44b" stroke="black" stroke-width="1"/>
<circle cx="1603.37" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1603.37" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 67</text>
<circle cx="1603.37" cy="214.67" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="1622.03" cy="233.338" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="1603.37" cy="252.006" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="1584.7" cy="233.338" r="12" fill="#aaffc3" stroke="black" stroke-width="1"/>
<circle cx="1877.37" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1877.37" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 70</text>
<circle cx="1877.37" cy="214.67" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="1896.04" cy="233.338" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="1877.37" cy="252.006" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="1858.7" cy="233.338" r="12" fill="#4363d8" stroke="black" stroke-width="1"/>
<circle cx="2151.38" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2151.38" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 73</text>
<circle cx="2151.38" cy="214.67" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="2170.05" cy="233.338" r="12" fill="#469990" stroke="black" stroke-width="1"/>
<circle cx="2151.38" cy="252.006" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="2132.71" cy="233.338" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="2242.71" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2242.71" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 74</text>
<circle cx="2242.71" cy="214.67" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="2261.38" cy="233.338" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="2242.71" cy="252.006" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="2224.05" cy="233.338" r="12" fill="#f58231" stroke="black" stroke-width="1"/>
<circle cx="2334.05" cy="233.338" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2334.05" y="190.67" text-anchor="middle" font-size="10" fill="black">Tisch 75</text>
<circle cx="2334.05" cy="214.67" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="2352.72" cy="233.338" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="2334.05" cy="252.006" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="2315.38" cy="233.338" r="12" fill="#911eb4" stroke="black" stroke-width="1"/>
<circle cx="1649.03" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1649.03" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 76</text>
<circle cx="1649.03" cy="306.006" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="1667.7" cy="324.673" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="1649.03" cy="343.341" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="1630.37" cy="324.673" r="12" fill="#42d4f4" stroke="black" stroke-width="1"/>
<circle cx="1923.04" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1923.04" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 79</text>
<circle cx="1923.04" cy="306.006" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1941.71" cy="324.673" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1923.04" cy="343.341" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="1904.37" cy="324.673" r="12" fill="#f032e6" stroke="black" stroke-width="1"/>
<circle cx="2288.38" cy="324.673" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="2288.38" y="282.006" text-anchor="middle" font-size="10" fill="black">Tisch 83</text>
<circle cx="2288.38" cy="306.006" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="2307.05" cy="324.673" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="2288.38" cy="343.341" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="2269.71" cy="324.673" r="12" fill="#bfef45" stroke="black" stroke-width="1"/>
<circle cx="1786.04" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1786.04" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 84</text>
<circle cx="1786.04" cy="397.341" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1804.7" cy="416.009" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1786.04" cy="434.676" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1767.37" cy="416.009" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1968.71" cy="416.009" r="40.6676" fill="white" stroke="black" stroke-width="1.5"/>
<text x="1968.71" y="373.341" text-anchor="middle" font-size="10" fill="black">Tisch 86</text>
<circle cx="1968.71" cy="397.341" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1987.38" cy="416.009" r="12" fill="#9a6324" stroke="black" stroke-width="1"/>
<circle cx="1968.71" cy="434.676" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
<circle cx="1950.04" cy="416.009" r="12" fill="#fabed4" stroke="black" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 42 KiB

+476
View File
@@ -0,0 +1,476 @@
[1]
Dr. Patrick Kaya = Hof 1, Tisch 1, Nummer 1
Dr. Christina Krause = Hof 1, Tisch 1, Nummer 2
Dr. Jan Bianchi = Hof 1, Tisch 1, Nummer 3
Marco Winkler = Hof 1, Tisch 1, Nummer 4
[2]
Julia Weber = Hof 1, Tisch 2, Nummer 1
Yusuf Bauer = Hof 1, Tisch 2, Nummer 2
Emre Klein = Hof 1, Tisch 2, Nummer 3
Prof. Dr. Yusuf Seidel = Hof 1, Tisch 2, Nummer 4
[3]
Dr. Markus Seidel = Hof 1, Tisch 3, Nummer 1
Giovanna Petrov = Hof 1, Tisch 3, Nummer 2
Christian Peters = Hof 1, Tisch 3, Nummer 3
Markus Kraus = Hof 1, Tisch 3, Nummer 4
[4]
Prof. Dr. Kathrin Petrov = Hof 1, Tisch 4, Nummer 1
Markus Schmitt = Hof 1, Tisch 4, Nummer 2
Dr. Nadine Stein = Hof 1, Tisch 4, Nummer 3
[5]
Beate Grothe = Hof 1, Tisch 5, Nummer 1
Viktoria Kessler = Hof 1, Tisch 5, Nummer 2
Dr. Ferdinand Kessler = Hof 1, Tisch 5, Nummer 3
Dr. h.c. Alexander Grothe = Hof 1, Tisch 5, Nummer 4
[6]
Dr. Konstantin Freiherr von Waldeck = Hof 1, Tisch 6, Nummer 1
Elisabeth Steinbach = Hof 1, Tisch 6, Nummer 2
Antonia Freifrau von Waldeck = Hof 1, Tisch 6, Nummer 3
Georg Steinbach = Hof 1, Tisch 6, Nummer 4
[7]
Maximilian Dallmann = Hof 1, Tisch 7, Nummer 1
Margarete Dallmann = Hof 1, Tisch 7, Nummer 2
Heinrich Dallmann = Hof 1, Tisch 7, Nummer 3
Charlotte Dallmann = Hof 1, Tisch 7, Nummer 4
[8]
[9]
Nadine Frank = Hof 1, Tisch 9, Nummer 1
Lena Frank = Hof 1, Tisch 9, Nummer 2
Finn Frank = Hof 1, Tisch 9, Nummer 3
[10]
Yusuf Engel = Hof 1, Tisch 10, Nummer 1
Marie Frank = Hof 1, Tisch 10, Nummer 2
Anja Engel = Hof 1, Tisch 10, Nummer 3
Dennis Frank = Hof 1, Tisch 10, Nummer 4
[11]
Julia Engel = Hof 1, Tisch 11, Nummer 1
Nicole Engel = Hof 1, Tisch 11, Nummer 2
Anton Engel = Hof 1, Tisch 11, Nummer 3
[12]
Thomas Winkler = Hof 1, Tisch 12, Nummer 1
Dr. Jan Esposito = Hof 1, Tisch 12, Nummer 2
Nicole Schmidt = Hof 1, Tisch 12, Nummer 3
Thomas Hansen = Hof 1, Tisch 12, Nummer 4
[13]
Dr. Stefanie Seifert = Hof 1, Tisch 13, Nummer 1
Prof. Dr. Julia Roth = Hof 1, Tisch 13, Nummer 2
Julia Nguyen = Hof 1, Tisch 13, Nummer 3
[14]
Sergej Aksoy = Hof 1, Tisch 14, Nummer 1
Luca Aksoy = Hof 1, Tisch 14, Nummer 2
Nadine Aksoy = Hof 1, Tisch 14, Nummer 3
Sofia Aksoy = Hof 1, Tisch 14, Nummer 4
[15]
Henry Kovac = Hof 1, Tisch 15, Nummer 1
Anja Kovac = Hof 1, Tisch 15, Nummer 2
Lena Kovac = Hof 1, Tisch 15, Nummer 3
Marco Kovac = Hof 1, Tisch 15, Nummer 4
[16]
Giovanna Lehmann = Hof 1, Tisch 16, Nummer 1
Milan Lehmann = Hof 1, Tisch 16, Nummer 2
Markus Lehmann = Hof 1, Tisch 16, Nummer 3
Layla Lehmann = Hof 1, Tisch 16, Nummer 4
[17]
Sarah Albrecht = Hof 1, Tisch 17, Nummer 1
Nicole Lehmann = Hof 1, Tisch 17, Nummer 2
Thomas Lehmann = Hof 1, Tisch 17, Nummer 3
Andreas Albrecht = Hof 1, Tisch 17, Nummer 4
[18]
Svenja Simon = Hof 1, Tisch 18, Nummer 1
Prof. Dr. Yusuf Albrecht = Hof 1, Tisch 18, Nummer 2
Prof. Dr. Markus Stein = Hof 1, Tisch 18, Nummer 3
Matthias Popescu = Hof 1, Tisch 18, Nummer 4
[19]
Dr. Sandra Demir = Hof 1, Tisch 19, Nummer 1
Prof. Dr. Timo Kaya = Hof 1, Tisch 19, Nummer 2
Patrick Celik = Hof 1, Tisch 19, Nummer 3
Elif Celik = Hof 1, Tisch 19, Nummer 4
[20]
Lena Winkler = Hof 1, Tisch 20, Nummer 1
Patrick Winkler = Hof 1, Tisch 20, Nummer 2
Kathrin Petrov = Hof 1, Tisch 20, Nummer 3
Milan Petrov = Hof 1, Tisch 20, Nummer 4
[21]
Mia Bianchi = Hof 1, Tisch 21, Nummer 1
Sandra Bianchi = Hof 1, Tisch 21, Nummer 2
Thomas Bianchi = Hof 1, Tisch 21, Nummer 3
[22]
Sofia Schmitt = Hof 1, Tisch 22, Nummer 1
Nicole Seifert = Hof 1, Tisch 22, Nummer 2
Sarah Schmitt = Hof 1, Tisch 22, Nummer 3
Markus Schmitt = Hof 1, Tisch 22, Nummer 4
[23]
Yusuf Seifert = Hof 1, Tisch 23, Nummer 1
Leni Seifert = Hof 1, Tisch 23, Nummer 2
Elif Seifert = Hof 1, Tisch 23, Nummer 3
Timo Seifert = Hof 1, Tisch 23, Nummer 4
[24]
Thomas Aksoy = Hof 1, Tisch 24, Nummer 1
Tobias Kovac = Hof 1, Tisch 24, Nummer 2
Marija Kovac = Hof 1, Tisch 24, Nummer 3
Marie Aksoy = Hof 1, Tisch 24, Nummer 4
[25]
Anton Berger = Hof 1, Tisch 25, Nummer 1
Jennifer Berger = Hof 1, Tisch 25, Nummer 2
Layla Berger = Hof 1, Tisch 25, Nummer 3
[26]
Marija Becker = Hof 1, Tisch 26, Nummer 1
Prof. Dr. Yusuf Esposito = Hof 1, Tisch 26, Nummer 2
Matthias Kovac = Hof 1, Tisch 26, Nummer 3
[27]
[28]
Emre Busch = Hof 1, Tisch 28, Nummer 1
Olga Busch = Hof 1, Tisch 28, Nummer 2
Michael Busch = Hof 1, Tisch 28, Nummer 3
Marie Busch = Hof 1, Tisch 28, Nummer 4
[29]
Melanie Rossi = Hof 1, Tisch 29, Nummer 1
Luca Rossi = Hof 1, Tisch 29, Nummer 2
Emilia Rossi = Hof 1, Tisch 29, Nummer 3
[30]
Olga Hansen = Hof 1, Tisch 30, Nummer 1
Markus Hansen = Hof 1, Tisch 30, Nummer 2
Giovanna Hansen = Hof 1, Tisch 30, Nummer 3
[31]
Matthias Richter = Hof 1, Tisch 31, Nummer 1
Greta Richter = Hof 1, Tisch 31, Nummer 2
Anton Richter = Hof 1, Tisch 31, Nummer 3
Anja Richter = Hof 1, Tisch 31, Nummer 4
[32]
Olga Tran = Hof 1, Tisch 32, Nummer 1
Prof. Dr. Dennis Werner = Hof 1, Tisch 32, Nummer 2
Dr. Thomas Hoffmann = Hof 1, Tisch 32, Nummer 3
Dr. Anja Seidel = Hof 1, Tisch 32, Nummer 4
[33]
Andreas Berger = Hof 1, Tisch 33, Nummer 1
Svenja Berger = Hof 1, Tisch 33, Nummer 2
Stefan Berger = Hof 1, Tisch 33, Nummer 3
[34]
[35]
Felix Nowak = Hof 1, Tisch 35, Nummer 1
Noah Nowak = Hof 1, Tisch 35, Nummer 2
Lina Nowak = Hof 1, Tisch 35, Nummer 3
Markus Nowak = Hof 1, Tisch 35, Nummer 4
[36]
Jan Braun = Hof 1, Tisch 36, Nummer 1
Aylin Nowak = Hof 1, Tisch 36, Nummer 2
Kathrin Nowak = Hof 1, Tisch 36, Nummer 3
Dragana Braun = Hof 1, Tisch 36, Nummer 4
[37]
Christian Braun = Hof 1, Tisch 37, Nummer 1
Julia Braun = Hof 1, Tisch 37, Nummer 2
Nadine Braun = Hof 1, Tisch 37, Nummer 3
Milan Braun = Hof 1, Tisch 37, Nummer 4
[38]
Prof. Dr. Emre Ludwig = Hof 1, Tisch 38, Nummer 1
Daniel Krause = Hof 1, Tisch 38, Nummer 2
Markus Klein = Hof 1, Tisch 38, Nummer 3
Nicole Aksoy = Hof 1, Tisch 38, Nummer 4
[39]
Sandra Werner = Hof 1, Tisch 39, Nummer 1
Marco Werner = Hof 1, Tisch 39, Nummer 2
Andreas Werner = Hof 1, Tisch 39, Nummer 3
Nadine Werner = Hof 1, Tisch 39, Nummer 4
[40]
Marija Polat = Hof 1, Tisch 40, Nummer 1
Marco Richter = Hof 1, Tisch 40, Nummer 2
Nadine Arnold = Hof 1, Tisch 40, Nummer 3
Prof. Dr. Patrick Hoffmann = Hof 1, Tisch 40, Nummer 4
[41]
Thomas Krause = Hof 1, Tisch 41, Nummer 1
Nicole Peters = Hof 1, Tisch 41, Nummer 2
[42]
Dragana Bauer = Hof 1, Tisch 42, Nummer 1
Dr. Nicole Hansen = Hof 1, Tisch 42, Nummer 2
Patrick Haas = Hof 1, Tisch 42, Nummer 3
Prof. Dr. Sergej Ott = Hof 1, Tisch 42, Nummer 4
[43]
Nicole Kaya = Hof 1, Tisch 43, Nummer 1
Luca Kaya = Hof 1, Tisch 43, Nummer 2
Christina Kaya = Hof 1, Tisch 43, Nummer 3
[44]
Marie Schmidt = Hof 1, Tisch 44, Nummer 1
Giovanna Schmidt = Hof 1, Tisch 44, Nummer 2
Andreas Weber = Hof 1, Tisch 44, Nummer 3
Matthias Schmidt = Hof 1, Tisch 44, Nummer 4
[45]
Markus Barth = Hof 1, Tisch 45, Nummer 1
Prof. Dr. Julia Richter = Hof 1, Tisch 45, Nummer 2
Dr. Jennifer Haas = Hof 1, Tisch 45, Nummer 3
Matthias Petrov = Hof 1, Tisch 45, Nummer 4
[46]
Sarah Wagner = Hof 2, Tisch 46, Nummer 1
Henry Wagner = Hof 2, Tisch 46, Nummer 2
Nicole Wagner = Hof 2, Tisch 46, Nummer 3
Marco Wagner = Hof 2, Tisch 46, Nummer 4
[47]
[48]
Emil Koch = Hof 2, Tisch 48, Nummer 1
Marie Koch = Hof 2, Tisch 48, Nummer 2
Olga Koch = Hof 2, Tisch 48, Nummer 3
Jan Koch = Hof 2, Tisch 48, Nummer 4
[49]
Patrick Busch = Hof 2, Tisch 49, Nummer 1
Emre Hoffmann = Hof 2, Tisch 49, Nummer 2
Michael Koch = Hof 2, Tisch 49, Nummer 3
Sarah Koch = Hof 2, Tisch 49, Nummer 4
[50]
Jan Becker = Hof 2, Tisch 50, Nummer 1
Sandra Becker = Hof 2, Tisch 50, Nummer 2
Nicole Becker = Hof 2, Tisch 50, Nummer 3
[51]
Sofia Nguyen = Hof 2, Tisch 51, Nummer 1
Anja Nguyen = Hof 2, Tisch 51, Nummer 2
Daniel Nguyen = Hof 2, Tisch 51, Nummer 3
[52]
Mila Arnold = Hof 2, Tisch 52, Nummer 1
Christian Arnold = Hof 2, Tisch 52, Nummer 2
Leni Arnold = Hof 2, Tisch 52, Nummer 3
[53]
Sarah Polat = Hof 2, Tisch 53, Nummer 1
Stefan Polat = Hof 2, Tisch 53, Nummer 2
Patrick Arnold = Hof 2, Tisch 53, Nummer 3
Jennifer Arnold = Hof 2, Tisch 53, Nummer 4
[54]
Kathrin Polat = Hof 2, Tisch 54, Nummer 1
Sergej Petrov = Hof 2, Tisch 54, Nummer 2
Prof. Dr. Thomas Tran = Hof 2, Tisch 54, Nummer 3
Marija Aksoy = Hof 2, Tisch 54, Nummer 4
[55]
Kathrin Sahin = Hof 2, Tisch 55, Nummer 1
Patrick Sahin = Hof 2, Tisch 55, Nummer 2
Markus Sahin = Hof 2, Tisch 55, Nummer 3
Nicole Sahin = Hof 2, Tisch 55, Nummer 4
[56]
Emre Ludwig = Hof 2, Tisch 56, Nummer 1
Elias Ludwig = Hof 2, Tisch 56, Nummer 2
Elif Ludwig = Hof 2, Tisch 56, Nummer 3
Giovanna Ludwig = Hof 2, Tisch 56, Nummer 4
[57]
Dr. Olga Klein = Hof 2, Tisch 57, Nummer 1
Prof. Dr. Marco Seifert = Hof 2, Tisch 57, Nummer 2
Dr. Aylin Ludwig = Hof 2, Tisch 57, Nummer 3
Dr. Patrick Kraus = Hof 2, Tisch 57, Nummer 4
[58]
Yusuf Weber = Hof 2, Tisch 58, Nummer 1
Giovanna Schwarz = Hof 2, Tisch 58, Nummer 2
Matthias Krause = Hof 2, Tisch 58, Nummer 3
[59]
Katrin Werner = Hof 2, Tisch 59, Nummer 1
Sergej Lange = Hof 2, Tisch 59, Nummer 2
Dr. Michael Aksoy = Hof 2, Tisch 59, Nummer 3
Prof. Dr. Dragana Dietrich = Hof 2, Tisch 59, Nummer 4
[60]
Arda Maier = Hof 2, Tisch 60, Nummer 1
Olga Maier = Hof 2, Tisch 60, Nummer 2
Christian Maier = Hof 2, Tisch 60, Nummer 3
Sarah Maier = Hof 2, Tisch 60, Nummer 4
[61]
Andreas Simon = Hof 2, Tisch 61, Nummer 1
Markus Simon = Hof 2, Tisch 61, Nummer 2
Emma Simon = Hof 2, Tisch 61, Nummer 3
Lena Simon = Hof 2, Tisch 61, Nummer 4
[62]
Patrick Zimmermann = Hof 2, Tisch 62, Nummer 1
Stefan Richter = Hof 2, Tisch 62, Nummer 2
Prof. Dr. Dennis Schmitt = Hof 2, Tisch 62, Nummer 3
[63]
Milan Klein = Hof 2, Tisch 63, Nummer 1
Stefanie Klein = Hof 2, Tisch 63, Nummer 2
Lina Klein = Hof 2, Tisch 63, Nummer 3
[64]
Sarah Roth = Hof 2, Tisch 64, Nummer 1
Christian Roth = Hof 2, Tisch 64, Nummer 2
Sofia Roth = Hof 2, Tisch 64, Nummer 3
[65]
Thomas Sahin = Hof 2, Tisch 65, Nummer 1
Prof. Dr. Anja Richter = Hof 2, Tisch 65, Nummer 2
Dr. Jan Thiel = Hof 2, Tisch 65, Nummer 3
[66]
Patrick Barth = Hof 2, Tisch 66, Nummer 1
Nadine Barth = Hof 2, Tisch 66, Nummer 2
Timo Barth = Hof 2, Tisch 66, Nummer 3
Lina Barth = Hof 2, Tisch 66, Nummer 4
[67]
Prof. Dr. Emre Albrecht = Hof 2, Tisch 67, Nummer 1
Olga Roth = Hof 2, Tisch 67, Nummer 2
Dr. Jennifer Arnold = Hof 2, Tisch 67, Nummer 3
Thomas Bianchi = Hof 2, Tisch 67, Nummer 4
[68]
Katrin Weber = Hof 2, Tisch 68, Nummer 1
Dr. Kathrin Koch = Hof 2, Tisch 68, Nummer 2
Dr. Julia Kuhn = Hof 2, Tisch 68, Nummer 3
[69]
Marija Tran = Hof 2, Tisch 69, Nummer 1
Luca Werner = Hof 2, Tisch 69, Nummer 2
Prof. Dr. Stefan Schmitt = Hof 2, Tisch 69, Nummer 3
[70]
Jan Zimmermann = Hof 2, Tisch 70, Nummer 1
Markus Zimmermann = Hof 2, Tisch 70, Nummer 2
Mia Zimmermann = Hof 2, Tisch 70, Nummer 3
Svenja Zimmermann = Hof 2, Tisch 70, Nummer 4
[71]
Luca Kovac = Hof 2, Tisch 71, Nummer 1
Dr. Dragana Krause = Hof 2, Tisch 71, Nummer 2
Luca Ott = Hof 2, Tisch 71, Nummer 3
[72]
Dragana Lange = Hof 2, Tisch 72, Nummer 1
Michael Lange = Hof 2, Tisch 72, Nummer 2
Sofia Lange = Hof 2, Tisch 72, Nummer 3
[73]
Michael Franke = Hof 2, Tisch 73, Nummer 1
Amira Franke = Hof 2, Tisch 73, Nummer 2
Svenja Lange = Hof 2, Tisch 73, Nummer 3
Jan Lange = Hof 2, Tisch 73, Nummer 4
[74]
Emma Krause = Hof 2, Tisch 74, Nummer 1
Julia Krause = Hof 2, Tisch 74, Nummer 2
Arda Krause = Hof 2, Tisch 74, Nummer 3
Andreas Krause = Hof 2, Tisch 74, Nummer 4
[75]
Mia Pohl = Hof 2, Tisch 75, Nummer 1
Theo Pohl = Hof 2, Tisch 75, Nummer 2
Dragana Pohl = Hof 2, Tisch 75, Nummer 3
Emre Pohl = Hof 2, Tisch 75, Nummer 4
[76]
Giovanna Stein = Hof 2, Tisch 76, Nummer 1
Thomas Stein = Hof 2, Tisch 76, Nummer 2
Emilia Stein = Hof 2, Tisch 76, Nummer 3
Ben Stein = Hof 2, Tisch 76, Nummer 4
[77]
Dr. Nadine Berger = Hof 2, Tisch 77, Nummer 1
Prof. Dr. Yusuf Ott = Hof 2, Tisch 77, Nummer 2
Patrick Lehmann = Hof 2, Tisch 77, Nummer 3
[78]
Jennifer Dietrich = Hof 2, Tisch 78, Nummer 1
Marco Dietrich = Hof 2, Tisch 78, Nummer 2
Sofia Dietrich = Hof 2, Tisch 78, Nummer 3
[79]
Thomas Wolf = Hof 2, Tisch 79, Nummer 1
Julia Wolf = Hof 2, Tisch 79, Nummer 2
Emma Wolf = Hof 2, Tisch 79, Nummer 3
Ben Wolf = Hof 2, Tisch 79, Nummer 4
[80]
Matthias Ott = Hof 2, Tisch 80, Nummer 1
Hannah Ott = Hof 2, Tisch 80, Nummer 2
Melanie Ott = Hof 2, Tisch 80, Nummer 3
[81]
Julia Franke = Hof 2, Tisch 81, Nummer 1
Marco Franke = Hof 2, Tisch 81, Nummer 2
Olga Franke = Hof 2, Tisch 81, Nummer 3
[82]
Christina Thiel = Hof 2, Tisch 82, Nummer 1
Julia Thiel = Hof 2, Tisch 82, Nummer 2
Yusuf Thiel = Hof 2, Tisch 82, Nummer 3
[83]
Matteo Neumann = Hof 2, Tisch 83, Nummer 1
Lina Neumann = Hof 2, Tisch 83, Nummer 2
Jennifer Neumann = Hof 2, Tisch 83, Nummer 3
Thomas Neumann = Hof 2, Tisch 83, Nummer 4
[84]
Michael Horn = Hof 2, Tisch 84, Nummer 1
Layla Horn = Hof 2, Tisch 84, Nummer 2
Kathrin Horn = Hof 2, Tisch 84, Nummer 3
Leon Horn = Hof 2, Tisch 84, Nummer 4
[85]
Thomas Hartmann = Hof 2, Tisch 85, Nummer 1
Olga Hartmann = Hof 2, Tisch 85, Nummer 2
Deniz Hartmann = Hof 2, Tisch 85, Nummer 3
[86]
Nadine Hartmann = Hof 2, Tisch 86, Nummer 1
Marija Hartmann = Hof 2, Tisch 86, Nummer 2
Olga Ott = Hof 2, Tisch 86, Nummer 3
Daniel Ott = Hof 2, Tisch 86, Nummer 4
[87]
[88]
Markus Polat = Hof 2, Tisch 88, Nummer 1
Katrin Polat = Hof 2, Tisch 88, Nummer 2
Stefanie Polat = Hof 2, Tisch 88, Nummer 3
+111
View File
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1240" height="420" viewBox="0 0 1240 420" font-family="sans-serif">
<rect width="100%" height="100%" fill="white"/>
<text x="620" y="26" text-anchor="middle" font-size="18" fill="#333">Sommerfest — Umfeld/Grundriss: zwei trapezfoermige Innenhoefe (88 Vierertische, 300 Gaeste)</text>
<polygon points="48,96 512,96 432,320 128,320" fill="#f5f0e6" stroke="#7a6a50" stroke-width="2"/>
<text x="280" y="342" text-anchor="middle" font-size="14" fill="#7a6a50">Hof 1 (Tische 1-45)</text>
<polygon points="688,96 1152,96 1032,320 808,320" fill="#f5f0e6" stroke="#7a6a50" stroke-width="2"/>
<text x="920" y="342" text-anchor="middle" font-size="14" fill="#7a6a50">Hof 2 (Tische 46-88)</text>
<rect x="536" y="24" width="168" height="48" fill="#d9c9e8" stroke="#6b4d8a" stroke-width="2"/>
<text x="620" y="50" text-anchor="middle" font-size="13" fill="#4a3465">Buehne — Band</text>
<rect x="536" y="92" width="168" height="176" fill="#cfe3f0" stroke="#4a7ba0" stroke-width="2" stroke-dasharray="8 4"/>
<text x="620" y="180" text-anchor="middle" font-size="13" fill="#2d566f">Tanzflaeche</text>
<text x="16" y="208" text-anchor="start" font-size="12" fill="#a03030">Eingang West</text>
<text x="1184" y="208" text-anchor="end" font-size="12" fill="#a03030">Eingang Ost</text>
<text x="620" y="328" text-anchor="middle" font-size="12" fill="#a03030">Eingang Sued</text>
<polygon points="42,192 42,224 66,208" fill="#a03030"/>
<polygon points="1158,192 1158,224 1134,208" fill="#a03030"/>
<polygon points="604,318 636,318 620,294" fill="#a03030"/>
<circle cx="80" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="120" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="160" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="200" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="240" cy="128" r="12" fill="white" stroke="#c0392b" stroke-width="2.5"/>
<text x="240" y="131" text-anchor="middle" font-size="9" fill="#c0392b">VIP</text>
<circle cx="280" cy="128" r="12" fill="white" stroke="#c0392b" stroke-width="2.5"/>
<text x="280" y="131" text-anchor="middle" font-size="9" fill="#c0392b">VIP</text>
<circle cx="320" cy="128" r="12" fill="white" stroke="#c0392b" stroke-width="2.5"/>
<text x="320" y="131" text-anchor="middle" font-size="9" fill="#c0392b">VIP</text>
<circle cx="360" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="400" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="440" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="480" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="100" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="140" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="180" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="220" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="260" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="300" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="340" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="380" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="420" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="460" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="120" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="160" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="200" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="240" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="280" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="320" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="360" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="400" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="440" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="140" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="180" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="220" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="260" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="300" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="340" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="380" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="420" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="160" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="200" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="240" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="280" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="320" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="360" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="400" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="720" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="760" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="800" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="840" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="880" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="920" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="960" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1000" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1040" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1080" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1120" cy="128" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="740" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="780" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="820" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="860" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="900" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="940" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="980" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1020" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1060" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1100" cy="168" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="760" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="800" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="840" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="880" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="920" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="960" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1000" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1040" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1080" cy="208" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="780" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="820" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="860" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="900" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="940" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="980" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1020" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1060" cy="248" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="840" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="880" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="920" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="960" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<circle cx="1000" cy="288" r="12" fill="white" stroke="#999999" stroke-width="1"/>
<text x="620" y="408" text-anchor="middle" font-size="11" fill="#888">Umfeld.svg — Grundriss-Elemente (Buehne, Band, Tanzflaeche, Eingaenge) werden nicht mitoptimiert; VIP-Tische 5/6/7 vor der Buehne</text>
</svg>

After

Width:  |  Height:  |  Size: 9.1 KiB

File diff suppressed because it is too large Load Diff
+615
View File
@@ -0,0 +1,615 @@
[1]
Nummer=1
Hof=1
Plaetze=4
Nachbarliste=[2, 12]
Koordinaten=(0,0)
[2]
Nummer=2
Hof=1
Plaetze=4
Nachbarliste=[1, 3, 12, 13]
Koordinaten=(1,0)
[3]
Nummer=3
Hof=1
Plaetze=4
Nachbarliste=[2, 4, 13, 14]
Koordinaten=(2,0)
[4]
Nummer=4
Hof=1
Plaetze=4
Nachbarliste=[3, 5, 14, 15]
Koordinaten=(3,0)
[5]
Nummer=5
Hof=1
Plaetze=4
Nachbarliste=[4, 6, 15, 16]
Koordinaten=(4,0)
[6]
Nummer=6
Hof=1
Plaetze=4
Nachbarliste=[5, 7, 16, 17]
Koordinaten=(5,0)
[7]
Nummer=7
Hof=1
Plaetze=4
Nachbarliste=[6, 8, 17, 18]
Koordinaten=(6,0)
[8]
Nummer=8
Hof=1
Plaetze=4
Nachbarliste=[7, 9, 18, 19]
Koordinaten=(7,0)
[9]
Nummer=9
Hof=1
Plaetze=4
Nachbarliste=[8, 10, 19, 20]
Koordinaten=(8,0)
[10]
Nummer=10
Hof=1
Plaetze=4
Nachbarliste=[9, 11, 20, 21]
Koordinaten=(9,0)
[11]
Nummer=11
Hof=1
Plaetze=4
Nachbarliste=[10, 21]
Koordinaten=(10,0)
[12]
Nummer=12
Hof=1
Plaetze=4
Nachbarliste=[1, 2, 13, 22]
Koordinaten=(0.5,1)
[13]
Nummer=13
Hof=1
Plaetze=4
Nachbarliste=[2, 3, 12, 14, 22, 23]
Koordinaten=(1.5,1)
[14]
Nummer=14
Hof=1
Plaetze=4
Nachbarliste=[3, 4, 13, 15, 23, 24]
Koordinaten=(2.5,1)
[15]
Nummer=15
Hof=1
Plaetze=4
Nachbarliste=[4, 5, 14, 16, 24, 25]
Koordinaten=(3.5,1)
[16]
Nummer=16
Hof=1
Plaetze=4
Nachbarliste=[5, 6, 15, 17, 25, 26]
Koordinaten=(4.5,1)
[17]
Nummer=17
Hof=1
Plaetze=4
Nachbarliste=[6, 7, 16, 18, 26, 27]
Koordinaten=(5.5,1)
[18]
Nummer=18
Hof=1
Plaetze=4
Nachbarliste=[7, 8, 17, 19, 27, 28]
Koordinaten=(6.5,1)
[19]
Nummer=19
Hof=1
Plaetze=4
Nachbarliste=[8, 9, 18, 20, 28, 29]
Koordinaten=(7.5,1)
[20]
Nummer=20
Hof=1
Plaetze=4
Nachbarliste=[9, 10, 19, 21, 29, 30]
Koordinaten=(8.5,1)
[21]
Nummer=21
Hof=1
Plaetze=4
Nachbarliste=[10, 11, 20, 30]
Koordinaten=(9.5,1)
[22]
Nummer=22
Hof=1
Plaetze=4
Nachbarliste=[12, 13, 23, 31]
Koordinaten=(1,2)
[23]
Nummer=23
Hof=1
Plaetze=4
Nachbarliste=[13, 14, 22, 24, 31, 32]
Koordinaten=(2,2)
[24]
Nummer=24
Hof=1
Plaetze=4
Nachbarliste=[14, 15, 23, 25, 32, 33]
Koordinaten=(3,2)
[25]
Nummer=25
Hof=1
Plaetze=4
Nachbarliste=[15, 16, 24, 26, 33, 34]
Koordinaten=(4,2)
[26]
Nummer=26
Hof=1
Plaetze=4
Nachbarliste=[16, 17, 25, 27, 34, 35]
Koordinaten=(5,2)
[27]
Nummer=27
Hof=1
Plaetze=4
Nachbarliste=[17, 18, 26, 28, 35, 36]
Koordinaten=(6,2)
[28]
Nummer=28
Hof=1
Plaetze=4
Nachbarliste=[18, 19, 27, 29, 36, 37]
Koordinaten=(7,2)
[29]
Nummer=29
Hof=1
Plaetze=4
Nachbarliste=[19, 20, 28, 30, 37, 38]
Koordinaten=(8,2)
[30]
Nummer=30
Hof=1
Plaetze=4
Nachbarliste=[20, 21, 29, 38]
Koordinaten=(9,2)
[31]
Nummer=31
Hof=1
Plaetze=4
Nachbarliste=[22, 23, 32, 39]
Koordinaten=(1.5,3)
[32]
Nummer=32
Hof=1
Plaetze=4
Nachbarliste=[23, 24, 31, 33, 39, 40]
Koordinaten=(2.5,3)
[33]
Nummer=33
Hof=1
Plaetze=4
Nachbarliste=[24, 25, 32, 34, 40, 41]
Koordinaten=(3.5,3)
[34]
Nummer=34
Hof=1
Plaetze=4
Nachbarliste=[25, 26, 33, 35, 41, 42]
Koordinaten=(4.5,3)
[35]
Nummer=35
Hof=1
Plaetze=4
Nachbarliste=[26, 27, 34, 36, 42, 43]
Koordinaten=(5.5,3)
[36]
Nummer=36
Hof=1
Plaetze=4
Nachbarliste=[27, 28, 35, 37, 43, 44]
Koordinaten=(6.5,3)
[37]
Nummer=37
Hof=1
Plaetze=4
Nachbarliste=[28, 29, 36, 38, 44, 45]
Koordinaten=(7.5,3)
[38]
Nummer=38
Hof=1
Plaetze=4
Nachbarliste=[29, 30, 37, 45]
Koordinaten=(8.5,3)
[39]
Nummer=39
Hof=1
Plaetze=4
Nachbarliste=[31, 32, 40]
Koordinaten=(2,4)
[40]
Nummer=40
Hof=1
Plaetze=4
Nachbarliste=[32, 33, 39, 41]
Koordinaten=(3,4)
[41]
Nummer=41
Hof=1
Plaetze=4
Nachbarliste=[33, 34, 40, 42]
Koordinaten=(4,4)
[42]
Nummer=42
Hof=1
Plaetze=4
Nachbarliste=[34, 35, 41, 43]
Koordinaten=(5,4)
[43]
Nummer=43
Hof=1
Plaetze=4
Nachbarliste=[35, 36, 42, 44]
Koordinaten=(6,4)
[44]
Nummer=44
Hof=1
Plaetze=4
Nachbarliste=[36, 37, 43, 45]
Koordinaten=(7,4)
[45]
Nummer=45
Hof=1
Plaetze=4
Nachbarliste=[37, 38, 44]
Koordinaten=(8,4)
[46]
Nummer=46
Hof=2
Plaetze=4
Nachbarliste=[47, 57]
Koordinaten=(16,0)
[47]
Nummer=47
Hof=2
Plaetze=4
Nachbarliste=[46, 48, 57, 58]
Koordinaten=(17,0)
[48]
Nummer=48
Hof=2
Plaetze=4
Nachbarliste=[47, 49, 58, 59]
Koordinaten=(18,0)
[49]
Nummer=49
Hof=2
Plaetze=4
Nachbarliste=[48, 50, 59, 60]
Koordinaten=(19,0)
[50]
Nummer=50
Hof=2
Plaetze=4
Nachbarliste=[49, 51, 60, 61]
Koordinaten=(20,0)
[51]
Nummer=51
Hof=2
Plaetze=4
Nachbarliste=[50, 52, 61, 62]
Koordinaten=(21,0)
[52]
Nummer=52
Hof=2
Plaetze=4
Nachbarliste=[51, 53, 62, 63]
Koordinaten=(22,0)
[53]
Nummer=53
Hof=2
Plaetze=4
Nachbarliste=[52, 54, 63, 64]
Koordinaten=(23,0)
[54]
Nummer=54
Hof=2
Plaetze=4
Nachbarliste=[53, 55, 64, 65]
Koordinaten=(24,0)
[55]
Nummer=55
Hof=2
Plaetze=4
Nachbarliste=[54, 56, 65, 66]
Koordinaten=(25,0)
[56]
Nummer=56
Hof=2
Plaetze=4
Nachbarliste=[55, 66]
Koordinaten=(26,0)
[57]
Nummer=57
Hof=2
Plaetze=4
Nachbarliste=[46, 47, 58, 67]
Koordinaten=(16.5,1)
[58]
Nummer=58
Hof=2
Plaetze=4
Nachbarliste=[47, 48, 57, 59, 67, 68]
Koordinaten=(17.5,1)
[59]
Nummer=59
Hof=2
Plaetze=4
Nachbarliste=[48, 49, 58, 60, 68, 69]
Koordinaten=(18.5,1)
[60]
Nummer=60
Hof=2
Plaetze=4
Nachbarliste=[49, 50, 59, 61, 69, 70]
Koordinaten=(19.5,1)
[61]
Nummer=61
Hof=2
Plaetze=4
Nachbarliste=[50, 51, 60, 62, 70, 71]
Koordinaten=(20.5,1)
[62]
Nummer=62
Hof=2
Plaetze=4
Nachbarliste=[51, 52, 61, 63, 71, 72]
Koordinaten=(21.5,1)
[63]
Nummer=63
Hof=2
Plaetze=4
Nachbarliste=[52, 53, 62, 64, 72, 73]
Koordinaten=(22.5,1)
[64]
Nummer=64
Hof=2
Plaetze=4
Nachbarliste=[53, 54, 63, 65, 73, 74]
Koordinaten=(23.5,1)
[65]
Nummer=65
Hof=2
Plaetze=4
Nachbarliste=[54, 55, 64, 66, 74, 75]
Koordinaten=(24.5,1)
[66]
Nummer=66
Hof=2
Plaetze=4
Nachbarliste=[55, 56, 65, 75]
Koordinaten=(25.5,1)
[67]
Nummer=67
Hof=2
Plaetze=4
Nachbarliste=[57, 58, 68, 76]
Koordinaten=(17,2)
[68]
Nummer=68
Hof=2
Plaetze=4
Nachbarliste=[58, 59, 67, 69, 76, 77]
Koordinaten=(18,2)
[69]
Nummer=69
Hof=2
Plaetze=4
Nachbarliste=[59, 60, 68, 70, 77, 78]
Koordinaten=(19,2)
[70]
Nummer=70
Hof=2
Plaetze=4
Nachbarliste=[60, 61, 69, 71, 78, 79]
Koordinaten=(20,2)
[71]
Nummer=71
Hof=2
Plaetze=4
Nachbarliste=[61, 62, 70, 72, 79, 80]
Koordinaten=(21,2)
[72]
Nummer=72
Hof=2
Plaetze=4
Nachbarliste=[62, 63, 71, 73, 80, 81]
Koordinaten=(22,2)
[73]
Nummer=73
Hof=2
Plaetze=4
Nachbarliste=[63, 64, 72, 74, 81, 82]
Koordinaten=(23,2)
[74]
Nummer=74
Hof=2
Plaetze=4
Nachbarliste=[64, 65, 73, 75, 82, 83]
Koordinaten=(24,2)
[75]
Nummer=75
Hof=2
Plaetze=4
Nachbarliste=[65, 66, 74, 83]
Koordinaten=(25,2)
[76]
Nummer=76
Hof=2
Plaetze=4
Nachbarliste=[67, 68, 77]
Koordinaten=(17.5,3)
[77]
Nummer=77
Hof=2
Plaetze=4
Nachbarliste=[68, 69, 76, 78, 84]
Koordinaten=(18.5,3)
[78]
Nummer=78
Hof=2
Plaetze=4
Nachbarliste=[69, 70, 77, 79, 84, 85]
Koordinaten=(19.5,3)
[79]
Nummer=79
Hof=2
Plaetze=4
Nachbarliste=[70, 71, 78, 80, 85, 86]
Koordinaten=(20.5,3)
[80]
Nummer=80
Hof=2
Plaetze=4
Nachbarliste=[71, 72, 79, 81, 86, 87]
Koordinaten=(21.5,3)
[81]
Nummer=81
Hof=2
Plaetze=4
Nachbarliste=[72, 73, 80, 82, 87, 88]
Koordinaten=(22.5,3)
[82]
Nummer=82
Hof=2
Plaetze=4
Nachbarliste=[73, 74, 81, 83, 88]
Koordinaten=(23.5,3)
[83]
Nummer=83
Hof=2
Plaetze=4
Nachbarliste=[74, 75, 82]
Koordinaten=(24.5,3)
[84]
Nummer=84
Hof=2
Plaetze=4
Nachbarliste=[77, 78, 85]
Koordinaten=(19,4)
[85]
Nummer=85
Hof=2
Plaetze=4
Nachbarliste=[78, 79, 84, 86]
Koordinaten=(20,4)
[86]
Nummer=86
Hof=2
Plaetze=4
Nachbarliste=[79, 80, 85, 87]
Koordinaten=(21,4)
[87]
Nummer=87
Hof=2
Plaetze=4
Nachbarliste=[80, 81, 86, 88]
Koordinaten=(22,4)
[88]
Nummer=88
Hof=2
Plaetze=4
Nachbarliste=[81, 82, 87]
Koordinaten=(23,4)