#define MAX_TRACK_NAME_LENGTH 50
#define MAX_HORSE_NAME_LENGTH 50
#define MAX_OWNER_NAME_LENGTH 50
#define MAX_JOCKEY_NAME_LENGTH 50
#define MAX_TRAINER_NAME_LENGTH 50
#define MAX_SILKS_DESCRIPTION_LENGTH 100
#define MAX_NOTES_LENGTH 200
#define MAX_RACES 10
#define MAX_HORSES 20
// Enumerations for various categorical data
typedef enum
{
MALE,
FEMALE,
GELDING,
UNKNOWN_GENDER
} Gender;
typedef enum
{
MAIDEN_SPECIAL_WEIGHT,
MAIDEN_CLAIMING,
CLAIMING,
ALLOWANCE_OPTIONAL_CLAIMING,
ALLOWANCE,
HANDICAP,
STARTER_ALLOWANCE,
STARTER_HANDICAP,
CLAIMING_STAKES,
STARTER_OPTIONAL_CLAIMING,
MAIDEN_OPTIONAL_CLAIMING,
MAIDEN_STAKES,
INVITATIONAL,
DERBY,
TRIALS,
FUTURITY,
STAKES,
UNKNOWN_RACE_TYPE
} RaceType;
typedef enum
{
WIN,
PLACE,
SHOW,
UNKNOWN_POSITION
} FinishPosition;
// Supporting structures
typedef struct
{
int month;
int day;
int year;
} Date;
typedef struct
{
int hour;
int minute;
} Time;
typedef struct
{
Date date;
} DateTime;
typedef struct
{
char name[MAX_OWNER_NAME_LENGTH];
char silksDescription[MAX_SILKS_DESCRIPTION_LENGTH];
} Owner;
typedef struct
{
char name[MAX_TRAINER_NAME_LENGTH];
int starts;
int wins;
int places;
int shows;
} Trainer;
typedef struct
{
char name[MAX_JOCKEY_NAME_LENGTH];
int starts;
int wins;
int places;
int shows;
} Jockey;
typedef struct
{
char name[MAX_HORSE_NAME_LENGTH];
int age;
Gender gender;
float weightCarried;
Time recordTime;
int wins;
int places;
int shows;
} TrackRecordHolder;
typedef struct
{
int raceNumber; // C
DateTime raceDateTime; // A
char trackName[MAX_TRACK_NAME_LENGTH]; // E
char trackDiagram[MAX_NOTES_LENGTH]; // D - Assuming textual representation
char wagersAvailable[MAX_NOTES_LENGTH]; // B
char qrCode[MAX_NOTES_LENGTH]; // F - Assuming textual representation
int raceRating; // G
char notes[MAX_NOTES_LENGTH]; // H
RaceType raceType; // I
char raceCondition[MAX_NOTES_LENGTH]; // J
float purse; // J
TrackRecordHolder trackRecordHolder; // K
} RaceDetails;
typedef struct
{
Date date;
char trackName[MAX_TRACK_NAME_LENGTH];
float distance; // in furlongs
char surface[20]; // e.g., "Dirt", "Turf"
FinishPosition finishPosition;
int fieldSize;
float finalOdds;
Time raceTime;
int speedFigure;
char comments[MAX_NOTES_LENGTH];
} PastPerformance;
typedef struct
{
int programNumber; // 1
char saddleClothColor[20]; // 2
float morningLineOdds; // 3
float claimingPrice; // 4
Owner owner; // 5
char silks[MAX_SILKS_DESCRIPTION_LENGTH]; // 6
Trainer trainer; // 7
char horseName[MAX_HORSE_NAME_LENGTH]; // 8
Gender gender; // 10
int age; // 11
float weight; // 12
Jockey jockey; // 13
int starts; // 14
int wins; // 15
int places; // 16
int shows; // 17
float earnings; // 18
float earningsPerStart; // 19
float averageSpeed; // 20
PastPerformance pastPerformances[10]; // 21-40, assuming up to 10 past performances
} HorseDetails;
int main()
{
RaceDetails myRaces[MAX_RACES];
HorseDetails myHorses[MAX_HORSES];
// Example initialization (optional)
myRaces[0].raceNumber = 1;
myHorses[0].programNumber = 1;
return 0;
}
I2RlZmluZSBNQVhfVFJBQ0tfTkFNRV9MRU5HVEggNTAKI2RlZmluZSBNQVhfSE9SU0VfTkFNRV9MRU5HVEggNTAKI2RlZmluZSBNQVhfT1dORVJfTkFNRV9MRU5HVEggNTAKI2RlZmluZSBNQVhfSk9DS0VZX05BTUVfTEVOR1RIIDUwCiNkZWZpbmUgTUFYX1RSQUlORVJfTkFNRV9MRU5HVEggNTAKI2RlZmluZSBNQVhfU0lMS1NfREVTQ1JJUFRJT05fTEVOR1RIIDEwMAojZGVmaW5lIE1BWF9OT1RFU19MRU5HVEggMjAwCiNkZWZpbmUgTUFYX1JBQ0VTIDEwCiNkZWZpbmUgTUFYX0hPUlNFUyAyMAoKLy8gRW51bWVyYXRpb25zIGZvciB2YXJpb3VzIGNhdGVnb3JpY2FsIGRhdGEKdHlwZWRlZiBlbnVtIAp7CiAgICBNQUxFLAogICAgRkVNQUxFLAogICAgR0VMRElORywKICAgIFVOS05PV05fR0VOREVSCn0gR2VuZGVyOwoKdHlwZWRlZiBlbnVtIAp7CiAgICBNQUlERU5fU1BFQ0lBTF9XRUlHSFQsCiAgICBNQUlERU5fQ0xBSU1JTkcsCiAgICBDTEFJTUlORywKICAgIEFMTE9XQU5DRV9PUFRJT05BTF9DTEFJTUlORywKICAgIEFMTE9XQU5DRSwKICAgIEhBTkRJQ0FQLAogICAgU1RBUlRFUl9BTExPV0FOQ0UsCiAgICBTVEFSVEVSX0hBTkRJQ0FQLAogICAgQ0xBSU1JTkdfU1RBS0VTLAogICAgU1RBUlRFUl9PUFRJT05BTF9DTEFJTUlORywKICAgIE1BSURFTl9PUFRJT05BTF9DTEFJTUlORywKICAgIE1BSURFTl9TVEFLRVMsCiAgICBJTlZJVEFUSU9OQUwsCiAgICBERVJCWSwKICAgIFRSSUFMUywKICAgIEZVVFVSSVRZLAogICAgU1RBS0VTLAogICAgVU5LTk9XTl9SQUNFX1RZUEUKfSBSYWNlVHlwZTsKCnR5cGVkZWYgZW51bSAKewogICAgV0lOLAogICAgUExBQ0UsCiAgICBTSE9XLAogICAgVU5LTk9XTl9QT1NJVElPTgp9IEZpbmlzaFBvc2l0aW9uOwoKLy8gU3VwcG9ydGluZyBzdHJ1Y3R1cmVzCnR5cGVkZWYgc3RydWN0IAp7CiAgICBpbnQgbW9udGg7CiAgICBpbnQgZGF5OwogICAgaW50IHllYXI7Cn0gRGF0ZTsKCnR5cGVkZWYgc3RydWN0IAp7CiAgICBpbnQgaG91cjsKICAgIGludCBtaW51dGU7Cn0gVGltZTsKCnR5cGVkZWYgc3RydWN0IAp7CiAgICBEYXRlIGRhdGU7CiAgICBUaW1lIHRpbWU7Cn0gRGF0ZVRpbWU7Cgp0eXBlZGVmIHN0cnVjdCAKewogICAgY2hhciBuYW1lW01BWF9PV05FUl9OQU1FX0xFTkdUSF07CiAgICBjaGFyIHNpbGtzRGVzY3JpcHRpb25bTUFYX1NJTEtTX0RFU0NSSVBUSU9OX0xFTkdUSF07Cn0gT3duZXI7Cgp0eXBlZGVmIHN0cnVjdCAKewogICAgY2hhciBuYW1lW01BWF9UUkFJTkVSX05BTUVfTEVOR1RIXTsKICAgIGludCBzdGFydHM7CiAgICBpbnQgd2luczsKICAgIGludCBwbGFjZXM7CiAgICBpbnQgc2hvd3M7Cn0gVHJhaW5lcjsKCnR5cGVkZWYgc3RydWN0IAp7CiAgICBjaGFyIG5hbWVbTUFYX0pPQ0tFWV9OQU1FX0xFTkdUSF07CiAgICBpbnQgc3RhcnRzOwogICAgaW50IHdpbnM7CiAgICBpbnQgcGxhY2VzOwogICAgaW50IHNob3dzOwp9IEpvY2tleTsKCnR5cGVkZWYgc3RydWN0IAp7CiAgICBjaGFyIG5hbWVbTUFYX0hPUlNFX05BTUVfTEVOR1RIXTsKICAgIGludCBhZ2U7CiAgICBHZW5kZXIgZ2VuZGVyOwogICAgZmxvYXQgd2VpZ2h0Q2FycmllZDsKICAgIFRpbWUgcmVjb3JkVGltZTsKICAgIGludCB3aW5zOwogICAgaW50IHBsYWNlczsKICAgIGludCBzaG93czsKfSBUcmFja1JlY29yZEhvbGRlcjsKCnR5cGVkZWYgc3RydWN0IAp7CiAgICBpbnQgcmFjZU51bWJlcjsgLy8gQwogICAgRGF0ZVRpbWUgcmFjZURhdGVUaW1lOyAvLyBBCiAgICBjaGFyIHRyYWNrTmFtZVtNQVhfVFJBQ0tfTkFNRV9MRU5HVEhdOyAvLyBFCiAgICBjaGFyIHRyYWNrRGlhZ3JhbVtNQVhfTk9URVNfTEVOR1RIXTsgLy8gRCAtIEFzc3VtaW5nIHRleHR1YWwgcmVwcmVzZW50YXRpb24KICAgIGNoYXIgd2FnZXJzQXZhaWxhYmxlW01BWF9OT1RFU19MRU5HVEhdOyAvLyBCCiAgICBjaGFyIHFyQ29kZVtNQVhfTk9URVNfTEVOR1RIXTsgLy8gRiAtIEFzc3VtaW5nIHRleHR1YWwgcmVwcmVzZW50YXRpb24KICAgIGludCByYWNlUmF0aW5nOyAvLyBHCiAgICBjaGFyIG5vdGVzW01BWF9OT1RFU19MRU5HVEhdOyAvLyBICiAgICBSYWNlVHlwZSByYWNlVHlwZTsgLy8gSQogICAgY2hhciByYWNlQ29uZGl0aW9uW01BWF9OT1RFU19MRU5HVEhdOyAvLyBKCiAgICBmbG9hdCBwdXJzZTsgLy8gSgogICAgVHJhY2tSZWNvcmRIb2xkZXIgdHJhY2tSZWNvcmRIb2xkZXI7IC8vIEsKfSBSYWNlRGV0YWlsczsKCnR5cGVkZWYgc3RydWN0IAp7CiAgICBEYXRlIGRhdGU7CiAgICBjaGFyIHRyYWNrTmFtZVtNQVhfVFJBQ0tfTkFNRV9MRU5HVEhdOwogICAgZmxvYXQgZGlzdGFuY2U7IC8vIGluIGZ1cmxvbmdzCiAgICBjaGFyIHN1cmZhY2VbMjBdOyAvLyBlLmcuLCAiRGlydCIsICJUdXJmIgogICAgRmluaXNoUG9zaXRpb24gZmluaXNoUG9zaXRpb247CiAgICBpbnQgZmllbGRTaXplOwogICAgZmxvYXQgZmluYWxPZGRzOwogICAgVGltZSByYWNlVGltZTsKICAgIGludCBzcGVlZEZpZ3VyZTsKICAgIGNoYXIgY29tbWVudHNbTUFYX05PVEVTX0xFTkdUSF07Cn0gUGFzdFBlcmZvcm1hbmNlOwoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgIGludCBwcm9ncmFtTnVtYmVyOyAvLyAxCiAgICBjaGFyIHNhZGRsZUNsb3RoQ29sb3JbMjBdOyAvLyAyCiAgICBmbG9hdCBtb3JuaW5nTGluZU9kZHM7IC8vIDMKICAgIGZsb2F0IGNsYWltaW5nUHJpY2U7IC8vIDQKICAgIE93bmVyIG93bmVyOyAvLyA1CiAgICBjaGFyIHNpbGtzW01BWF9TSUxLU19ERVNDUklQVElPTl9MRU5HVEhdOyAvLyA2CiAgICBUcmFpbmVyIHRyYWluZXI7IC8vIDcKICAgIGNoYXIgaG9yc2VOYW1lW01BWF9IT1JTRV9OQU1FX0xFTkdUSF07IC8vIDgKICAgIEdlbmRlciBnZW5kZXI7IC8vIDEwCiAgICBpbnQgYWdlOyAvLyAxMQogICAgZmxvYXQgd2VpZ2h0OyAvLyAxMgogICAgSm9ja2V5IGpvY2tleTsgLy8gMTMKICAgIGludCBzdGFydHM7IC8vIDE0CiAgICBpbnQgd2luczsgLy8gMTUKICAgIGludCBwbGFjZXM7IC8vIDE2CiAgICBpbnQgc2hvd3M7IC8vIDE3CiAgICBmbG9hdCBlYXJuaW5nczsgLy8gMTgKICAgIGZsb2F0IGVhcm5pbmdzUGVyU3RhcnQ7IC8vIDE5CiAgICBmbG9hdCBhdmVyYWdlU3BlZWQ7IC8vIDIwCiAgICBQYXN0UGVyZm9ybWFuY2UgcGFzdFBlcmZvcm1hbmNlc1sxMF07IC8vIDIxLTQwLCBhc3N1bWluZyB1cCB0byAxMCBwYXN0IHBlcmZvcm1hbmNlcwp9IEhvcnNlRGV0YWlsczsKCmludCBtYWluKCkgCnsKICAgIFJhY2VEZXRhaWxzIG15UmFjZXNbTUFYX1JBQ0VTXTsKICAgIEhvcnNlRGV0YWlscyBteUhvcnNlc1tNQVhfSE9SU0VTXTsKCiAgICAvLyBFeGFtcGxlIGluaXRpYWxpemF0aW9uIChvcHRpb25hbCkKICAgIG15UmFjZXNbMF0ucmFjZU51bWJlciA9IDE7CiAgICBteUhvcnNlc1swXS5wcm9ncmFtTnVtYmVyID0gMTsKCiAgICByZXR1cm4gMDsKfQo=