COBOLでズンドコ
今、はやりのズンドコキヨシのCOBOL版が見当たらなかったので、書いてみました。
とはいえ、20年ぶりくらいにCOBOLを書くので、全然COBOLっぽくないかも。。。
そして、PCでCOBOL書くのは、想像以上に書きづらかった!
準備
今回は、GnuCOBOL (formerly OpenCOBOL)っていうのを使わせていただきました。
Macだったら、
$ brew install open-cobol
であっさり入ります。
中身
zd.cob
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. ZUNDOKO-KIYOSHI.
000030 ENVIRONMENT DIVISION.
000040 DATA DIVISION.
000050 WORKING-STORAGE SECTION.
000060 77 END-FLAG PIC 9(01).
000070 77 WRK PIC 9(01).
000080 77 ZUN-COUNT PIC 9(01).
000090 77 SEED PIC 9(06).
000100 01 CURRENT-DATE-STRUCT.
000110 05 CURRENT-DATE.
000120 10 CURRENT-YEAR PIC 9(04).
000130 10 CURRENT-MONTH PIC 9(02).
000140 10 CURRENT-DAY PIC 9(02).
000150 05 CURRENT-TIME.
000160 10 CURRENT-HOURS PIC 9(02).
000170 10 CURRENT-MINUTE PIC 9(02).
000180 10 CURRENT-SECOND PIC 9(02).
000190 10 CURRENT-MILLISECONDS COMP-2.
000200 05 DIFF-FROM-GMT PIC S9(04).
000210 PROCEDURE DIVISION.
000220 MAIN SECTION.
000230* Initialize random seed
000240 MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-STRUCT.
000250 COMPUTE SEED = CURRENT-HOURS * 1000
000260 + CURRENT-MINUTE * 10 + CURRENT-SECOND.
000270 COMPUTE WRK = FUNCTION RANDOM(SEED).
000280* Zundoko
000290 PERFORM UNTIL END-FLAG = 1
000300 COMPUTE WRK = FUNCTION RANDOM * 10
000310 DIVIDE WRK BY 2 GIVING WRK REMAINDER WRK
000320 IF WRK = 1 THEN
000330 DISPLAY 'ズン'
000340 COMPUTE ZUN-COUNT = ZUN-COUNT + 1
000350 ELSE
000360 DISPLAY 'ドコ'
000370 IF ZUN-COUNT = 4 THEN
000380 MOVE 1 TO END-FLAG
000390 END-IF
000400 MOVE 0 TO ZUN-COUNT
000410 END-IF
000420 END-PERFORM.
000430 DISPLAY 'キ・ヨ・シ!'.
000440 STOP RUN.
こんな感じです。
COBOLなので、わかりやすさを意識して書いてみましたが、意外とわかりづらい???
そして、昔のことすぎて覚えてないので、COBOLっぽく書けてるのかは謎です。
実行
$ cobc -x ./zd.cob ; ./zd
ズン
ズン
ズン
ズン
ズン
ドコ
ドコ
ズン
ドコ
ズン
ズン
ドコ
ズン
ズン
ドコ
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ!
$
っぽくなりました!
以上