TSG(東大コンピュータサークル)で行われているEsolangコードゴルフ大会を,まるごと輸入してKMC部内でも開催しました. 日程は2019-03-29から 2019-04-03で行いました. その様子を実況します.
各言語ごとの最終提出の解説はこちらです: github.com
- 問題やシステムは全てTSGさんのものをお借りしています.
- サイト(静的): http://esolang-0.wass80.xyz/contests/komabasai2018-day1/
- ルール:
- 参加者は赤と青のチーム分かれて言語の陣取りを行う.
- 自分のチームの陣に4近傍で隣接している陣の言語に提出ができる.
- すでに取られている陣を取り返すためには,より短いコードを提出する.
- 自分のチームの提出コードは見れるが,相手チームの提出コードは見れない.
- 問題概要: hとwを受け取って
*
からなる長方形を出力する.
1日目
- システムを設置した.
- TSGではミニ大会だったので14言語だったが,今回は8言語更に増やしておいた.
- 参加したい人はいつでも参加できるようにした.チームは適当に割り振られる.
最初にC言語でACされた青チームのコード (140B):
#include<stdio.h> w,h,y=0,x;main(){scanf("%d\n%d",&h,&w);for(;y++<h;){printf("*");for(x=0;x<w-2;x++)printf(y>1&y<h?" ":"*");printf("*\n");}}
その日のうちに赤チームが取り返す (101B):
y,i,j;main(x){for(scanf("%d%d",&y,&x);i<y;puts(""),++i)for(j=0;j<x;++j)printf(j%~-x&&i%~-y?" ":"*");}
両者素朴な二重ループによる実装を行っている.
2日目
- 思ったより参加人数が増えたので12言語増えた.
- 難解言語が足らない気がしたので, Evil, Unreadable,Malbolgeを追加した.
- 提出可能な陣も4近傍から8近傍に増加.さらにマップの縁は反対側につながるように.
- 参加者は11人
青チームがC言語を取り返す (99B):
i,w;main(h){scanf("%d%d",&h,&w);for(i=++w*h;i--;)putchar(i%w<w-1&i%w>1&i/w<h-1&&i/w?32:i%w?42:10);}
赤チームが更に取り返す (94B):
y,i,j;main(x){for(scanf("%d%d",&y,&x);j<x||(j=puts(""),++i<y);)putchar(j++%~-x&&i%~-y?32:42);}
数式を用いることで1重ループによる実装を行うことに両チームとも成功している.
3日目
- 参加者がまだまだ増えるので,言語を13言語増やした,
- これで当初の倍のマップサイズになった.
- 真ん中の言語を何にするか悩んだが,京大ということでSchemeにした.
- 青チームは言語内で他の言語を使い始めた.
- なでしこはJSを実行し,Emojicodeはperlを実行するようになった.
また青チームがC言語を取り返す (90B):
main(w,h,i){scanf("%d%d",&h,&w);for(i=++w*h;i--;)putchar(~i%w/3&~(i/w)%h/2?32:i%w?42:10);}
赤チームがまた更に取り返す (89B):
y,i;main(x){for(scanf("%d%d",&y,&x),i=++x*y;i--;)putchar(i%x?-~i%x>2&&i/x%~-y?32:42:10);}
4日目
- どんどん埋まっていくボード.
- ネットワークに接続して問題を解くことを禁止した.
$_=<>.<>;s/\s//;exec "wget -O- xxx.jp/$_"
がperlの答えになっちゃうの悲しいのでこうなった.
青チーム更に提出 (88B):
c;i;main(w,h){for(scanf("%d%d",&h,&w);!i++?i=~w,h--:putchar(!i?c=10:i%w/2*h*c?32:42););}
赤チームが提出 (87B):
y,i;main(x){for(scanf("%d%d",&y,&x),x++;i<y*x;)putchar(i++%x?i%x>2&&i/x%~-y?32:42:10);}
5日目
- 全ての入力に対して正常に動作することを要求した.
- 入力が偶数の場合だけとか,素数の場合だけとかで動くコードが存在した.
青チームがC言語に提出.これが最終提出となる (86B):
h;c;i;main(w){for(scanf("%d%d",&h,&w);h;putchar(++i%w/2*c?32:i>w?c=--h-1,i=0,10:42));}
最終日
- Malbolge以外のすべての言語が埋まる.
- Malbolgeは提出コードサイズ上限に収まるコードが存在しないと思われる.
- cmd.exeは出力の改行コードがどうしても\r\nになってしまいACできなかったのを,システム側で修正した.
結果
青チームの勝利となりました.
最終的に参加者は22人.合計AC数は442回でした. たくさんの参加ありがとうございました.
言語ごとの解説はこちらを読んでください: github.com
大会システムを作ってくださっているhakatashiさんに感謝します. github.com
たいへん盛り上がったので,また開催したいです.