COBOL で Welcome to AtCoder を解いてみた

[Qiita Engineer Festa 2024（キータ・エンジニア・フェスタ 2024） - Qiita](https://qiita.com/official-campaigns/engineer-festa/2024)
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。

# Welcome to AtCoder

[PracticeA - Welcome to AtCoder](https://atcoder.jp/contests/abs/tasks/practice_1)

Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。

```text
a
b c
s
```

この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。

```text
sum s
```

整数 $a$, $b$, $c$ は 1 以上 1,000 以下であり、文字列 $s$ の長さは 1 以上 100 以下である。
また、明示はされていないが、公式のC言語による回答例において文字列 $s$ を

```c
    char s[101];
    // 文字列の入力
    scanf("%s",s);
```

として読み込んでいることから、

* $s$ は 100 バイト以下 (複数バイトからなる文字を使用するなどで 100 バイトを超えることはない)
* $s$ は**空白文字を含まない**

ということが**推測できる。**

:::note info
このことは、あくまで**推測**である。
C言語では配列の範囲外へのアクセス (バッファオーバーラン) をしてもランタイムエラーになるとは限らず、うまく動いてしまうことがある。
また、テストケースの不足により、制約の範囲内で間違った出力を生み出す入力が存在するにもかかわらず、正解と判定されてしまうことがある。(いわゆる**嘘解法**)

今回の場合、ジャッジに用いられるテストケースにおいては文字列 $s$ に空白が含まれないということはこの回答例から推測できるが、やはり「文字列 $s$ に空白が含まれない」という制約は存在せず、この回答例は文字列 $s$ に空白が含まれるケースでは間違った出力を生み出す**嘘解法**であるといえる。

また、$s$ のバイト数についても、$|s|$ についての制約はあり、これは文字列 $s$ の「長さ」であると解釈するのが妥当だろう。
しかし、文字列の「長さ」の定義は確定せず、バイト数かもしれないし、文字数かもしれない。
$|s|$ の定義が「$s$ のバイト数」である場合は、制約の範囲内の入力についてこの回答例はバッファオーバーランを起こさない。
しかし、$|s|$ の定義が「$s$ の**文字数**」である場合は、1個の文字を複数のバイトで表すこともあるため、この回答例は制約の範囲内の入力においてバッファオーバーランを起こす可能性がある。
バッファオーバーランを起こした結果どうなるかはわからない。
何事も無かったかのように正常に実行されるかもしれないし、周辺のデータを破壊して変な値が出力されるかもしれないし、ランタイムエラーになるかもしれないし、それ以外の結果になるかもしれない。
:::

# 今回用いる COBOL の言語仕様

## 桁の使い方

[コーディングフォーマット | COBOLプログラミング入門](http://tallercolibri.com/archives/53)

COBOL では、桁 (それぞれの行において、何文字目か) によって何を書くかが決まっている。
ざっくり言うと、以下のようになっている。

|桁|書くこと|
|:-:|---|
|1～6|行番号|
|8～11|見出しなど|
|12～72|プログラムなど|

## 4つの部

[COBOLプログラムの全体構成 | COBOLプログラミング入門](http://tallercolibri.com/archives/8)

COBOL のプログラムは、以下の4つの部からなる。

|部|内容|
|---|---|
|見出し部 (IDENTIFICATION DIVISION)|プログラムのIDなど|
|環境部 (ENVIRONMENT DIVISION)|扱うファイルなど|
|データ部 (DATA DIVISION)|変数定義など|
|手続き部 (PROCEDURE DIVISION)|プログラム本体|

## 変数宣言

[COBOLのデータ定義 | COBOLプログラミング入門](http://tallercolibri.com/archives/104)
[命名規則と特殊なデータ定義 | COBOLプログラミング入門](http://tallercolibri.com/archives/117)
[データ型の種類 | COBOLプログラミング入門](http://tallercolibri.com/archives/132)
[COBOL言語の「REDEFINES句」とは？使い方を確認しよう！｜用語辞典｜ COBOL入門サイト](https://www.cobol.co.jp/cobol-nyuumon/zisyo/z031-redefinebun/)
[COBOLのFILLER句を完全マスターする9ステップ – Japanシーモア](https://jp-seemore.com/sys/18583/)

変数のかたまり (集団項目) を定義してその中に変数を配置するか、特殊なレベル番号 `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入門サイト](https://www.cobol.co.jp/cobol-nyuumon/zisyo/z099-stoprun/)

```
STOP RUN.
```

により、プログラムの実行を終了 (正常終了) できる。

## 標準入力

[ACCEPT文 | COBOLプログラミング入門](http://tallercolibri.com/archives/76)

```
ACCEPT 変数 FROM CONSOLE.
```

とすると、標準入力から変数に1行読み込むことができる。
読み取り元は `CONSOLE` (コンソール) と `SYSIN` (標準入力) を用いることができるが、AtCoder の環境における違いはわからなかった。

文字列を読み込んだ際、変数の余った部分 (入力を読み込んだ部分の右側) は**空白で埋められる。**

## 標準出力

[DISPLAY文 | COBOLプログラミング入門](http://tallercolibri.com/archives/71)

```
DISPLAY 表示内容 UPON CONSOLE.
```

とすると、「表示内容」を標準出力に出力し、**さらに改行文字を1個出力する。**
出力先は `CONSOLE` (コンソール) と `SYSOUT` (標準出力) を用いることができるが、AtCoder の環境における違いはわからなかった。

「表示内容」には、変数や定数を指定できる。
変数や定数を複数並べて指定することもでき、この場合指定した内容がすべて余計な文字を挟まずに1行で出力される。

変数を指定した場合、変数の**内容全体**が出力される。
これには、数値変数の先頭のゼロや、文字列変数の右側の空白などが含まれる。

## 演算

[COMPUTE 文](http://www16.plala.or.jp/hiyokogumi/dic/a_compute.html)を用いると、算術演算を行い、結果を変数に格納できる。

```
COMPUTE 格納先変数 = 計算を行う式
```

のように指定する。

## 条件分岐

[IF～THEN文による条件分岐 | COBOLプログラミング入門](http://tallercolibri.com/archives/81)
[EVALUATE文による多岐選択 | COBOLプログラミング入門](http://tallercolibri.com/archives/88)

IF 文を用いると、条件分岐を行うことができる。

```
IF 条件式 THEN
    条件式が真の場合の処理
ELSE
    条件式が偽の場合の処理
END-IF.
```

のように記述する。
IF 文の内側の「条件式が真の場合の処理」「条件式が偽の場合の処理」の中では、文の最後に**ピリオドをつけない。**
これは、IF 文の内側にある (ネストされた) IF 文にも適用される。

「ELSE 条件式が偽の場合の処理」は無くてもよい。

EVALUATE 文を用いると、変数などの値を用いて分岐を行うことが出来る。(C言語の `switch` のような処理)

```
EVALUATE 式
    WHEN 値1
        式の値が「値1」の場合の処理
    WHEN 値2
        式の値が「値2」の場合の処理
    …
END-EVALUATE.
```

のように記述する。
内側の処理では、文の最後に**ピリオドをつけない。**

## 値を文字列変数の一部に書き込む

[STRING 文](http://www16.plala.or.jp/hiyokogumi/dic/a_string.html)を用いると、文字列や数値を文字列変数の一部に書き込むことができる。
今回は以下の形式を用いる。

```
STRING 書き込む値 INTO 書き込み先変数 WITH POINTER 書き込み位置を表す変数
STRING 書き込む値 DELIMITED BY 終端文字 INTO 書き込み先変数 WITH POINTER 書き込み位置を表す変数
```

「書き込む値」を表す文字列を、「書き込み先変数」の指定の位置に書き込む。

書き込む位置は「書き込み位置を表す変数」によって表す。
これは数値であり、文字列変数内の最初の文字を「1」で表す。
書き込み処理を行うと、「書き込み位置を表す変数」の値は書き込んだ最後の文字の次の位置を表すように更新される。

「終端文字」を指定すると、文字列の全体ではなく、文字列内の最初の指定した文字の1個前の文字までの部分のみを書き込むことができる。

## 文字列から値を読み取る

[UNSTRING 文](http://www16.plala.or.jp/hiyokogumi/dic/a_unstring.html)を用いると、区切り文字によって区切られた文字列からそれぞれのデータを変数に読み取ることができる。
文字列としてだけでなく、数値として読み取ることもできる。
今回は、以下の形式を用いる。

```
UNSTRING 読み取り元 DELIMITED BY 区切り文字 INTO 読み取り先 [読み取り先 ...]
```

# 答案の戦略

まず、ACCEPT 文を用いて入力の各行を読み込む。
1 行目は数値が 1 個だけなので、直接数値型変数に読み込む。
2 行目は数値が 2 個含まれるので、後で分割するために文字列型変数に読み込む。
3 行目は文字列なので、文字列型変数に読み込む。

次に、2 行目を UNSTRING 文で 2 個の数値に分割し、1 行目と合わせて得られた 3 個の数値の和を求める。
今回扱う数値は 1 以上 1,000 以下の整数なので、和は 4 桁以下である。

和の大きさに合わせて適切な桁数の変数を選択し、和の値を STRING 文で結果を表す変数に書き込む。
続いて、空白文字 (区切り) と 3 行目の文字列を同じ変数に続けて書き込む。
STRING 文でポインタ変数を用いることにより、このように複数回に分けて連続した領域に書き込むことができる。
また、文字列を書き込む際は、区切り文字を指定して有効な部分だけを書き込むようにしている。

最後に、書き込んだ文字列を出力する。
書き込み処理が完了した際のポインタ変数から書き込んだ長さを求め、それに合わせた変数を用いて出力する。

:::note info
今回は、入力される文字列の長さの最大が 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.
```

[提出 #54413273 - AtCoder Beginners Selection](https://atcoder.jp/contests/abs/submissions/54413273)