Add the YOTA and OK/OM DX contests

Both are in the station's log and neither could be opened. The rules are
written from the published ones and checked by replaying the log.

YOTA scores a contact by the age the other operator sends: 13 points down to 10
for anyone 25 or under, whatever the continent, and 1 point or 3 for everyone
else. Every age worked on a band is a multiplier. The 2024, 2025 and 2026 logs
come out to the contact.

OK/OM DX is the first contest whose exchange differs by the other station's
country: a county from OK and OM stations, a serial number from everyone else,
in the two columns N1MM keeps them in, and `SkipsField` walks the entry window
past the box that does not apply. Points depend on which side the operator is
on, and Czechia and Slovakia count as the two countries they are. The 2023 log
comes out to the contact.

The Cabrillo exchange now gets the entry, because YOTA sends an age that only
the contest setup knows.

Two differences are left in the log, both from the .udc files the operator
used: their YOTA file only lists ages 7 to 25, so a younger operator scored as
an adult, and one OK/OM log was made with the file for stations outside OK and
OM while signing an OM call.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoGtneMQaz4M9w7Kk49AVD
This commit is contained in:
2026-08-31 09:16:44 +00:00
parent 5c0ca558c1
commit 3932f83147
22 changed files with 360 additions and 23 deletions

View File

@@ -92,7 +92,7 @@ which is too much work per spot for the little it would add.
the contest rules score it, but there is no digital window: no decoding, no
transmitting, no interface to fldigi, MMTTY or similar.
**Contest coverage.** Eight families are built in, plus whatever `.udc` files
**Contest coverage.** Ten families are built in, plus whatever `.udc` files
are in the user-defined folder. N1MM ships well over a hundred. Opening a log
from a contest that is in neither place fails with the contest name, which is
the right answer but it is still a wall.
@@ -117,12 +117,17 @@ default shape. The session, off-time and band-change settings
as one long session.
N1MM's `.udc` format has no way to say that the exchange itself differs by the
other station's country, as the OK/OM DX contest asks a district from OK and OM
stations and a serial number from everyone else. That one needs code, as it
does in N1MM, and `Contest.SkipsField` is where it goes. A contest scored by
what this station sends — YOTA counts the sent exchange — needs code too, and
reads `QsoContext.Entry`, which carries the entry categories and the sent
exchange.
other station's country. OK/OM DX is written in code for that reason — it asks
a county from OK and OM stations and a serial number from everyone else — and
`Contest.SkipsField` steps over the box that does not apply. The same is true
of REF, ARRL 10M, the Ukrainian DX contest and the Russian DX contest, which
are not written yet.
What is left in the station's own logs, in the order it works them: IOTA, EU
DXC, CQ 160, XE RTTY, REF, SARTG, BARTG, Field Day Region 1, Oceania, All
Asian, RDAC and ARRL 10M. Everything but IOTA, REF and ARRL 10M is an exchange
we already store — a serial, an age, a zone or a district — so a `.udc` file
covers it.
## Known rough edges