Qiita Engineer Festa 2024(キータ・エンジニア・フェスタ 2024) - Qiita
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。
Welcome to AtCoder
PracticeA - Welcome to AtCoder
Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。
a
b c
s
この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。
sum s
整数 $a$, $b$, $c$ は 1 以上 1,000 以下であり、文字列 $s$ の長さは 1 以上 100 以下である。
また、明示はされていないが、公式のC言語による回答例において文字列 $s$ を
char s[101];
// 文字列の入力
scanf("%s",s);
として読み込んでいることから、
- $s$ は 100 バイト以下 (複数バイトからなる文字を使用するなどで 100 バイトを超えることはない)
- $s$ は空白文字を含まない
ということが推測できる。
このことは、あくまで推測である。
C言語では配列の範囲外へのアクセス (バッファオーバーラン) をしてもランタイムエラーになるとは限らず、うまく動いてしまうことがある。
また、テストケースの不足により、制約の範囲内で間違った出力を生み出す入力が存在するにもかかわらず、正解と判定されてしまうことがある。(いわゆる嘘解法)
今回の場合、ジャッジに用いられるテストケースにおいては文字列 $s$ に空白が含まれないということはこの回答例から推測できるが、やはり「文字列 $s$ に空白が含まれない」という制約は存在せず、この回答例は文字列 $s$ に空白が含まれるケースでは間違った出力を生み出す嘘解法であるといえる。
また、$s$ のバイト数についても、$|s|$ についての制約はあり、これは文字列 $s$ の「長さ」であると解釈するのが妥当だろう。
しかし、文字列の「長さ」の定義は確定せず、バイト数かもしれないし、文字数かもしれない。
$|s|$ の定義が「$s$ のバイト数」である場合は、制約の範囲内の入力についてこの回答例はバッファオーバーランを起こさない。
しかし、$|s|$ の定義が「$s$ の文字数」である場合は、1個の文字を複数のバイトで表すこともあるため、この回答例は制約の範囲内の入力においてバッファオーバーランを起こす可能性がある。
バッファオーバーランを起こした結果どうなるかはわからない。
何事も無かったかのように正常に実行されるかもしれないし、周辺のデータを破壊して変な値が出力されるかもしれないし、ランタイムエラーになるかもしれないし、それ以外の結果になるかもしれない。
今回用いる COBOL の言語仕様
桁の使い方
COBOL では、桁 (それぞれの行において、何文字目か) によって何を書くかが決まっている。
ざっくり言うと、以下のようになっている。
桁 | 書くこと |
---|---|
1~6 | 行番号 |
8~11 | 見出しなど |
12~72 | プログラムなど |
4つの部
COBOLプログラムの全体構成 | COBOLプログラミング入門
COBOL のプログラムは、以下の4つの部からなる。
部 | 内容 |
---|---|
見出し部 (IDENTIFICATION DIVISION) | プログラムのIDなど |
環境部 (ENVIRONMENT DIVISION) | 扱うファイルなど |
データ部 (DATA DIVISION) | 変数定義など |
手続き部 (PROCEDURE DIVISION) | プログラム本体 |
変数宣言
COBOLのデータ定義 | COBOLプログラミング入門
命名規則と特殊なデータ定義 | COBOLプログラミング入門
データ型の種類 | COBOLプログラミング入門
COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典| COBOL入門サイト
COBOLのFILLER句を完全マスターする9ステップ – Japanシーモア
変数のかたまり (集団項目) を定義してその中に変数を配置するか、特殊なレベル番号 77
を用いて単独の変数を定義する。
変数の定義は、以下の形式で行う。
レベル番号 変数名 PIC 型.
レベル番号 変数名 PIC 型 VALUE 初期値.
型は、「何を何個」の形式で指定できる。
「何」の部分には、以下を用いることができる。
何 | 意味 |
---|---|
9 |
数値1桁 |
X |
文字列1文字 |
「何個」の部分は、個数を丸括弧に入れて表現できる。
または、「何」を表す文字を個数分並べてもよい。(1桁・1文字の場合は1個になる)
たとえば
77 VAR1 PIC 9(5).
77 VAR2 PIC X(20).
とすると、5桁の数値を格納できる変数 VAR1
と、20文字の文字列を格納できる変数 VAR2
を定義できる。
また、REDEFINES
を用いると、既存の変数に重ねて新たな変数を宣言できる。(C言語の共用体のような感じ)
FILLER
を用いると、変数として名前を付けることなく領域を確保できる。(パディング)
たとえば
01 NUM-SET.
03 NUM4 PIC 9(2).
03 FILLER REDEFINES NUM4.
05 FILLER PIC 9(2).
05 NUM2 PIC 9(2).
とすると、4桁の数値 NUM4
と、その下位2桁を参照する数値 NUM2
を定義できる。
FILLER
によって NUM4
の領域の上位2桁をスキップすることで、NUM2
が下位2桁を参照できるようにしちえる。
実行の終了
COBOL言語の「STOP RUN」の使い方について理解しよう!|用語辞典 | COBOL入門サイト
STOP RUN.
により、プログラムの実行を終了 (正常終了) できる。
標準入力
ACCEPT 変数 FROM CONSOLE.
とすると、標準入力から変数に1行読み込むことができる。
読み取り元は CONSOLE
(コンソール) と SYSIN
(標準入力) を用いることができるが、AtCoder の環境における違いはわからなかった。
文字列を読み込んだ際、変数の余った部分 (入力を読み込んだ部分の右側) は空白で埋められる。
標準出力
DISPLAY 表示内容 UPON CONSOLE.
とすると、「表示内容」を標準出力に出力し、さらに改行文字を1個出力する。
出力先は CONSOLE
(コンソール) と SYSOUT
(標準出力) を用いることができるが、AtCoder の環境における違いはわからなかった。
「表示内容」には、変数や定数を指定できる。
変数や定数を複数並べて指定することもでき、この場合指定した内容がすべて余計な文字を挟まずに1行で出力される。
変数を指定した場合、変数の内容全体が出力される。
これには、数値変数の先頭のゼロや、文字列変数の右側の空白などが含まれる。
演算
COMPUTE 文を用いると、算術演算を行い、結果を変数に格納できる。
COMPUTE 格納先変数 = 計算を行う式
のように指定する。
条件分岐
IF~THEN文による条件分岐 | COBOLプログラミング入門
EVALUATE文による多岐選択 | COBOLプログラミング入門
IF 文を用いると、条件分岐を行うことができる。
IF 条件式 THEN
条件式が真の場合の処理
ELSE
条件式が偽の場合の処理
END-IF.
のように記述する。
IF 文の内側の「条件式が真の場合の処理」「条件式が偽の場合の処理」の中では、文の最後にピリオドをつけない。
これは、IF 文の内側にある (ネストされた) IF 文にも適用される。
「ELSE 条件式が偽の場合の処理」は無くてもよい。
EVALUATE 文を用いると、変数などの値を用いて分岐を行うことが出来る。(C言語の switch
のような処理)
EVALUATE 式
WHEN 値1
式の値が「値1」の場合の処理
WHEN 値2
式の値が「値2」の場合の処理
…
END-EVALUATE.
のように記述する。
内側の処理では、文の最後にピリオドをつけない。
値を文字列変数の一部に書き込む
STRING 文を用いると、文字列や数値を文字列変数の一部に書き込むことができる。
今回は以下の形式を用いる。
STRING 書き込む値 INTO 書き込み先変数 WITH POINTER 書き込み位置を表す変数
STRING 書き込む値 DELIMITED BY 終端文字 INTO 書き込み先変数 WITH POINTER 書き込み位置を表す変数
「書き込む値」を表す文字列を、「書き込み先変数」の指定の位置に書き込む。
書き込む位置は「書き込み位置を表す変数」によって表す。
これは数値であり、文字列変数内の最初の文字を「1」で表す。
書き込み処理を行うと、「書き込み位置を表す変数」の値は書き込んだ最後の文字の次の位置を表すように更新される。
「終端文字」を指定すると、文字列の全体ではなく、文字列内の最初の指定した文字の1個前の文字までの部分のみを書き込むことができる。
文字列から値を読み取る
UNSTRING 文を用いると、区切り文字によって区切られた文字列からそれぞれのデータを変数に読み取ることができる。
文字列としてだけでなく、数値として読み取ることもできる。
今回は、以下の形式を用いる。
UNSTRING 読み取り元 DELIMITED BY 区切り文字 INTO 読み取り先 [読み取り先 ...]
答案の戦略
まず、ACCEPT 文を用いて入力の各行を読み込む。
1 行目は数値が 1 個だけなので、直接数値型変数に読み込む。
2 行目は数値が 2 個含まれるので、後で分割するために文字列型変数に読み込む。
3 行目は文字列なので、文字列型変数に読み込む。
次に、2 行目を UNSTRING 文で 2 個の数値に分割し、1 行目と合わせて得られた 3 個の数値の和を求める。
今回扱う数値は 1 以上 1,000 以下の整数なので、和は 4 桁以下である。
和の大きさに合わせて適切な桁数の変数を選択し、和の値を STRING 文で結果を表す変数に書き込む。
続いて、空白文字 (区切り) と 3 行目の文字列を同じ変数に続けて書き込む。
STRING 文でポインタ変数を用いることにより、このように複数回に分けて連続した領域に書き込むことができる。
また、文字列を書き込む際は、区切り文字を指定して有効な部分だけを書き込むようにしている。
最後に、書き込んだ文字列を出力する。
書き込み処理が完了した際のポインタ変数から書き込んだ長さを求め、それに合わせた変数を用いて出力する。
今回は、入力される文字列の長さの最大が 100 と短いため、考えられる全パターンの出力用変数を用意できた。
しかし、100,000 文字などの長い文字列を扱う場合は、今回のような方法は困難になり、別の方法を考えることが求められるかもしれない。
提出コード
このコードは文字列 $s$ が空白文字を含む場合間違った出力を生成する嘘解法であるが、正解と判定された。
ACCEPT
での入力時に余った部分が空白文字で埋められる関係で、空白文字を含む文字列 $s$ に対応するのは難しそうである。
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. WELCOME-TO-ATCODER.
000030 ENVIRONMENT DIVISION.
000040 DATA DIVISION.
000050 WORKING-STORAGE SECTION.
000060 77 A PIC 9(4).
000070 77 B-AND-C PIC X(9).
000080 77 B PIC 9(4).
000090 77 C PIC 9(4).
000100 77 S PIC X(100).
000110 01 ADDED-TOP.
000120 03 ADDED PIC 9(4).
000130 03 FILLER REDEFINES ADDED.
000140 05 FILLER PIC 9.
000150 05 ADDED3 PIC 9(3).
000160 03 FILLER REDEFINES ADDED.
000170 05 FILLER PIC 9(2).
000180 05 ADDED2 PIC 9(2).
000190 03 FILLER REDEFINES ADDED.
000200 05 FILLER PIC 9(3).
000210 05 ADDED1 PIC 9.
000220 01 RESULT-TOP.
000250 03 RESULT PIC X(105).
000260 03 FILLER REDEFINES RESULT.
000270 05 RESULT3 PIC X(3).
000280 03 FILLER REDEFINES RESULT.
000290 05 RESULT4 PIC X(4).
000300 03 FILLER REDEFINES RESULT.
000310 05 RESULT5 PIC X(5).
000320 03 FILLER REDEFINES RESULT.
000330 05 RESULT6 PIC X(6).
000340 03 FILLER REDEFINES RESULT.
000350 05 RESULT7 PIC X(7).
000360 03 FILLER REDEFINES RESULT.
000370 05 RESULT8 PIC X(8).
000380 03 FILLER REDEFINES RESULT.
000390 05 RESULT9 PIC X(9).
000400 03 FILLER REDEFINES RESULT.
000410 05 RESULT10 PIC X(10).
000420 03 FILLER REDEFINES RESULT.
000430 05 RESULT11 PIC X(11).
000440 03 FILLER REDEFINES RESULT.
000450 05 RESULT12 PIC X(12).
000460 03 FILLER REDEFINES RESULT.
000470 05 RESULT13 PIC X(13).
000480 03 FILLER REDEFINES RESULT.
000490 05 RESULT14 PIC X(14).
000500 03 FILLER REDEFINES RESULT.
000510 05 RESULT15 PIC X(15).
000520 03 FILLER REDEFINES RESULT.
000530 05 RESULT16 PIC X(16).
000540 03 FILLER REDEFINES RESULT.
000550 05 RESULT17 PIC X(17).
000560 03 FILLER REDEFINES RESULT.
000570 05 RESULT18 PIC X(18).
000580 03 FILLER REDEFINES RESULT.
000590 05 RESULT19 PIC X(19).
000600 03 FILLER REDEFINES RESULT.
000610 05 RESULT20 PIC X(20).
000620 03 FILLER REDEFINES RESULT.
000630 05 RESULT21 PIC X(21).
000640 03 FILLER REDEFINES RESULT.
000650 05 RESULT22 PIC X(22).
000660 03 FILLER REDEFINES RESULT.
000670 05 RESULT23 PIC X(23).
000680 03 FILLER REDEFINES RESULT.
000690 05 RESULT24 PIC X(24).
000700 03 FILLER REDEFINES RESULT.
000710 05 RESULT25 PIC X(25).
000720 03 FILLER REDEFINES RESULT.
000730 05 RESULT26 PIC X(26).
000740 03 FILLER REDEFINES RESULT.
000750 05 RESULT27 PIC X(27).
000760 03 FILLER REDEFINES RESULT.
000770 05 RESULT28 PIC X(28).
000780 03 FILLER REDEFINES RESULT.
000790 05 RESULT29 PIC X(29).
000800 03 FILLER REDEFINES RESULT.
000810 05 RESULT30 PIC X(30).
000820 03 FILLER REDEFINES RESULT.
000830 05 RESULT31 PIC X(31).
000840 03 FILLER REDEFINES RESULT.
000850 05 RESULT32 PIC X(32).
000860 03 FILLER REDEFINES RESULT.
000870 05 RESULT33 PIC X(33).
000880 03 FILLER REDEFINES RESULT.
000890 05 RESULT34 PIC X(34).
000900 03 FILLER REDEFINES RESULT.
000910 05 RESULT35 PIC X(35).
000920 03 FILLER REDEFINES RESULT.
000930 05 RESULT36 PIC X(36).
000940 03 FILLER REDEFINES RESULT.
000950 05 RESULT37 PIC X(37).
000960 03 FILLER REDEFINES RESULT.
000970 05 RESULT38 PIC X(38).
000980 03 FILLER REDEFINES RESULT.
000990 05 RESULT39 PIC X(39).
001000 03 FILLER REDEFINES RESULT.
001010 05 RESULT40 PIC X(40).
001020 03 FILLER REDEFINES RESULT.
001030 05 RESULT41 PIC X(41).
001040 03 FILLER REDEFINES RESULT.
001050 05 RESULT42 PIC X(42).
001060 03 FILLER REDEFINES RESULT.
001070 05 RESULT43 PIC X(43).
001080 03 FILLER REDEFINES RESULT.
001090 05 RESULT44 PIC X(44).
001100 03 FILLER REDEFINES RESULT.
001110 05 RESULT45 PIC X(45).
001120 03 FILLER REDEFINES RESULT.
001130 05 RESULT46 PIC X(46).
001140 03 FILLER REDEFINES RESULT.
001150 05 RESULT47 PIC X(47).
001160 03 FILLER REDEFINES RESULT.
001170 05 RESULT48 PIC X(48).
001180 03 FILLER REDEFINES RESULT.
001190 05 RESULT49 PIC X(49).
001200 03 FILLER REDEFINES RESULT.
001210 05 RESULT50 PIC X(50).
001220 03 FILLER REDEFINES RESULT.
001230 05 RESULT51 PIC X(51).
001240 03 FILLER REDEFINES RESULT.
001250 05 RESULT52 PIC X(52).
001260 03 FILLER REDEFINES RESULT.
001270 05 RESULT53 PIC X(53).
001280 03 FILLER REDEFINES RESULT.
001290 05 RESULT54 PIC X(54).
001300 03 FILLER REDEFINES RESULT.
001310 05 RESULT55 PIC X(55).
001320 03 FILLER REDEFINES RESULT.
001330 05 RESULT56 PIC X(56).
001340 03 FILLER REDEFINES RESULT.
001350 05 RESULT57 PIC X(57).
001360 03 FILLER REDEFINES RESULT.
001370 05 RESULT58 PIC X(58).
001380 03 FILLER REDEFINES RESULT.
001390 05 RESULT59 PIC X(59).
001400 03 FILLER REDEFINES RESULT.
001410 05 RESULT60 PIC X(60).
001420 03 FILLER REDEFINES RESULT.
001430 05 RESULT61 PIC X(61).
001440 03 FILLER REDEFINES RESULT.
001450 05 RESULT62 PIC X(62).
001460 03 FILLER REDEFINES RESULT.
001470 05 RESULT63 PIC X(63).
001480 03 FILLER REDEFINES RESULT.
001490 05 RESULT64 PIC X(64).
001500 03 FILLER REDEFINES RESULT.
001510 05 RESULT65 PIC X(65).
001520 03 FILLER REDEFINES RESULT.
001530 05 RESULT66 PIC X(66).
001540 03 FILLER REDEFINES RESULT.
001550 05 RESULT67 PIC X(67).
001560 03 FILLER REDEFINES RESULT.
001570 05 RESULT68 PIC X(68).
001580 03 FILLER REDEFINES RESULT.
001590 05 RESULT69 PIC X(69).
001600 03 FILLER REDEFINES RESULT.
001610 05 RESULT70 PIC X(70).
001620 03 FILLER REDEFINES RESULT.
001630 05 RESULT71 PIC X(71).
001640 03 FILLER REDEFINES RESULT.
001650 05 RESULT72 PIC X(72).
001660 03 FILLER REDEFINES RESULT.
001670 05 RESULT73 PIC X(73).
001680 03 FILLER REDEFINES RESULT.
001690 05 RESULT74 PIC X(74).
001700 03 FILLER REDEFINES RESULT.
001710 05 RESULT75 PIC X(75).
001720 03 FILLER REDEFINES RESULT.
001730 05 RESULT76 PIC X(76).
001740 03 FILLER REDEFINES RESULT.
001750 05 RESULT77 PIC X(77).
001760 03 FILLER REDEFINES RESULT.
001770 05 RESULT78 PIC X(78).
001780 03 FILLER REDEFINES RESULT.
001790 05 RESULT79 PIC X(79).
001800 03 FILLER REDEFINES RESULT.
001810 05 RESULT80 PIC X(80).
001820 03 FILLER REDEFINES RESULT.
001830 05 RESULT81 PIC X(81).
001840 03 FILLER REDEFINES RESULT.
001850 05 RESULT82 PIC X(82).
001860 03 FILLER REDEFINES RESULT.
001870 05 RESULT83 PIC X(83).
001880 03 FILLER REDEFINES RESULT.
001890 05 RESULT84 PIC X(84).
001900 03 FILLER REDEFINES RESULT.
001910 05 RESULT85 PIC X(85).
001920 03 FILLER REDEFINES RESULT.
001930 05 RESULT86 PIC X(86).
001940 03 FILLER REDEFINES RESULT.
001950 05 RESULT87 PIC X(87).
001960 03 FILLER REDEFINES RESULT.
001970 05 RESULT88 PIC X(88).
001980 03 FILLER REDEFINES RESULT.
001990 05 RESULT89 PIC X(89).
002000 03 FILLER REDEFINES RESULT.
002010 05 RESULT90 PIC X(90).
002020 03 FILLER REDEFINES RESULT.
002030 05 RESULT91 PIC X(91).
002040 03 FILLER REDEFINES RESULT.
002050 05 RESULT92 PIC X(92).
002060 03 FILLER REDEFINES RESULT.
002070 05 RESULT93 PIC X(93).
002080 03 FILLER REDEFINES RESULT.
002090 05 RESULT94 PIC X(94).
002100 03 FILLER REDEFINES RESULT.
002110 05 RESULT95 PIC X(95).
002120 03 FILLER REDEFINES RESULT.
002130 05 RESULT96 PIC X(96).
002140 03 FILLER REDEFINES RESULT.
002150 05 RESULT97 PIC X(97).
002160 03 FILLER REDEFINES RESULT.
002170 05 RESULT98 PIC X(98).
002180 03 FILLER REDEFINES RESULT.
002190 05 RESULT99 PIC X(99).
002200 03 FILLER REDEFINES RESULT.
002210 05 RESULT100 PIC X(100).
002220 03 FILLER REDEFINES RESULT.
002230 05 RESULT101 PIC X(101).
002240 03 FILLER REDEFINES RESULT.
002250 05 RESULT102 PIC X(102).
002260 03 FILLER REDEFINES RESULT.
002270 05 RESULT103 PIC X(103).
002280 03 FILLER REDEFINES RESULT.
002290 05 RESULT104 PIC X(104).
002300 77 RESULT-PTR PIC 9(4) VALUE 1.
002310 PROCEDURE DIVISION.
002320 MAIN.
002330 ACCEPT A FROM CONSOLE.
002340 ACCEPT B-AND-C FROM CONSOLE.
002350 ACCEPT S FROM CONSOLE.
002360 UNSTRING B-AND-C DELIMITED BY ALL " " INTO B C.
002370 COMPUTE ADDED = A + B + C
002380 IF ADDED < 10 THEN
002390 STRING ADDED1 INTO RESULT WITH POINTER RESULT-PTR
002400 ELSE
002410 IF ADDED < 100 THEN
002420 STRING ADDED2 INTO RESULT WITH POINTER RESULT-PTR
002430 ELSE
002440 IF ADDED < 1000 THEN
002450 STRING ADDED3 INTO RESULT WITH POINTER RESULT-PTR
002460 ELSE
002470 STRING ADDED INTO RESULT WITH POINTER RESULT-PTR
002480 END-IF
002490 END-IF
002500 END-IF.
002510 STRING SPACE INTO RESULT WITH POINTER RESULT-PTR
002520 STRING S DELIMITED BY " " INTO RESULT WITH POINTER RESULT-PTR
002530 EVALUATE RESULT-PTR
002540 WHEN 4
002550 DISPLAY RESULT3 UPON CONSOLE
002560 WHEN 5
002570 DISPLAY RESULT4 UPON CONSOLE
002580 WHEN 6
002590 DISPLAY RESULT5 UPON CONSOLE
002600 WHEN 7
002610 DISPLAY RESULT6 UPON CONSOLE
002620 WHEN 8
002630 DISPLAY RESULT7 UPON CONSOLE
002640 WHEN 9
002650 DISPLAY RESULT8 UPON CONSOLE
002660 WHEN 10
002670 DISPLAY RESULT9 UPON CONSOLE
002680 WHEN 11
002690 DISPLAY RESULT10 UPON CONSOLE
002700 WHEN 12
002710 DISPLAY RESULT11 UPON CONSOLE
002720 WHEN 13
002730 DISPLAY RESULT12 UPON CONSOLE
002740 WHEN 14
002750 DISPLAY RESULT13 UPON CONSOLE
002760 WHEN 15
002770 DISPLAY RESULT14 UPON CONSOLE
002780 WHEN 16
002790 DISPLAY RESULT15 UPON CONSOLE
002800 WHEN 17
002810 DISPLAY RESULT16 UPON CONSOLE
002820 WHEN 18
002830 DISPLAY RESULT17 UPON CONSOLE
002840 WHEN 19
002850 DISPLAY RESULT18 UPON CONSOLE
002860 WHEN 20
002870 DISPLAY RESULT19 UPON CONSOLE
002880 WHEN 21
002890 DISPLAY RESULT20 UPON CONSOLE
002900 WHEN 22
002910 DISPLAY RESULT21 UPON CONSOLE
002920 WHEN 23
002930 DISPLAY RESULT22 UPON CONSOLE
002940 WHEN 24
002950 DISPLAY RESULT23 UPON CONSOLE
002960 WHEN 25
002970 DISPLAY RESULT24 UPON CONSOLE
002980 WHEN 26
002990 DISPLAY RESULT25 UPON CONSOLE
003000 WHEN 27
003010 DISPLAY RESULT26 UPON CONSOLE
003020 WHEN 28
003030 DISPLAY RESULT27 UPON CONSOLE
003040 WHEN 29
003050 DISPLAY RESULT28 UPON CONSOLE
003060 WHEN 30
003070 DISPLAY RESULT29 UPON CONSOLE
003080 WHEN 31
003090 DISPLAY RESULT30 UPON CONSOLE
003100 WHEN 32
003110 DISPLAY RESULT31 UPON CONSOLE
003120 WHEN 33
003130 DISPLAY RESULT32 UPON CONSOLE
003140 WHEN 34
003150 DISPLAY RESULT33 UPON CONSOLE
003160 WHEN 35
003170 DISPLAY RESULT34 UPON CONSOLE
003180 WHEN 36
003190 DISPLAY RESULT35 UPON CONSOLE
003200 WHEN 37
003210 DISPLAY RESULT36 UPON CONSOLE
003220 WHEN 38
003230 DISPLAY RESULT37 UPON CONSOLE
003240 WHEN 39
003250 DISPLAY RESULT38 UPON CONSOLE
003260 WHEN 40
003270 DISPLAY RESULT39 UPON CONSOLE
003280 WHEN 41
003290 DISPLAY RESULT40 UPON CONSOLE
003300 WHEN 42
003310 DISPLAY RESULT41 UPON CONSOLE
003320 WHEN 43
003330 DISPLAY RESULT42 UPON CONSOLE
003340 WHEN 44
003350 DISPLAY RESULT43 UPON CONSOLE
003360 WHEN 45
003370 DISPLAY RESULT44 UPON CONSOLE
003380 WHEN 46
003390 DISPLAY RESULT45 UPON CONSOLE
003400 WHEN 47
003410 DISPLAY RESULT46 UPON CONSOLE
003420 WHEN 48
003430 DISPLAY RESULT47 UPON CONSOLE
003440 WHEN 49
003450 DISPLAY RESULT48 UPON CONSOLE
003460 WHEN 50
003470 DISPLAY RESULT49 UPON CONSOLE
003480 WHEN 51
003490 DISPLAY RESULT50 UPON CONSOLE
003500 WHEN 52
003510 DISPLAY RESULT51 UPON CONSOLE
003520 WHEN 53
003530 DISPLAY RESULT52 UPON CONSOLE
003540 WHEN 54
003550 DISPLAY RESULT53 UPON CONSOLE
003560 WHEN 55
003570 DISPLAY RESULT54 UPON CONSOLE
003580 WHEN 56
003590 DISPLAY RESULT55 UPON CONSOLE
003600 WHEN 57
003610 DISPLAY RESULT56 UPON CONSOLE
003620 WHEN 58
003630 DISPLAY RESULT57 UPON CONSOLE
003640 WHEN 59
003650 DISPLAY RESULT58 UPON CONSOLE
003660 WHEN 60
003670 DISPLAY RESULT59 UPON CONSOLE
003680 WHEN 61
003690 DISPLAY RESULT60 UPON CONSOLE
003700 WHEN 62
003710 DISPLAY RESULT61 UPON CONSOLE
003720 WHEN 63
003730 DISPLAY RESULT62 UPON CONSOLE
003740 WHEN 64
003750 DISPLAY RESULT63 UPON CONSOLE
003760 WHEN 65
003770 DISPLAY RESULT64 UPON CONSOLE
003780 WHEN 66
003790 DISPLAY RESULT65 UPON CONSOLE
003800 WHEN 67
003810 DISPLAY RESULT66 UPON CONSOLE
003820 WHEN 68
003830 DISPLAY RESULT67 UPON CONSOLE
003840 WHEN 69
003850 DISPLAY RESULT68 UPON CONSOLE
003860 WHEN 70
003870 DISPLAY RESULT69 UPON CONSOLE
003880 WHEN 71
003890 DISPLAY RESULT70 UPON CONSOLE
003900 WHEN 72
003910 DISPLAY RESULT71 UPON CONSOLE
003920 WHEN 73
003930 DISPLAY RESULT72 UPON CONSOLE
003940 WHEN 74
003950 DISPLAY RESULT73 UPON CONSOLE
003960 WHEN 75
003970 DISPLAY RESULT74 UPON CONSOLE
003980 WHEN 76
003990 DISPLAY RESULT75 UPON CONSOLE
004000 WHEN 77
004010 DISPLAY RESULT76 UPON CONSOLE
004020 WHEN 78
004030 DISPLAY RESULT77 UPON CONSOLE
004040 WHEN 79
004050 DISPLAY RESULT78 UPON CONSOLE
004060 WHEN 80
004070 DISPLAY RESULT79 UPON CONSOLE
004080 WHEN 81
004090 DISPLAY RESULT80 UPON CONSOLE
004100 WHEN 82
004110 DISPLAY RESULT81 UPON CONSOLE
004120 WHEN 83
004130 DISPLAY RESULT82 UPON CONSOLE
004140 WHEN 84
004150 DISPLAY RESULT83 UPON CONSOLE
004160 WHEN 85
004170 DISPLAY RESULT84 UPON CONSOLE
004180 WHEN 86
004190 DISPLAY RESULT85 UPON CONSOLE
004200 WHEN 87
004210 DISPLAY RESULT86 UPON CONSOLE
004220 WHEN 88
004230 DISPLAY RESULT87 UPON CONSOLE
004240 WHEN 89
004250 DISPLAY RESULT88 UPON CONSOLE
004260 WHEN 90
004270 DISPLAY RESULT89 UPON CONSOLE
004280 WHEN 91
004290 DISPLAY RESULT90 UPON CONSOLE
004300 WHEN 92
004310 DISPLAY RESULT91 UPON CONSOLE
004320 WHEN 93
004330 DISPLAY RESULT92 UPON CONSOLE
004340 WHEN 94
004350 DISPLAY RESULT93 UPON CONSOLE
004360 WHEN 95
004370 DISPLAY RESULT94 UPON CONSOLE
004380 WHEN 96
004390 DISPLAY RESULT95 UPON CONSOLE
004400 WHEN 97
004410 DISPLAY RESULT96 UPON CONSOLE
004420 WHEN 98
004430 DISPLAY RESULT97 UPON CONSOLE
004440 WHEN 99
004450 DISPLAY RESULT98 UPON CONSOLE
004460 WHEN 100
004470 DISPLAY RESULT99 UPON CONSOLE
004480 WHEN 101
004490 DISPLAY RESULT100 UPON CONSOLE
004500 WHEN 102
004510 DISPLAY RESULT101 UPON CONSOLE
004520 WHEN 103
004530 DISPLAY RESULT102 UPON CONSOLE
004540 WHEN 104
004550 DISPLAY RESULT103 UPON CONSOLE
004560 WHEN 105
004570 DISPLAY RESULT104 UPON CONSOLE
004580 WHEN 106
004590 DISPLAY RESULT UPON CONSOLE
004600 END-EVALUATE.
004610 STOP RUN.