カメヲラボ

主にプログラミングとお勉強全般について書いてます

ショートコーディング問題の評価手順

CodeIQで現在出題中の、ショートコーディング:きのこ危機一髪について、1バイトを削るために悩んでおられる方も多数いらっしゃるかもしれませんので、コードサイズの判定方法とジャッジ方法の詳しい説明を書いておきます。

前処理について

まず、ご提出いただいたテキストファイル(仮に"src.c"とします)に対して、

wc -c src.c

コマンドを実行し、ファイルサイズを取得します。この後のコンパイル・実行テストに通れば、これが記録として認定されます。
ファイルサイズを取得後、Ideone.comで実行するために、テキストファイルのエンコーディング"UTF-8"に変換します。また、変換にはnkfコマンドを用いています。

$ nkf -v
Network Kanji Filter Version 2.1.3 (2013-11-22)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2013, The nkf Project.

Ideone.comではソースコード名が"prog.c"になっているので名前を合わせておくと、たとえば

$ nkf -g src.c
Shift_JIS

となれば、

$ nkf -Sw src.c > prog.c

nkfコマンドを実行します。エンコーディングが"ASCII"であったり、すでに"UTF-8"になっているものは、単に

$ cp src.c prog.c

のようにコピーします。この結果、"ASCII"や"UTF-8"でご提出いただいたコードは何ら問題ないはずですが、そうでない場合は変換前後でファイルサイズが変化するケースが出てしまいます。ファイルサイズが変化してしまっても、あくまで記録は提出されたファイルのサイズということを強調しておきます。

コンパイル・実行テスト

変換が終わったら、ローカルサーバやらIdeone.comにSubmitしていきます。Ideone.com上で実行する場合、出題初期の頃はAPIを呼び出すRubyのコードと、ブラウザ上(コピペ)で動かくことを併用していたのですが、エンコーディング絡みの問題が出てきてしまいましたので、Ideone.com向けにエンコーディングを変更する操作をnkfコマンドで行うことにしました。また、混乱や誤操作を避けるため、Ideone.comへのSubmitはAPI経由に一本化しました。そんなわけで、不正解になった方で出力内容が書かれていますが、この記事を書く前にご提出いただいた分のフィードバックメッセージには、ブラウザコピペとAPI経由で出力結果が混在している場合があります。混乱された方もいらっしゃるかもしれませんが、申し訳ないです。それからテストケースについてですが、
Ideone.comで使用するテストケースは何種類かありますが非公表とさせてください。
ローカルサーバでのテストは、1から10000すべての値を用いています。

追記:
gccのオプション書き忘れてましたね。

gcc -O2 -lm -Wall

です。

以上、また必要に応じて更新するかもしれません。