ゲームジャム(文化の日編)

はじめに

 こんにちは。まんじゅうです。秋大祭お疲れ様でした。秋大祭という一大イベントも終わったことで、ついにTNPにも代替わりの時期が訪れ、新会長になりました。改めて、これから一年よろしくお願いします。

 本題に入りますが、11月2日(土)にゲームジャムを行いました。今回は企画したのが前日だったため、あまり集まらないだろうと思いましたが、参加者は4人とそこそこ集まりました。今回は文化の日前日ということで、「食欲の秋」、「運動の秋」、「芸術の秋」にちなんだお題として、「目玉焼き」、「障害物競走」、「一筆書き」の3つを(単語ガチャで)設定しました。

 参加者から成果物の紹介とコメントを貰っているので、 そちらも見ていただけたらなと思います。

制作物一覧

1年次 ハイブリッジ

開発環境 DXライブラリ

 このゲームは、自機である白い丸を操作して赤い丸に見つからないようにゴールを目指すゲームです。今回は自機と敵、フィールドと敵の視界まで実装できました。今後は敵の行動とスタート、ゴールを実装して、ゲームとして遊べるように頑張りたいです。

2年次 まんじゅう

開発環境 Unity

 「障害物競走」というお題があったので、3Dのシンプルな障害物競走を作ってみました。Unity初日でどこまでできるかやってみようと思って始めましたが、ほぼコーディング無しでゲーム部分が作れたのでとても驚きました。今後はシーン遷移を実装してタイトル画面とクリア画面を作って遊べる形のゲームにできるよう頑張ります。

3年次 いっちー

開発環境 DXライブラリ

 お題のひとつ「目玉焼き」を飛ばすゲームです。マウスをドラッグすることで、目玉焼きの飛ばす方向と力を決定します。目玉焼きをお皿の上に乗せることができればゲームクリアとなりますが、床の上に落ちるともう一度となります。

 ゲームジャム終了後に思い付いた上に、開発期間として1週間ほどかかったので、限られた時間でゲームを作るゲームジャムの趣旨とは違うものになってしまいました。

 ゲームジャム当日は、目玉焼きを作るゲームを作ろうと思ったのですが、良い案が浮かばず、ただ卵を割るプログラムができました。

4年次 HIM

開発環境 Webアプリケーション

『お絵かきソフト』

お題: 一筆書き
という訳で、作りました。
一筆ではないですが(挫折しましたorz)、お絵かきできます。

Javascriptとcanvasで作りました。

マウスで描きます。色とペンの太さを選べます。

一筆書がどーしても動かなくて断念したのが悔しかったです。次こそは…

最後に

 やっぱりゲームジャムは良いですね(テンプレ)。やる気も出ますし、何か新しいことにチャレンジする機会にもなるので。冬休みとかにまた開催したいですね。

 それと、今回試験的に1日だけの超短期間ゲームジャムを開催しましたが、皆ある程度形になっていて良かったです。これの影響でジャムの参加ハードルが下がればいいなと思います。

 それでは今回はこのあたりで。最後まで読んでいただいてありがとうございました。また次回のゲームジャム記事(多分)で会いましょう。

【月一】C++っておいしいの?

はじめに

