Versionierter Simulatordatensatz mit 100 Positionen, 249 im Modell gültigen Ergebnissen und 151 leeren oder verworfenen Plätzen (400 geprüft). Grundlage ist ein versionierter deterministischer Physik-Cache, keine Real-Tisch-Erfolgsstudie.
Methodik
Das veröffentlichte Artefakt wird aus dem versionierten Solver-Cache erzeugt. Engine-Profil, Quell-Fingerprint, Zählwerte und SHA-256 sind dokumentiert, damit der Download unabhängig prüfbar ist. Ein Ergebnis ist ein Simulationsresultat und keine Erfolgswahrscheinlichkeit am realen Tisch.
Versionierte Simulatordaten
- Engine-Vertrag
3ball-carom-match-v2 / physics 2.0.0 / solver 4.2.0- Datensatz-SHA-256
256a8ec7e7e9a66d907bd43f5fdd6b87628dc067fd9621f2d2ebd2472c3e43ed- gültige Solver-Ergebnisse
- 249
- leere oder verworfene Ergebnisplätze
- 151
- Prüfstatus
machine-assisted-reviewed
Feldverzeichnis
position: cueIdx, mode, firstIdx, balls, shots · ball: color, p.x, p.y · shots[]: shot {angle, power, sideSpin, topSpin}, label, length, margin, pct, tol, perturbPct, cushions.
Öffentliche Downloads prüfen
Die Prüfung kontrolliert Dateiintegrität und Anzahlen. Sie erzeugt die Physikengine nicht neu, bestätigt keinen Stoß unabhängig und beweist keine Genauigkeit am echten Tisch. Die vollständige Generierungsumgebung wird nicht öffentlich verteilt.
Speichere den folgenden Text als verify_3ball.py und führe ihn mit Python 3 aus. Er nutzt nur die Standardbibliothek und öffentliche JSON-Dateien von 3ball.app; Konto und Projektkopie sind unnötig.
import hashlib, json, urllib.request
BASE = 'https://3ball.app/'
ALLOWED = {'data/solutions_cache.json', 'data/solutions_cache_v3.json'}
def download(path):
with urllib.request.urlopen(BASE + path, timeout=30) as response:
return response.read(2_000_001)
manifest = json.loads(download('data/research-manifest.json'))
for key in ('source', 'portfolioBeta'):
record = manifest if key == 'source' else manifest[key]
source = record['source']
assert source['path'] in ALLOWED, 'Unexpected dataset path'
raw = download(source['path'])
assert len(raw) == source['bytes'], 'File size mismatch'
assert hashlib.sha256(raw).hexdigest() == source['sha256'], 'Hash mismatch'
data = json.loads(raw)
positions = list(data['positions'].values())
assert len(positions) == record['counts']['positions'], 'Position count mismatch'
if key == 'source':
shots = [s for p in positions for s in p['shots']]
assert sum(s is not None for s in shots) == record['counts']['validShots']
assert sum(s is None for s in shots) == record['counts']['rejectedSlots']
else:
continuations = list(data['continuations'].values())
assert len(continuations) == record['counts']['continuations']
solutions = [s for p in positions + continuations for s in p['solutions']]
assert sum(s is not None for s in solutions) == record['counts']['solutions']
print(source['path'], 'OK', record['counts'])Umfang und Grenzen
Dies ist ein deterministischer Simulatordatensatz, keine Erfolgsstudie am realen Tisch. Der Cache nutzt das eingefrorene V2-Profil. Physics V3 wartet auf unabhängige Messung. Margin und Robustheit sind Modelldiagnosen, keine realen Wahrscheinlichkeiten.
Lizenz und Datenschutz
Der Download enthält nur berechnete Tischkoordinaten und Solver-Ausgaben; keine Fotos, Kontokennungen, Freitexte oder personenbezogenen Daten. Lizenz CC BY 4.0.
Beispielpositionen
| Position | Modus | Bälle | Solver-Stöße | Beste Marge |
|---|---|---|---|---|
3cushion::white::r2.130,0.710|w0.710,0.528|y0.710,0.710 | Dreiband | 3 | 3 | 1.15 |
freecarom::white::r2.130,0.710|w0.710,0.528|y0.710,0.710 | Freie Partie | 3 | 1 | 1.32 |
3cushion::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710 | Dreiband | 3 | 1 | 0.94 |
freecarom::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710 | Freie Partie | 3 | 1 | 1.36 |
3cushion::white::r2.550,0.500|w0.300,0.300|y2.500,1.100 | Dreiband | 3 | 4 | 0.28 |
freecarom::white::r2.550,0.500|w0.300,0.300|y2.500,1.100 | Freie Partie | 3 | 4 | 0.50 |
3cushion::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100 | Dreiband | 3 | 2 | 0.97 |
freecarom::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100 | Freie Partie | 3 | 4 | 2.13 |
3cushion::white::r0.550,0.300|w1.420,0.710|y1.950,1.100 | Dreiband | 3 | 1 | 1.47 |
freecarom::white::r0.550,0.300|w1.420,0.710|y1.950,1.100 | Freie Partie | 3 | 2 | 1.50 |
3cushion::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100 | Dreiband | 3 | 1 | 0.24 |
freecarom::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100 | Freie Partie | 3 | 2 | 0.92 |
Vollständigen Datensatz herunterladen
Der vollständige maschinenlesbare Datensatz ist mit Quellenangabe kostenlos nutzbar.
So verwendest du ihn
Platziere eine Position anhand der Beispielkoordinaten und der Spielballidentität im Trainer. Eingefrorene V2-Ergebnisse können vom aktuellen V3-Replay abweichen; notiere die Engineversion beim Vergleich.
Trainer öffnen
Platziere eine Position anhand der Beispielkoordinaten und der Spielballidentität im Trainer. Eingefrorene V2-Ergebnisse können vom aktuellen V3-Replay abweichen; notiere die Engineversion beim Vergleich.
Trainer öffnen →