#include <stdio.h>
/*
* Irish License Plate Validator (2013–2024)
* Returns 1 if valid, 0 if invalid.
*
* Rules:
* - year: 13..24
* - halfYear: 1 or 2
* - county: C/D/G/L/T/W (upper or lower)
* - sequence: 1..999999 (1 to 6 digits, no leading zeros implied by integer)
*/
int irishLicensePlateValidator(int year, int halfYear, char county, int sequence)
{
if (year < 13 || year > 24)
return 0;
if (halfYear != 1 && halfYear != 2)
return 0;
switch (county)
{
case 'C': case 'c':
case 'D': case 'd':
case 'G': case 'g':
case 'L': case 'l':
case 'T': case 't':
case 'W': case 'w':
break; /* valid county */
default:
return 0; /* invalid county */
}
if (sequence < 1 || sequence > 999999)
return 0;
return 1;
}
int main(void)
{
int retVal;
/* Valid example from prompt */
retVal = irishLicensePlateValidator(13, 1, 'D', 21);
printf("Test 1: (13, 1, 'D', 21) -> %s\n", retVal
? "VALID" : "INVALID");
/* Invalid example: bad half year and county */
retVal = irishLicensePlateValidator(13, 3, 'K', 1);
printf("Test 2: (13, 3, 'K', 1) -> %s\n", retVal
? "VALID" : "INVALID");
/* Invalid example: sequence too large */
retVal = irishLicensePlateValidator(24, 1, 'C', 1245891);
printf("Test 3: (24, 1, 'C', 1245891) -> %s\n", retVal
? "VALID" : "INVALID");
/* A couple extra quick checks */
retVal = irishLicensePlateValidator(14, 2, 'g', 999999);
printf("Test 4: (14, 2, 'g', 999999) -> %s\n", retVal
? "VALID" : "INVALID");
retVal = irishLicensePlateValidator(12, 1, 'D', 21);
printf("Test 5: (12, 1, 'D', 21) -> %s\n", retVal
? "VALID" : "INVALID");
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgoKLyoKICogSXJpc2ggTGljZW5zZSBQbGF0ZSBWYWxpZGF0b3IgKDIwMTPigJMyMDI0KQogKiBSZXR1cm5zIDEgaWYgdmFsaWQsIDAgaWYgaW52YWxpZC4KICoKICogUnVsZXM6CiAqICAtIHllYXI6IDEzLi4yNAogKiAgLSBoYWxmWWVhcjogMSBvciAyCiAqICAtIGNvdW50eTogQy9EL0cvTC9UL1cgKHVwcGVyIG9yIGxvd2VyKQogKiAgLSBzZXF1ZW5jZTogMS4uOTk5OTk5ICgxIHRvIDYgZGlnaXRzLCBubyBsZWFkaW5nIHplcm9zIGltcGxpZWQgYnkgaW50ZWdlcikKICovCmludCBpcmlzaExpY2Vuc2VQbGF0ZVZhbGlkYXRvcihpbnQgeWVhciwgaW50IGhhbGZZZWFyLCBjaGFyIGNvdW50eSwgaW50IHNlcXVlbmNlKQp7CiAgICBpZiAoeWVhciA8IDEzIHx8IHllYXIgPiAyNCkKICAgICAgICByZXR1cm4gMDsKCiAgICBpZiAoaGFsZlllYXIgIT0gMSAmJiBoYWxmWWVhciAhPSAyKQogICAgICAgIHJldHVybiAwOwoKICAgIHN3aXRjaCAoY291bnR5KQogICAgewogICAgICAgIGNhc2UgJ0MnOiBjYXNlICdjJzoKICAgICAgICBjYXNlICdEJzogY2FzZSAnZCc6CiAgICAgICAgY2FzZSAnRyc6IGNhc2UgJ2cnOgogICAgICAgIGNhc2UgJ0wnOiBjYXNlICdsJzoKICAgICAgICBjYXNlICdUJzogY2FzZSAndCc6CiAgICAgICAgY2FzZSAnVyc6IGNhc2UgJ3cnOgogICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogdmFsaWQgY291bnR5ICovCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgIC8qIGludmFsaWQgY291bnR5ICovCiAgICB9CgogICAgaWYgKHNlcXVlbmNlIDwgMSB8fCBzZXF1ZW5jZSA+IDk5OTk5OSkKICAgICAgICByZXR1cm4gMDsKCiAgICByZXR1cm4gMTsKfQoKaW50IG1haW4odm9pZCkKewogICAgaW50IHJldFZhbDsKCiAgICAvKiBWYWxpZCBleGFtcGxlIGZyb20gcHJvbXB0ICovCiAgICByZXRWYWwgPSBpcmlzaExpY2Vuc2VQbGF0ZVZhbGlkYXRvcigxMywgMSwgJ0QnLCAyMSk7CiAgICBwcmludGYoIlRlc3QgMTogKDEzLCAxLCAnRCcsIDIxKSAtPiAlc1xuIiwgcmV0VmFsID8gIlZBTElEIiA6ICJJTlZBTElEIik7CgogICAgLyogSW52YWxpZCBleGFtcGxlOiBiYWQgaGFsZiB5ZWFyIGFuZCBjb3VudHkgKi8KICAgIHJldFZhbCA9IGlyaXNoTGljZW5zZVBsYXRlVmFsaWRhdG9yKDEzLCAzLCAnSycsIDEpOwogICAgcHJpbnRmKCJUZXN0IDI6ICgxMywgMywgJ0snLCAxKSAgLT4gJXNcbiIsIHJldFZhbCA/ICJWQUxJRCIgOiAiSU5WQUxJRCIpOwoKICAgIC8qIEludmFsaWQgZXhhbXBsZTogc2VxdWVuY2UgdG9vIGxhcmdlICovCiAgICByZXRWYWwgPSBpcmlzaExpY2Vuc2VQbGF0ZVZhbGlkYXRvcigyNCwgMSwgJ0MnLCAxMjQ1ODkxKTsKICAgIHByaW50ZigiVGVzdCAzOiAoMjQsIDEsICdDJywgMTI0NTg5MSkgLT4gJXNcbiIsIHJldFZhbCA/ICJWQUxJRCIgOiAiSU5WQUxJRCIpOwoKICAgIC8qIEEgY291cGxlIGV4dHJhIHF1aWNrIGNoZWNrcyAqLwogICAgcmV0VmFsID0gaXJpc2hMaWNlbnNlUGxhdGVWYWxpZGF0b3IoMTQsIDIsICdnJywgOTk5OTk5KTsKICAgIHByaW50ZigiVGVzdCA0OiAoMTQsIDIsICdnJywgOTk5OTk5KSAtPiAlc1xuIiwgcmV0VmFsID8gIlZBTElEIiA6ICJJTlZBTElEIik7CgogICAgcmV0VmFsID0gaXJpc2hMaWNlbnNlUGxhdGVWYWxpZGF0b3IoMTIsIDEsICdEJywgMjEpOwogICAgcHJpbnRmKCJUZXN0IDU6ICgxMiwgMSwgJ0QnLCAyMSkgLT4gJXNcbiIsIHJldFZhbCA/ICJWQUxJRCIgOiAiSU5WQUxJRCIpOwoKICAgIHJldHVybiAwOwp9Cg==