お待たせ。待った?どうもプログラミングサークルTNP所属の広報担当kurokuです。(キツ…

先日サークル内で役職の引継ぎがあり、見事、広報担当(ブログ・Twitter更新)になってしまいましたなりました。

引継ぎの際に反省会も行われ、更新頻度について触れました。いい機会なので僕の目標というか、目安として(最低でも)月一回はブログを更新していきたいと思います。

 

そうはいうものの、毎月更新するとなると話題がなくなります。ただでさえ僕はグラブル、YouTubeでしか時間をつぶしていない気がするので、こんなことなら別に書かなくてもいいよなぁとか思うわけです。(むしろ書かない方がいい

そこで、サークル室のホワイトボードにブログの題材として質問などを受け付けようと考えました。誰でもいいのでゲーム制作でわからないことやプログラミングについてなどどんなことでもいいので書いてみてください。(コメント等でも歓迎です!

それについて僕が少し勉強して、このブログでできるだけ簡潔に、情報共有ができればなと思います。

(ただ、あまりにおじさんを悩ませるような難しい質問をすると僕の独断でなかったことにしてしまうかもしれません…)

 

C++ってどうなの?

さて、いよいよ本題です!ホワイトボードに早速題材が書いてありました。

「C++について」

 

いやいや。。

(雑じゃない?)

 

まぁいいんです。書きます。こんな感じでどんどん題材ください!

(できればもうちょい具体的に!

C++とは、手続型プログラミング言語であったC言語にオブジェクト指向やジェネリックプログラミングの考えを取り込んだ言語です。それぞれわかりやすく言うと、

・手続型

 プログラムを順番に実行していく

・オブジェクト指向

 オブジェクト(データと処理内容)ごとに独立させる考え

・ジェネリックプログラミング

 型などを意識させないように抽象化して記述する

といった感じ。

一見してC言語をもりもりにパワーアップさせたのがC++といった感がしますが、それは間違いありません。

しかし、そんなC++にも弱点はあります。

それは文法が難しいこと。

 
(僕はC言語由来のプログラムしか書けないのでわかりませんが)多重継承というのを組み込んだせいでポリモーフィズムにも影響が出たりでなかったり(?)
 
 
 
 

よくわかんないですねーー。

 
 
 
ですがサークル内でゲームを作る分には使えて損はないです。ライブラリもリファレンスも結構多めですし、何よりC言語が書ければC++も書ける!

これで終わってもいいんですが、内容がなさすぎるのでどんなことができるのかについて軽く触れたいと思います。

#include<iostream>

#include<string>

int main(void) {

std::string s = “hello”;

std::cout << s << std::endl;  //hello

       return 0;

}

C言語だとchar型の配列で書く必要があった文字列もC++ではstring型(正確にはstringクラス)に格納することができます。それに加え、文字列同士の足し算や部分文字列(例えば”ell”)を取り出したりなんかもできます。

std::cout<<s+s<<std::endl;  //hellohello

std::cout<<s.substr(1,3)<<std::endl;  //ell

#include<iostream>
#include<vector>
int main(void) {
  std::vector<int> vec;
  vec.push_back(0);
  vec.push_back(1);
  vec.push_back(2);
  for (int i = 0; i < vec.size(); i++) {
    std::cout << vec[i] << std::endl;  //0,1,2
  }                   

      return 0;
}

vector型(クラス)は配列とほとんど同じ挙動をします。ただ、宣言の部分で要素数を書いていないにもかかわらず値を格納することができています。

vectorは可変長配列と言われ、要素数を自由に変化させることができます。上の例だと宣言時は要素数は0でしたがpush_back()するたびに自身で要素を増やし格納しています!(push_backは末尾に格納するメソッド(関数))

さらにvectorはジェネリックプログラミングの要素も持っています。宣言する際にvector<int>としていますが、これはint型を要素に持つvectorを宣言しています。たとえばintの部分をdoubleやboolあるいは、自作の型MyDataとしてもvector<int>と同じく扱うことができます!

最後に紹介するのは演算子のオーバーロードです。

関数やデータ構造をユーザ側で定義できるのは知っていると思いますが、演算子についてもユーザが定義することができます!

例えば、

#include
#include
std::vector<int> operator*(const std::vector<int>& vec, const int& t) {
  std::vector<int>v(vec.size());
  for (int i = 0; i < vec.size(); i++) {
    v[i] = vec[i] * t;
  }
  return v;
}
int main(void) {
  std::vector<int> v = { 0, 1, 2, 3, 4 };
  v = v * 5;
  for (int i = 0; i < v.size(); i++) {
    std::cout << v[i] << std::endl;  //0,5,10,15,20
  }
  return 0;
}

と書いてみます。本来vector<int>*intなんてできませんが自分で*を定義することでそれを実現できてしまいます!

しかし、演算子オーバーロードを闇雲に使うと演算子本来の挙動と整合性が取れなくなりとても危険です!詳しいことは各自で調べてもらうとして、できるだけあらかじめ実装されているものを使うようにしましょう。

まとめ

大したこと書いてないのでまとめもくそもないんですが、まぁC++はいろいろ楽だよってことが伝わればいいかなと思います。興味が出てきた人はC++について調べたり、聞いたりして闇をのぞき込んでみればいいと思います。

こんな感じの雑まとめをこれからも月一以上で出していくのでどうぞお楽しみに!kurokuでした~。

ゲームジャム(1年生向け編)

はじめに

こんにちは、3年生のいっちーです。9/27~9/28に1年生向けのゲームジャムを行いました。

今回は1年生向けということで、2年生以上とペアを組んでゲーム制作を行うペアプログラミングを行ってみました。

ただ、ゲームジャムは2日間を予定していましたが、2日目は日程が合わない方が多く、私を含め2名だけの参加でした。なので、1日目と2日目でテーマを変えた実質1日のゲームジャムになりました。


1日目

1日目のテーマは「」「消える」「疾走感」でした。参加者は1年生が3名、2年生以上が3名で丁度良くペアを組むことができました。

なりょー(1年) & まんじゅう(2年)

開発環境:DXライブラリ

落ちてくる雨粒や障害物を避けながらゴールを目指すアクションゲームです。

コードを書く前に、ステージの概略や当たり判定の計算方法などを紙にしっかり書いていたのが印象的で、丁寧にプログラミングをしていると思いました。私は行き当たりばったりで進めていくことが多く、それがバグの原因にもなっているので見習いたいと思います。

T.S.(1年) & ずっきー(2年)

開発環境:Unity

プレイヤーを操作して、落ちてくる雨粒を避けるゲームです。

プレイヤーは雨粒に当たると小さくなっていき、最後には消滅してしまいます。当たり判定はプレイヤーの大きさに依るようで、プレイヤーが大きいうちは避けるのが難しく、プレイヤーが小さくなり消滅寸前になると避け易くなるという、バランスの考えられたゲームだと思いました。

UMA(1年) & いっちー(3年)

開発環境:DXライブラリ

前回のゲームジャムで制作した、鳥を火炎弾で焼き鳥にするストレス解消ゲームの改良版です。

当たり判定や火炎弾の連射の修正、焼き鳥を画面上方向に移動させて昇天させるなど、システム面と演出面で改良を加え、より一層ストレス解消が見込めるゲームとなっていました。


2日目

2日目のテーマは「強靭」「丸い」「焦燥感」でした。

まんじゅう(2年)

開発環境:RPGツクール

ボールをぶつけあうスポーツのようなゲームだそうです。

今回はアニメーションにこだわったようで、ボールがプレイヤーと敵の間を動くようにアニメーションし、ボールを投げている様子が表現されていました。

また、ある条件を満たすとプレイヤーの覚醒イベントが発生し、ステータス向上に加え、強力な必殺技が使用可能になるなど、一方的な試合になっていました。

いっちー(3年)

開発環境:DXライブラリ

ボールを操作して、制限時間内にスタートからゴールまで移動するイライラ棒のようなゲームです。

ボールには慣性が働いており、床には傾斜がついているので、思いのほか操作の難しいゲームになりました。また、壁に当たると加速度が反転します。


おわりに

制作期間がほぼ1日と短い時間でしたが、1年生全員がゲームを完成させることができたので、ペアプログラミングは成功と言えるのではないでしょうか。TNPはほとんど個人制作で今回のように複数人でゲーム制作を行うことがないので、これをきっかけにチームでプログラミングする機会が増えればいいなと思います。

ゲームジャム(夏休み編)

はじめに

 こんにちは。2年次のまんじゅうです。
記事を書くのは初めてなので、変なところとかあるかもしれないですが、どうか温かい目で読んでくれればと思います。

 今回のゲームジャムは8月14日と15日に開催しました。お盆でしたがそこそこ参加者がいて嬉しかったです。
 また14日、15日のどちらも猛暑日だったので、誰も熱中症にならなくて良かったと思います。

 今回はお題に沿って何か作るのではなく、なるべく自分で考えて制作する、という方向で企画していました。
 そのため、お題ではなく、あくまで何を作るか思いつかない人への救済措置として「倉庫」、「火」、「駐車場」、「重力」、「落とす」という単語を提示しました。

作品紹介

1年次 UMA

開発環境 DXライブラリ

 初年次講義で扱った「フラッピーバード」のソースコードを元に作ったそうです。
飛んでくる敵を避けたり、うまく弾を当てたりしてスコアを稼ぐゲームとなっています。
 元にしたゲームがある、という点を加味しても、初めての制作物としては完成度が高いと思いました。

2年次 たか

開発環境 DXライブラリ

 卍型の自機が卍の先端から放つ攻撃を敵に当てる、というゲームのようです。
攻撃を放つと、次の攻撃が可能になるまでの待機時間が発生したり、敵がランダムで生成してされた瞬間に攻撃されないよう、
敵の攻撃不能時間を設定していたりと、細かいところまで作り込んでいると感じました。

2年次 まんじゅう

開発環境 Siv3D

 「街コロ」というボードゲームを作ってみようと頑張ってました。
ダイスを振る機能と、出た目による建物の効果の処理は実装できたのですが、
 時間が足りなかったために建物購入の処理が完成せず、ゲームとしてはまだ成り立っていない状態です‥。

2年次 ズッキー

開発環境 Unity

 今年の夏コミに出した迷路ゲームを改良したものだそうです。
ランダムで壁を生成するようにし、それによって起こりうる詰み状態を防止するために壁を壊す機能を追加したそうです。
 また、壊した壁の種類と枚数によってゲーム終了時のスコアが増減するようにして、高いスコアを出すにはしっかり迷路を歩かないといけないようになっていました。

3年次 いっちー

開発環境 Unity

 なんと時間内に2作品完成していました。
 1つが火事の建物から人を避難させるゲームで、円形の足場を操作して障害物を避けつつ、小島まで避難させる、というものでした。
足場で人がバウンドする上に、小島が小さいため、難易度は高そうに見えました。


 2つめが、人を前に飛ばして、乗るとジャンプするキノコを駆使して停止するまでの距離を競うゲームでした。
地面に人がぶつかって転がり、その先のキノコに当たってまたジャンプ、という動きをしていたので、見ていて面白かったです。

3年次 うおちー

開発環境 Unity

 下に重力がかかっている空間で、上下に移動して火の玉を避けるゲームです。
当たり判定が実装できていないとのことですが、ゲームとしてはほとんど完成しているように感じました。

最後に

 やっぱりゲームジャムは良いですね。
他の人のアイデアやコードの組み方などを見て学べる機会になりますし、自分の制作活動への意欲も高まります。
 夏休みは長いのでだらけてしまいがちですが、今回の会でのやる気を思い出して頑張って制作していこうと思います。

ICPC2019国内参加記 Tech_ONS編

最近,大学で何を学んだんだろう,何をしてきたんだろう,といろいろ複雑なお気持ちな,四年生の老害,ガナリヤです

今回は,07/12(金)に開催されたICPCプログラミングコンテストのインターネット予選の参加記を適当ながら書いていこうと思います

おそらく,あとでYARUDAKEチームからも参加記が上がると思います(上がるよね(老害))


開始前

午前中,授業だったり研究のお話だったり色々と辛いお気持ちになっていました(かなしいね

かなしくなったので,14:30に会場である部屋に先入りしました(今回,監督員の先生には,この時間帯に部屋を予約してもらうなど,多くのご協力をいただきました.頭が上がりません.あとで感謝の品を持っていこうと思います.)

部屋に入る途中,後輩のkurokuくんに出会いました
覚悟がちげえまろ

早く来すぎたかなと思いながら,持参したUSキーボードの準備やパソコンの立ち上げなどをしていました(大学のキーボードはJISなので)

その後,チームメンバーのsiiiecや三年生のいっちーなども来て,時間を無駄にしていました(集合早すぎた,ごめんなさい)

今回,Tech_ONSは全員が四年生で研究室や,自分の場合入試勉強など非常に忙しく,国内模擬予選しか通し練習が出来ていませんでした.
そのため,自作ライブラリはほとんど去年ので,おそらくバグだらけだったと思います(使わなかったので尚良)

今回持ってった本は

の三冊です(普通だな!)

あと,マスコットとして,ニコニコテレビちゃんと,プロ生ちゃんのアクリルスタンドを持っていきました,かわいいね(かわいいので

だらだらsiiiecと話していると,C_avaも来て,打ち合わせをしながら時間を潰しました
全員研究室が違うので,集まるのは大学でもそうそうないんですよね
四年生って研究するけど,研究できなくないか?

そんなこんなしていると,16:30になり,ICPCが始まりました


ICPCコンテスト

問題リンク

位表リンク

今回のICPCは,去年と同じく最初の方針は同じで

  • C_avaがVisual StudioRTAをする
  • siiiecがA問題を通す
  • ganariyaがB問題を通す
  • CはC_avaのC
  • Dを三人がかりでなんとかする

みたいな感じでした
あと,誰かが解法を書いている間に,エッチなテストケースを書いて嘘を落とす,みたいな方針でした

プリンターの前でganariyaとsiiiecが待機して,C_avaが印刷をしました

B問題を見ると,あ^〜ってなる感じの問題でした
簡単じゃ〜んって思いながら,平気でBFS書いていました(無駄)(戦犯)

コンテスト終了後,kuroku君の解法をきいて,マンハッタン距離でいいじゃんってなりました
今回,自分のミスが響いて結構無駄な計算量を書けてしまいました
次のAtCoderなどのコンテストからは,わかっても,一分追加で考察をしてからコーディングを行おうと思いました

B問題の嘘解法(重すぎ)が生えた時,siiiecがコーディングしてました,はやい

C_avaのエッチなテストケースも通ったので,Aを通すと,そりゃもうAcceptでした,嬉しい

(A問題結局どういう問題だったんだろ)

その後,自分がB問題を解いて,当然遅い実行時間でしたが,Acceptはできました
色々と反省が残るコンテストでした・・・

Bをお通ししたあとは,三人でCをいちゃこら考えていました

C問題は,$3^N$で全探索すればいいな〜ってなって,その後ganariyaとsiiiecで詰めながらコーディングしてました

いま思い返すと,このCも実装をミスっていて,実行時間が肥大化してました
本当に思い返すとなんでそんなコード書いてるんだ?ってぐらいしょうもない実装を書いてて悲しくなりました,ほんとだめだめです

C問題を実行しながら,まあ答えが出れば通るやろ〜〜って,言いながらD問題に移りました

D問題は,カウンタをえいえいする問題で,なんかいやらしい問題だなってなりました(ぱっと見簡単だけど,多分むずい)

三人で考察してると,C問題の出力が出たので,投げるとWA(は?

とりあえず紙出力して,自分がCのデバッグ,
siiiecとC_avaでD問題の考察をしていました

Cは結局,分銅を追加しなくてもよい薬は先に取り出す,という操作でうまく行きました
この処理は,最初に提出する前に一度書きかけて「いらないか!」となって消したのですごい悔しい
すべてが裏目に出ている

Cはその後足りない処理を書き足したら,結局通り,再びD問題で停滞しました

三人で色々と考察を行い,C_avaとsiiiecで実装を始め,サンプル地獄になっていました

その後も色々と考え,セグ木+DP?って思いながら考察してたら非情にも時間になりました

Tech_ONSは今年もまた,3完で幕を閉じたのです


振り返り+老害より

今年のICPCでは,Tech_ONSは
495チーム中,138位で終わりました

お気持ちとしては,悔しいというお気持ちと単純に力不足だったという感覚です

B, Cでガバ考察をしてしまったので,本当に申し訳ないし悔しいです

また,やはり三人がかりでも僕たちだとまだD問題は解けず,これが解けるようにならないと安定してアジアに行けないんだなと思いました(Dの解法は結局DPでした(DはDPのD))

嬉しい点としては,後輩チームが初参加で2完をしていて,頼もしいなと思いました
TNPの競技プログラミングを始めた二年生も合計4人?(自分のおそらくの観測上)になり(最近かなりTNPから増えていて嬉しい),秋田大学もどんどん競技プログラミングや,他のアプリ制作のコンテストに出て,どんどん秋大が強くなればいいなと思いました

このチームTech_ONSで出場するのはおそらく今年で最後なので,アジアに行きたいなぁと思っていました

結果としては駄目でしたが,非常に貴重な経験が出来たので,競技プログラミングを初めて本当に良かったと思います

来年以降もTech_ONSとして自分が出られるかは現状分かりませんが,来年以降も秋田大学で後輩チームがICPCに参加し,アジア大会への切符を掴んでほしいと思いました.


是非,このICPC・競技プログラミングの文化がTNPに続いて,来年以降の後輩チームが国内大会・アジア大会で活躍する姿を老害として見守りたいなと思います.

ガナリヤでした!


YARUDAKE編も見たいなぁ|・`ω・)

ICPC国内模擬戦2019 Tech_ONS参加記

こにゃにゃちは〜〜
ひとまず色々と片付いて,色々と吹っ切れてきたガナリヤです.
将来設計がだいぶ怪しくなってまいりましたねこれは

最近,いろいろとVTuberといい,Twitterといい,ヒリつきすぎていて,嫌な情報社会になってきたなあって感じますね


さて,今回,TNPのメンバーからなる2チーム「Tech_ONS」と「team_YARUDAKE」がICPC国内模擬予選(https://jag-icpc.org/?2019%2FPractice%2F%E6%A8%A1%E6%93%AC%E5%9B%BD%E5%86%85%E4%BA%88%E9%81%B8)に参加したので,参加記をまとめておこうと思います(最近投稿も無かったので)


本番一時間前

研究室にこもって面接練習をしていたガナリヤは,ウキウキでTNP部室に向かいました,当たり前ですね
研究室はなんかジメジメしていて,お気持ちが下がるのでア

TNP部室には,すでにsiiiecとkurokuくんがいて,設営が始まってた感じでした

ちなみに僕の所属する四年チームはTech_ONSでganariya, siiiec, C_avaで構成されています.
二年,三年チームはteam_YARUDAKEで2年生二人と3年生d絵構成されています.

設営に取り掛かりましたが,色々な問題が発生してて終始ドタバタしていました.
具体的には

  • siiiecのパソコンが印刷機ようになりそうになり,自分のmacbookが候補になる
  • 自分のmacbookをディスプレイにつなぐケーブルがない
  • C_avaが到着し,Windowsをつけるも,Wifiになぜか繋げない(結局あれはなぜ?)
  • siiiecのパソコンをなんとか持ってくる(印刷機PCを別に用意した)
  • Visual Studioの設定がうんち(僕はよくわからないので,お気持ち担当していました)

多分,本番当日もグダグダになるので,早めに集まろうね!って思いました,反省

僕はこのグダグダというか,ドタバタしながらコーディングしたり考察するのがICPCの楽しいところなのかな?って気がしますね


デュエル開始!(14:00)

14:00からついに模擬戦が始まりました〜〜
長さは三時間で結構長いねって思うかもしれませんが,全然足りないんですよね(11問でるので,無理)

上記の問題文は(https://jag-icpc.org/?2019%2FPractice%2F%E6%A8%A1%E6%93%AC%E5%9B%BD%E5%86%85%E4%BA%88%E9%81%B8%2F%E5%95%8F%E9%A1%8C%E6%96%87%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88)

らお借りしました

僕は印刷係だったので,A・B問題を印刷
C_avaはテンプレートの写経地獄
siiiecはA問題の考察をしてました

A・B問題を印刷し終わったところ,siiiecはA問題の解法が生えたらしい 早い 僕いらなくないですか?

そんなこんなで,C_avaが設定してくれた(縁の下の力持ち)テンプレートで,siiiecがコーディング始める

見た感じ大丈夫そうだったので,僕はB問題に行く


B問題は毒の沼地っていうやつでした.

$100{\times}100$マスのうちに,通れるマスと,毒のあるマスがあります.
あなたは最初$(x_i, y_i)$に居ます.
そして,合計100回$(to_{x_i}, to_{y_j})$に順番に移動したいです.
このとき,毒のあるマスを通る回数を最小にしたいです.合計何回ですか?

みたいな問題です.

0-1BFSじゃ〜〜ん(やるだけか?)ってなり,一応考え直してから,僕0-1BFSの書き方知らないってなる(は?)

C_avaが圧縮しようとしていて,それはつらたんではってなる(ぶん回すのが国内戦だと正義なので)

結局仕方がないので,ダイクストラっぽいBFSで誤魔化す実装をすることにする.
なんとなく書いたところ,案の定プログラムが終わらない.

目grepすると,Q.pop()(priority_queueからポップをしてない)をしてない,これ何回目でしょうか

それを外すと,時間はかかるけどうまく動いているっぽいので,現代のCPUとメモリに感謝を捧げて,siiiecとC_avaが考えているC問題に移る

結局,A問題・B問題はAC出来ました


C問題にうつると,C_avaとsiiiecが唸ってた

C問題もグリッドの内容で
上下左右斜め好きな方向に1マス進むと,その1マス先に,廻小宮が生える.
その廻小宮の太刀筋の位置に入らないように繰り返し移動し,目的にまで行く場合最小回数は何回ですか?

みたいな問題.多分よくわからないと思うので問題文を読んでください

C_avaが図示して,説明してくれた.これ答えでは?

サンプルをみると,なんとなくX座標とY座標の絶対値の足し算に,+1か−1かそのまま,みたいな感じがある(優しいね)

僕は考えたくなかったので(こういう問題基本的に僕は解けない),とりあえず偶奇で分ける発想に三人で至る

すると大体の場合は上手くいくが,偶数と奇数のときに例外が発生する感じがある.(偶数が0のときと,0以外の偶数のとき)

とりあえずここで,偶奇以外は自分が実装しておいた

すると,C_avaとSiiiecから片方0ならこれ,そうでないならこの処理!みたいな指示が来たので,実装する,実装汚いね(反省します)

ICPCを信じて,お祈り提出をすると通る
テンション上がりますねこれは,これだからICPCやめらんねえんだよなこれ

二回目の提出も通る,嬉しい,サンプルのおかげ ありがとう全てにありがとう(藤岡弘)

ここで,大体一時間40分経過.ここから地獄のD問題が始まる


D問題は

編集距離のDP問題があるよね!
それに,もう一つの追加で回転(先頭の文字一個を文字列の末尾に持っていくよ)が追加されてるよ!
文字列$X$を文字列$Y$に変形するのにかかるコストを求めてね?

みたいな問題.

ここで発生した問題は,誰一人として編集距離覚えてないことなんですよね(笑い事ではない)

編集距離のアルゴリズムを覚えてないので,その場で自分が編集距離の解法を生やす
半年前の自分が勉強していたので,有能(忘れていたのはぐう無能)

編集距離のアルゴリズムは出たのはいいものの,回転をするDPがよくわからない.

C問題で味をしめた僕たちは,とりあえず回転の回数を全探索しようみたいになって,全探索してみる.

色々試すと,サンプルが合う
これだからICPCはやめらんねえんだよな〜って言いながらSubmitしたら,WAしました

そっからどうしてもD問題の解法が生えない
順位表見ても,また今年もC問題とD問題に大きな崖が出来ていて,やっぱり4完が必須なんだなって思った

C_avaとsiiiecはE問題に行ってしまう(基本的にD解けないときは,Eは絶対に解けないので,今回の国内予選は順位表を見ながらDに専念したい みんながEを解いてたらEに行く戦法を取りたい)

Eは,最大クリークに落とし込む問題だったみたいです,ライブラリ自体持ってないので(こんなん出してええんか?)

結局Dが解けないまま,三時間が経ちました,無情



結局そういうわけでTech_ONSはABCの3完で180チーム中51位でした.
4完が40チームあるのと,本番は500チームぐらいあるので,やはり4完しないと厳しい感じがします

残り時間もだいぶ短くなってきました.
もう一回アジア大会に出れるように,頑張ろうと思います
ガナリヤでした!

ゲームジャム(GW編)

はじめに

こんにちは、会長のいっちーです。

今年のGWは10連休ということで、4/30と5/1の2日間でゲームジャムを行いました。

今回のテーマは「秒殺」「通り魔」「結ぶ」「昇天」「でくのぼう」。

前回もそうでしたが、ゲームジャムのテーマとしてこの選択はどうなんでしょうね。


作品

2年次 ずっきー

開発環境「Unity」

「秒殺」をテーマとしたホラーゲームです。

女の子を操作して、迫りくる化け物から逃げようとしますが...。

とあるゲームを参考にしたようで、テーマの「秒殺」もそれに関連しているとか。

綺麗なグラフィックが臨場感溢れるホラーな雰囲気を醸し出しています。完成が楽しみですね。


2年次 でんそん


開発環境「DXライブラリ」

「秒殺」「結ぶ」をテーマとした謎解きゲームです。

プレイヤーを操作して、マップに描かれている白いサークルを正しい順番で触れていくと次への道が開かれます。また、色付きのブロックには

  • 緑ブロック:触れるとヒントが得られる
  • 青ブロック:取ると復活時に”寿命”が延びる
  • 赤ブロック:通り抜けられない壁

というように謎を解く上での重要な要素となっています。

なお、”寿命”とはこのゲームにおける制限時間のことで、プレイヤーの頭の上にあるカウントがそれを示しています。寿命は移動している間も減り続け、0になるとゲームオーバーとなります。

ゲームオーバー時にはその場で復活してやり直すことができますが、初期状態での寿命は”3秒”だそうで、まさに「秒殺」といえますね。


2年次 まんじゅう

開発環境「DXライブラリ」

「結ぶ」をテーマとしたボードゲームで、”カルカソンヌ”というゲームを参考にしたようです。

草原や道、城などが描かれたパネルを一枚絵になるように配置し、そこに人を置いていくことで得点が得られるようです。

マップのスクロールやパネルを置く・回転させるといった、ゲームの基本要素を完成させました。

しかし、パネルや人の置き方にはかなりの自由度があるようで、本人曰く「大変なのはこれから」とのことでした。


3年次 いっちー

開発環境「DXライブラリ」

「昇天」をテーマとしたアクションゲームです。

幽霊を結界で囲み、結界を強化することで幽霊を昇天させることができます。また、幽霊は結界の境界線で反射するようにしました。

前回のゲームジャムでは時間内に完成できなかったため、今回はとにかく完成させることを目標に取り組んでみました。

素材は”いらすとや”でお借りしたのですが、統一感を出そうとした結果、ハロウィンテイストになりました。


おわりに

ゲームジャムはいいものですね。

テーマと時間が縛られている分、普段よりも集中して取り組めたように思いますし、他の人のゲームのアイデアやその実装方法にはとても興味が引かれ、良い刺激になりました。

今回は3年次が私1人、2年次が途中参加を含めて5人とまだまだ参加率は低いですが、初参加の方もいたので、この調子でサークル内で少しずつ広まっていければなと思います。

また、今月からは本格的に初年次講義が始まります。今度は1年生も含めてペアプログラミングなんかもやってみたいですね。

TNP競プロ支部の活動結果と今後(春のポエム枠)

あいさつ

114514810
ガナリヤです〜

自己紹介しなくても書いてるの大体ガナリヤなので、要らない気がしてきた・・・

今日はとことんやる気が出ないので、AGCまで時間つぶしに今後のTNP競プロ支部の展望とか書こうかなと思ってます

あと一週間で春休みが終わり、このぐうたらな毎日が終わって、毎日研究と考えると・・・
たぴゃ〜〜〜〜〜〜〜〜〜(一部界隈にしか伝わらないやつ)


競プロ支部って?

競プロ支部って何ぞってなるお気持ちになるので説明します。

我々TNPでは主にゲーム制作やイラストを書いたり、音楽制作などを行うのが主な活動ですが、最近は色々なツール・言語の増加によって、これまでよりも幅が広がった活動内容になってきました。

最近勢力を増しているSiv3D支部や、3Dやクオリティの高い2Dを作るUnity支部。
そして、新しいツールが増える今なお、古のDXライブラリで命を削っている支部もあります。(彼らは特殊な訓練を受けており、精神的ストレスと引き換えに圧倒的デバッグ能力とコーディング能力を身に着けています)

そして、去年の2~4月頃に幾人かで構成された競プロ支部が発足しました。(といっても、ガナリヤが勝手にそう読んでるだけですが・・・

現在は三年生が約3人? と一年生が1人で構成されています?(疑問系なのは、特に競プロ支部集まれ!ってやっていないのとで・・・)


そもそも競プロってなんだよ(哲学)

競プロってなんなんだろう・・・

自分でもたまに迷いますねこれ・・・

競プロは「競技プログラミング」の略で、与えられた問題を制限時間以内に解いてコーディングし、それを提出するやつです。

上のスライドとかが競技プログラミングを物語っている資料でこれを書いた人はすごい人で、競プロ界隈だと知らない人はいません。

例えば、以下の問題を考えてみましょう。


https://yukicoder.me/problems/no/800

問題文(四平方定理)

整数$N$, $D$が与えられる。
以下の2つの条件を満たす正の整数の組$(x, y, z, w)$の個数を求めてください。

1. $x, y, z, w$はそれぞれ$1$以上$N$以下の整数
2. $x^2 + y^2 + z^2 = w^2 + D$


上記の問題の$N$, $D$は問題から与えられます。
例えば、$N=3$, $D=2$のときは

$(x,\ y,\ z,\ w) = (1, 1, 1, 1), (1, 1, 2, 2), (1, 1, 3, 3), (1, 2, 1, 2), (1, 3, 1, 3), (2, 1, 1, 2), (3, 1, 1, 3)$
が条件を満たします。

勘の良い方、またはプログラミングをした人なら
全探索すればいい

と思うと思います。
これは間違っていないです。

但し、この問題は
$N{\leq}2*10^3$
$D{\leq}10^6$
という制限が与えられています。

全探索をすると、これの計算量は$(2*10^3)^4 = 8*10^{12}$です。
実は$10^8$回計算すると$1$秒の実行時間で、上記の全探索をすると、
これは44時間もかかってしまいます。

全探索すると$44$時間かかってしまう計算をするわけにはいきません。
この問題を$2$秒以内に解かないとAC(Accepted)がもらえないからです。

以下、解法です。

$x, y$を全探索することを考えてみます。
するとこれは$2000^2 = 4000000$であり、実行時間は$0.004$秒ぐらいなので間に合います。

$2$つめの式を変形すると
$w^2 = x^2 + y^2 + z^2 – D$で
先程$x, y$を全探索したため、定数とみなせます。
よって、$x^2 + y^2 – D = T$という定数に置くと
$w^2 – z^2 = T$
と表せます。

このようにすると、$w, z$を全探索して、$T$という計算結果になるような個数を保存すれば良さそうとなります。

あとは、この$w, z$の計算を先に前計算しておき、その後、$x, y$を計算しておけば、これは計算量は$O(N^2)$に抑えることができ、ACを貰うことができます。

using LL = long long;
 
 //~~~~~~~~~~~~~~~~~~~~~_(^~^ 」 ∠)_~~~~~~~~~~~~~~~~~~~~~
 
 
 int main() {
 
     int N, D;
     cin >> N >> D;
 
     int base = 100000000 / 2;
     vector<int> cnt(100000000, 0);
 
     for (int w = 1; w <= N; w++) {
         for (int z = 1; z <= N; z++) {
             cnt[base + w * w - z * z]++;
         }
     }
 
     int ans = 0;
 
     for (int x = 1; x <= N; x++) {
         for (int y = 1; y <= N; y++) {
             int d = x * x + y * y - D;
             ans += cnt[base + d];
         }
     }
 
     cout << ans;
 
     return 0;
 }

競技プログラミングは以上のように、まず3つのパートに分かれます。

まず、問題を読むパートです。Writerがどのようなことをさせたいのかを出来るだけ早く読み取ります。

そして、次に考察パートです。ここが苦しいところです。
僕はアタマが悪いので、ここでだいたい解けないです。

そして、もし考察が出て解法が生えたら、それを実装する必要があります。

この、「考察が出来る」と「実装が出来る」が別なのが難しいところで、
「考察が出来た!」ってなっても実装がゴミクソめんどくさいときがあります。
また、「実装は得意!」でも考察が全く出来ないときがあります。

数学オリンピックなどでは、この考察が出来るパートが要求され、さらに競技プログラミングではここに「プログラミング」の要素が追加されるわけです。

先程の問題と、解法を読んでピンと来る人は少ないだろうなと思います。
自分もまだまだ弱いですが、始めたてはプランクトン並でした(さっきの問題の解法なんてINF時間座っても生えません。)

でも練習次第で、ある程度は解けるようになります。


競プロのメリット・デメリットって何?

最近情報業界でかなり人気になってきている競技プログラミングですが何が楽しく、何がメリットなのでしょう・・・

自分もたまに、やっぱつれぇわ・・・ってなりながら競技プログラミングをしています。
それでも一年は続けていられているので、自分の性分にあっているのかな〜〜と思っています。

メリット

競プロを通して得られることは多いです。

まずは、「実装能力」が挙げられると思います。
競プロでは、あらゆるデータ構造とアルゴリズムを使用します。
競プロ以外のアプリ開発やゲーム開発は、競プロの実装と比べると明らかに楽なので、これまでより、楽にコーディング出来たりします。
また、実装できなさそう・・・と感じることがかなり減ると思います。

次に、考察力があがると思います。
競プロではあらゆる問題に対し、
1. 仮説を立てる
2. コードを書く
3. デバッグをする

という課題解決のステップを非常に細かく踏みます。
色々な知識がつくのも競技プログラミング特有のものだと思います。

そして、レートが出て、客観的に自分の実力がわかるがあると思います。

以上は自分のAtCoderでのレート推移です。
グラフの伸びを見る限り、天才型ではないのはひと目で分かります。(くやしい

でも、だからこそ、練習をして色んなアルゴリズムを覚えて、レートがあがり、初めて400点の問題をコンテスト中に解けたときは、人生でかなり楽しかった瞬間に入ります。

やはり楽しい!!!!!!!
っていうのが根幹にある感じです。
(ただ、楽しい!っていうのはコンテストに出てレートがつかないとわからない部分ですね・・・)
承認欲求が満たされる音がします。


デメリット

デメリットも色々とあります。

まず、「アプリ開発やフレームワークの知識はつかない」
という点です。
競プロで学べるのはアルゴリズムや実装・考察力なので、なにかアプリ開発が出来たり、フレームワークが使えるかは別になります。

ただ、アプリ開発出来て競プロ出来ない人は見かけますが、競プロ出来てアプリ開発出来ない人はほとんどいないです。
ただ、競プロもアプリ開発もやらないとアプリ開発の知識はつかないです・・・

2つ目に、競プロで生活をかなり支配されます。
AtCoderは土曜日の夜九時から二時間ぐらいなので良いですが

Codeforcesというサイトはロシアで運営されているコンテストであり、深夜12:35から二時間ぐらいあります。
普通に生活リズムが乱れます。

また、たぴ〜〜〜や、AC、tourist語録など、競プロ用語に支配される日が来ます。
知らないうちに「おきもち」という単語を永遠に使い続けることになります。


競プロに向く人・向かない人

競プロですが、誰しもに向いているものではないです。

競プロが好きな人はいかのようなことが好きな傾向にあります。

  • 人と争うのが好き
  • 承認欲求が強い
  • 数学・アルゴリズムが好き
  • 順位が好き(レートが好き)
  • 考えることが好き(パズルが好き)
  • 快感を欲している
  • 自分が好き
  • アプリ開発などの長期的スパンが続かない
  • ツイッターが好き
  • 音ゲーがすき(音ゲーマーみんな競プロ強いんですがなぜ・・・)

特に、アプリ開発などの長期的スパン開発が続かない人には向いてますね・・・
1問1問が短いので、さらっと解くを何回も繰り返しているうちに強くなります。

競プロが好きでない人は個人的に以下のようなものがある気がします

  • 順位をあまり気にしない
  • 承認欲求が少ない
  • 上昇志向がない
  • 数学・アルゴリズムよりも、開発でプロダクトを作るのが好き
  • 短い努力を繰り返すより、長い努力をしたい
  • アプリ開発が好き

結構、好きな人と好きでない人は正反対の位置にある気がしています。

やりたいことがない人は競プロを始めてみるといいかもしれません。


去年一年の活動について

去年一年、競プロ支部では基本的に個人活動でした。
競プロは基本的には個人競技なので致し方ないところではあります。

ただ、去年7月に行われたICPCというチーム大学対抗競プロ大会で

TNPの三年次かつ、同じバイト先の自分含む計三名でICPCインターネット予選に参加し、色々な奇跡が重なってアジア大会に出られることになり、去年の12月に参加しました。

これまでの人生で一番満たされた3日間だったと思います。
もっと競プロに打ち込んで実力をつけたいと思いました。


4月からの一年の展望

競プロ支部はどのようになっていくのでしょうか・・・
正直ようわからんです・・・

現在、現一年生(新二年生)の一人が昨年から競プロを始めており、競プロが広まって嬉しいなぁというお気持ちになっています。
レートもみるみる上がっているので、将来抜かれそうで怖いなぁとなっています。(特に数学が好きなのが非常に怖いポイント)

これからどんどん、新一年生にも広まって、ゲーム開発もできて、競技プログラミングもできる学生が増えればいいなと思っています。

とりあえず今年の7月のICPCに向けて日々精進して行きたいです。

まずはそこからはじめて、普通の国立の中では、秋田大学が競技プログラミングである程度強い大学と言えるように頑張っていこうと思います。

あと、にじさんじの卯月コウってやつエモいから見てくれよな(後方


追伸

どんどんブログを、新入生歓迎に向けて活性化させていきたいお気持ち

みんな書いて♡俺も書いたんだからさ・・・(いやです・・・)