fe-map: note under the score when flight times are off; contribute links on the three sites
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -197,6 +197,7 @@ footer{padding-block:18px 30px;color:var(--faint);font-size:13px}
|
|||||||
</table>
|
</table>
|
||||||
<div class="hist"><span>Map distance ÷ timed length, every flight</span><canvas id="hist" aria-label="Histogram of map distance divided by timed length"></canvas></div>
|
<div class="hist"><span>Map distance ÷ timed length, every flight</span><canvas id="hist" aria-label="Histogram of map distance divided by timed length"></canvas></div>
|
||||||
<div><h2 style="margin-bottom:6px">Farthest out</h2><ul class="worst" id="worst"></ul></div>
|
<div><h2 style="margin-bottom:6px">Farthest out</h2><ul class="worst" id="worst"></ul></div>
|
||||||
|
<p class="note" id="flnote" hidden>Flight times are off, so every remaining measurement is a maximum distance. Any flat map drawn small enough meets them all, so a score of 0 here says nothing about the shape. The triangles do not depend on the layout.</p>
|
||||||
<p class="note" id="globenote">Globe: the same rules applied to great-circle distances on a sphere of radius 6,371 km.</p>
|
<p class="note" id="globenote">Globe: the same rules applied to great-circle distances on a sphere of radius 6,371 km.</p>
|
||||||
</aside>
|
</aside>
|
||||||
</section>
|
</section>
|
||||||
@@ -488,6 +489,7 @@ function globeScore() {
|
|||||||
let SC = null, GS = null;
|
let SC = null, GS = null;
|
||||||
function update(full) {
|
function update(full) {
|
||||||
SC = score(sv.X, 2); if (full) GS = globeScore();
|
SC = score(sv.X, 2); if (full) GS = globeScore();
|
||||||
|
$("#flnote").hidden = S.fl;
|
||||||
const nAct = { rt: act.l.filter(l => l.kind === "rt").length, rr: act.l.filter(l => l.kind === "rail" || l.kind === "road").length, sat: act.l.filter(l => l.kind === "sat").length };
|
const nAct = { rt: act.l.filter(l => l.kind === "rt").length, rr: act.l.filter(l => l.kind === "rail" || l.kind === "road").length, sat: act.l.filter(l => l.kind === "sat").length };
|
||||||
const row = (label, a, b, n, cls) => `<tr><th scope="row">${label}</th><td class="${a ? cls : "ok"}">${fmt(a)}<span class="of"> / ${fmt(n)}</span></td><td class="${b ? cls : "ok"}">${fmt(b)}</td></tr>`;
|
const row = (label, a, b, n, cls) => `<tr><th scope="row">${label}</th><td class="${a ? cls : "ok"}">${fmt(a)}<span class="of"> / ${fmt(n)}</span></td><td class="${b ? cls : "ok"}">${fmt(b)}</td></tr>`;
|
||||||
const nf = S.fl ? FL.length : 0;
|
const nf = S.fl ? FL.length : 0;
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ footer{padding-block:18px 30px;color:var(--faint);font-size:13px}
|
|||||||
</table>
|
</table>
|
||||||
<div class="hist"><span>Map distance ÷ timed length, every flight</span><canvas id="hist" aria-label="Histogram of map distance divided by timed length"></canvas></div>
|
<div class="hist"><span>Map distance ÷ timed length, every flight</span><canvas id="hist" aria-label="Histogram of map distance divided by timed length"></canvas></div>
|
||||||
<div><h2 style="margin-bottom:6px">Farthest out</h2><ul class="worst" id="worst"></ul></div>
|
<div><h2 style="margin-bottom:6px">Farthest out</h2><ul class="worst" id="worst"></ul></div>
|
||||||
|
<p class="note" id="flnote" hidden>Flight times are off, so every remaining measurement is a maximum distance. Any flat map drawn small enough meets them all, so a score of 0 here says nothing about the shape. The triangles do not depend on the layout.</p>
|
||||||
<p class="note" id="globenote">Globe: the same rules applied to great-circle distances on a sphere of radius 6,371 km.</p>
|
<p class="note" id="globenote">Globe: the same rules applied to great-circle distances on a sphere of radius 6,371 km.</p>
|
||||||
</aside>
|
</aside>
|
||||||
</section>
|
</section>
|
||||||
@@ -488,6 +489,7 @@ function globeScore() {
|
|||||||
let SC = null, GS = null;
|
let SC = null, GS = null;
|
||||||
function update(full) {
|
function update(full) {
|
||||||
SC = score(sv.X, 2); if (full) GS = globeScore();
|
SC = score(sv.X, 2); if (full) GS = globeScore();
|
||||||
|
$("#flnote").hidden = S.fl;
|
||||||
const nAct = { rt: act.l.filter(l => l.kind === "rt").length, rr: act.l.filter(l => l.kind === "rail" || l.kind === "road").length, sat: act.l.filter(l => l.kind === "sat").length };
|
const nAct = { rt: act.l.filter(l => l.kind === "rt").length, rr: act.l.filter(l => l.kind === "rail" || l.kind === "road").length, sat: act.l.filter(l => l.kind === "sat").length };
|
||||||
const row = (label, a, b, n, cls) => `<tr><th scope="row">${label}</th><td class="${a ? cls : "ok"}">${fmt(a)}<span class="of"> / ${fmt(n)}</span></td><td class="${b ? cls : "ok"}">${fmt(b)}</td></tr>`;
|
const row = (label, a, b, n, cls) => `<tr><th scope="row">${label}</th><td class="${a ? cls : "ok"}">${fmt(a)}<span class="of"> / ${fmt(n)}</span></td><td class="${b ? cls : "ok"}">${fmt(b)}</td></tr>`;
|
||||||
const nf = S.fl ? FL.length : 0;
|
const nf = S.fl ? FL.length : 0;
|
||||||
|
|||||||
@@ -70,7 +70,9 @@ await p.waitForFunction(() => /^Done/.test(document.getElementById('status').tex
|
|||||||
const kf = await broken();
|
const kf = await broken();
|
||||||
console.log('Limits only: broken', kf);
|
console.log('Limits only: broken', kf);
|
||||||
if (kf > 5) fail('limits alone should be (nearly) satisfiable on a plane', kf);
|
if (kf > 5) fail('limits alone should be (nearly) satisfiable on a plane', kf);
|
||||||
|
if (await p.evaluate(() => document.getElementById('flnote').hidden)) fail('flight-times-off note not shown');
|
||||||
await p.click('#d-fl');
|
await p.click('#d-fl');
|
||||||
|
if (!(await p.evaluate(() => document.getElementById('flnote').hidden))) fail('flight-times-off note still shown');
|
||||||
await p.click('#starts button[data-start="best"]');
|
await p.click('#starts button[data-start="best"]');
|
||||||
await p.waitForTimeout(300);
|
await p.waitForTimeout(300);
|
||||||
// 3D release
|
// 3D release
|
||||||
|
|||||||
Reference in New Issue
Block a user