In the United States, "N-Numbers" are the name given to aircraft registrations. Some of the services that the FAA provides include the ability to lookup aircraft by N-Number or reserve an N-Number.
Below we implement the rules to detect if a string is a valid N-Number in Factor.
- may not begin with zero.
- may not be the letters "I" or "O" to avoid confusion with the numbers one or zero.
: (n-number?) ( digits letters -- ? ) [ dup first CHAR: 0 = [ drop f ] [ [ digit? ] all? ] if ] [ [ [ Letter? ] [ "IiOo" member? not ] bi and ] all? ] bi* and ;
- may be one to five numbers (e.g., N12345).
- may be one to four numbers and one suffix letter (e.g., N1A and N1234Z).
- may be one to three numbers and two suffix letters (e.g., N24BY and N123AZ).
: n-number? ( str -- ? ) "N" ?head drop { [ { [ length 1 5 between? ] [ f (n-number?) ] } 1&& ] [ { [ length 2 5 between? ] [ 1 cut* (n-number?) ] } 1&& ] [ { [ length 3 5 between? ] [ 2 cut* (n-number?) ] } 1&& ] } 1|| ;
Registration numbers N1 through N99 are reserved for Federal Aviation Administration (FAA) internal use and are not available.
: reserved? ( str -- ? ) "N" ?head drop { [ length 1 2 between? ] [ [ digit? ] all? ] } 1&& ;
The code and some tests for this is on my GitHub.
No comments:
Post a Comment