オンラインジャッジ*1でCOBOL*2での解答を提出した際におきたトラブル
テストケースの入力データの最終行の末尾に改行文字が無い場合にWA*3する。
COBOLに詳しくないのでハッキリとした原因はわかってないのだが。
ACCEPTで入力を取ると入力行の末尾を1文字削除しているような気がする。
おそらく通常はこの削除によって改行文字を削除しているのだと思う。
しかし最終行の末尾に改行文字が無い場合に肝心の入力データの最後の文字が削除されてしまうので正しい計算が出来ず失敗しているのだと思う。
COBOLに詳しくないのでどうしたらいいか分からんのだが、
苦肉の解決策として
ジャッジサーバーは Linux なので /dev/stdin からファイルとして入力を取ることが可能な場合*4があるので
CALLで CBL_OPEN_FILE, CBL_READ_FILE, CBL_CLOSE_FILE を呼び出して/dev/stdinからバッファに読み込み、そこから頑張って入力データを読み取る
という感じでなんとか出来た
このトラブルに出会ったのはこれのとき
漫画版: 女子高生プログラマーの大バトル!〜コボール文明の逆襲〜|paizaオンラインハッカソン6
これのとき使ったコード
ACCEPTで失敗したコード
https://github.com/neetsdkasu/Paiza-POH-MySolutions/blob/master/POH6/tsubame/answer.cob
CALLでCBL_OPEN_FILE等を使い/dev/stdinから読み込んで成功したコード
https://github.com/neetsdkasu/Paiza-POH-MySolutions/blob/master/POH6/tsubame/After-the-event.cob
これ以外のイベントでも/dev/stdinから読み込んだことはあるっぽいけど、何でそうしたかは覚えてない
それがこのコード
https://github.com/neetsdkasu/Paiza-POH-MySolutions/blob/master/POH8/Mizugi/Main.cob
1000bytesずつ読み込みながらデータを読み取っているっぽい
(もっと賢いやりかたありそうだけど、知らん)