AtCoderの問題をUE4のブループリントで解いてみる実験
「むしゃくしゃしたので、AtCoderというサイトの、プログラムコンテストに参加してたんだけど……」
妹「最近ブログをさぼってると思ったらそんなことを」
「よく考えると、あんまりプログラムって得意じゃない気がしたので、ちょっと練習しとこうと思って。ネットで参加できるから簡単だし。問題は簡単じゃないけど」
妹「賞金はどれぐらいなの?」
「いやそういうのは別にないんだけど……」
妹「なぜそんなことを?」
「それはなんというか、妹がやってるスプラトゥーンのフェスと同じで、基本的には面白いからやってるだけというか……プログラマーを目指す人が履歴書に書けるというメリットは一応あるんだけど」
妹「面白いんだ」
「たくさん解けたり早く解けたりすると順位が上になっていって、そうするとランク的なものも上がってという」
妹「なるほどゲームっぽい」
「こういうの色々あるんだけど、AtCoderは問題文が日本語だし、結構コンテストも頻繁に開催されてるし、過去問題も公開されてて練習しやすい」
妹「プログラムのコンテストはいいけど、プログラム言語はどうなってるの? いろいろあると思うんだけど」
「色々対応している。C++とかJavaとかPythonとか……」
妹「ちょっと聞いたことある名前」
「有名どころのプログラム言語にはだいたい対応している」
妹「じゃあ兄は何つかってるの?」
「Nimという言語なんだけど……」
妹「まったくこれっぽっちも聞いたことがない気がする」
「使ってる人が少ないマイナーなブキとか見かけたら、とりあえず使ってみたくなるでしょ?」
妹「そんな理由……」
「まあ実際問題としてユーザー数が多い言語の方が、困った時に検索できるし、UE4でも活用することを考えるとC++かPythonでやるのがいいとは思う。ちょうどAtCoderでの利用者数上位でもあるし」
ブループリントで解いてみる
「で、そうやって何の言語を使って解いてもいいわけだから、別にブループリントで解いてもいいんじゃないか? というのが今日の実験」
妹「解けるの?」
「解ける解けないでいうと、解ける。ちょっとめんどくさい問題もあるけど」
「例えばこのサイトに載ってる問題、1問目の場合だとこんなかんじになる」
「通常のプログラムだと、標準入力・標準出力という仕組みが合って、問題文もそこから受け取る仕組みなんだけど、ブループリントには無いみたいなんで、とりあえず文字列として関数に渡して、その結果を文字列で返すという仕組みにした。その関数をレベルブループリントで呼び出してる」
妹「ひょっとしてこれは簡単な問題なのでは?」
「毎回のコンテントには簡単なものから難しい問題まで出る。それにビギナー向けのコンテストの場合は、一番簡単なのはForループを使わなくても解ける問題が出るから。プログラムの基礎と、解答する仕組みがちゃんと書ければ正解できる」
妹「プログラムのコンテストっていうから、もっとやばいやつなのかと」
「初心者から上級者までいるから、全然解けない問題ばかりだと初心者もつまらないし。もちろん上級者用に高得点で難しい問題もある」
C++への変換
「というわけで問題が解けたとして、これを解答する場合、普通はそのソースコードをコピーして貼り付ければいいんだけど、ブループリントの場合はそうもいかない。そこでブループリントのネイティブ化というやつが使えないものかと」
妹「なんだっけそれ」
「ブループリントを速くする仕組みなんだけど、内部的にいうとブループリントをC++に変換してる。だからその変換されたやつをコピペすれば動くんじゃないかと。実際にScratchという言語もビジュルプログラミングだけど、C++に変換して解答に成功してる人がいる」
妹「じゃあUE4でもできるの?」
「できるかなと思ったけど、できなかった……」
「NativizedAssetsというところにC++のソースコードは出てきたんだけど、中身がややこしいことになってる。それにUE4のファイルが一緒じゃないとコンパイルできない状態だから、このへんのを送ってもコンパイルエラーになる。なので計画失敗」
妹「C++ってなんかむずかしいね」
「普通に自分で書けばこんなに文字たくさん書く必要ないんだけどね。機械的に変換されたものはどうしても読みにくいものになりがちというか、元々高速化が目的でこれを読んでどうこうすることが目的の仕組みじゃないというか。そのまま動かせたらブループリントでアルゴリズム学習とか出来るかなと思ったんだけど」