2000 LSU Computer Science High School Programming Contest
Problem 5: Pascal Program Lengths

Main
  Home
  Schedule
  Rules
  Compile

Results
  Results

Problems
  Novice
  Veteran
  All

   Your local computer user's group publishes a quarterly newsletter, and in each issue there is a small Pascal Programming Problem to be solved by the membership. Members submit their solutions to the problem to the newsletter editor, and the member submitting the shortest solution to the problem receives a prize.

The length of a program is measured in units. The unit count is determined by counting all occurrences of reserved words, identifiers, constants, left parentheses, left brackets, and the following operators: +, -, *, /, =, <, >, <=, >=, <>, @, ^, and :=. Comments are ignored, as are all other symbols not falling into one of the categories mentioned above. The program with the lowest unit count is declared the winner. Two or more programs with equal unit counts split the prize for the quarter.

In an effort to speed the judging of the contest, your team has been asked to write a program that will determine the length of a series of Pascal programs and print the number of units in each.

Input and Output

Input to your program will be a series of Pascal programs. Each program will be terminated by a line containing tilde characters in the first two columns, followed by the name of the submitting member. Each of these programs will be syntactically correct and use the standard symbols for comments (braces) and subscripts (square brackets).

For each program, you are to print a separate line containing the name of the submitting member and the unit count of the program. Use a format identical to that of the sample below.

Sample input

PROGRAM SAMPLEINPUT;

VAR
  TEMP : RECORD
    FIRST, SECOND : INTEGER;
    END;
BEGIN {Ignore this }
TEMP.FIRST := 501;
READLN (TEMP.SECOND); 
WRITELN ('THE ANSWER IS', TEMP.FIRST * TEMP.SECOND : 7);
END.
~~A. N. Onymous

Explanation

This is a list of the units in the program above:

PROGRAM 
SAMPLEINPUT
VAR
TEMP 
RECORD
FIRST 
SECOND 
INTEGER
END
BEGIN 
TEMP
FIRST 
:= 
501
READLN 
(
TEMP
SECOND 
WRITELN 
(
'THE ANSWER IS' 
TEMP
FIRST 
* 
TEMP
SECOND  
7 
END

Sample output

Program by A. N. Onymous contains 28 units.

Notes

Here are some additional notes on Pascal for those not familiar with the language and some simplifications for those who are overly familiar with it:
  • Identifiers start with an underscore (_) or a letter (upper or lower case) which is followed by zero or more characters that are underscores, letters or digits.
  • The delimiter for the beginning and ending of a string constant is the single forward quote ('). Each string is entirely on a single source line (that is a string constant cannot begin on one line and continue on the next). If '' appears within a string then it represents a single ' character that is part of the string. A string constant consisting of a single ' character is, therefore, represented by '''' in a Pascal program. The empty string is allowed.
  • We will only consider integer constants.
  • The only comment delimiters that you should recognise are {}, and not (**). Comments do not nest.
  • `+' and `-' should be considered as operators wherever possible. For example in x := -3 the `-' and the `3' are separate tokens.
  • Subranges of ordinal types can be expressed as lower..upper. For example, 1..10 is a subrange involving the integers from 1 to 10.
  • All tokens not mentioned anywhere above consist of a single character.


The statements and opinions included in these pages are those of the LSU Computer Science High School Programming Contest Staff only. Any statements and opinions included in these pages are not those of Louisiana State University or the LSU Board of Supervisors.

© 2000 LSU Computer Science High School Programming Contest

This page last updated 2001/04/05 20:28:14.