プログラミングは芸術だ!

web系エンジニアの備忘録 「プログラミングは芸術」を座右の銘として日々勉強中 最近Androidもやってます

CODE RUNNER 2015 予選B に出場しました

CODE RUNNERとは

キャリフル、チームラボ、Atcoderで協賛、運営している
短時間マラソンマッチのプログラミングコンテストです

2014年に第1回がございまして、今年は第2回目の開催となっております
基本の対象者は学生なのですが、社会人も予選は出場することができます!
ということで10月31日に開催された予選Bに出場しました!

coderunner.jp


予選Bはこんな問題

魔法の力を、ためて戦え!「Charge And Hit」

制限時間 3 時間

1. ゲーム概要
「Charge And Hit」は3人1部屋でゲームを行います。ユーザーは入室/攻撃APIをリクエストするとシステムにより各部屋に割り振られます。部屋には10匹の敵が並んでいて、ユーザーは任意のタイミングで一番前の敵を魔法で攻撃します。攻撃によって敵に与えるダメージは「魔法をためた時間」に応じて高くなります。ただし敵の体力を超えるダメージは切り捨てられて体力と等しい値になります。部屋内で与えたダメージの合計値が大きい順に室内順位がつけられ、その室内順位に応じてスコアを得ます。ユーザーは他のユーザーより多くのダメージを与えて、スコアを多く得ることを目指します。

問題の詳細は参加登録するとみることができますので、興味があるかたはぜひに!(※キャリフルの登録はしなくても問題は見れます)

去年と同様に、
予選Aは完全な個人戦、予選Bは他の参加者とのバトルという感じでした!


私の結果

f:id:gamu1012:20151101144958p:plain
name:gamu1012
rank:92
max score:30090

なんとなく目標にしていた100番以内も達成できて、満足です!
最後の10分でsocreを2000くらい伸ばせたので、大興奮でしたwww


最終的な方針

CODE RUNNER 2015 予選Bで使用したソース · GitHub

  1. 残りのモンスターの中で一番初期HPが高いやつなら、とりあえずアタック(他の2人への牽制と嫌がらせのため)
  2. ある程度HPがある的を倒せるなら倒す
  3. 倒しきれなくても、ある程度damageが与えられるなら、アタック

アタックするべきHPの値は手動でちょこちょこ変更しながら、
別コードで入った10部屋ごとの合計得点を出して、判断、調整をしていました


最後に3位だったらとりあえずアタック という ロジックを外したのと
ログを眺めながら、手動で調整用にアタックするようにしたらスコアがぐんっと伸びて、いい感じでした!
手動、最強説!

終了してから気づいたのですが、
最後まで、すべての敵を倒しきっても部屋に残るようなプログラムを書いてしまっていて、とても時間を無駄にしてまったのが悔やまれます。




所感

去年も思ったのですが、本当にCODE RUNNERは楽しい!
短時間マラソンマッチがもっと増えてくれたら嬉しいなと!
なぜか2年連続、予選Aには都合がつかず、出場できていないのが悔やまれます・・・

今回スコアを伸ばすには、他の参加者に対しての牽制・嫌がらせが大事だったみたいです。
1位のyosupoさんが他の2人がアタックしそうなちょっと手前でアタックする方針だったというお話をしており、
このロジックを実装すること自体は難しくないと思うのですが、
そういう発想が素早く思いつくのが上位なんだなーとしみじみ感じました

地頭の問題もあるかもしれませんが、そこをウダウダ言っていてもしょうがないので、
もっと経験を積んで、小さなノウハウ、テクニックを習得していきます!

運営の皆様、ありがとうございました!
来年も是非、開催よろしくお願いします!

漫画、アニメ、声優ラジオに目覚めた1冊

今週のお題「人生に影響を与えた1冊」

先週に続き、今週のお題でブログを書きます

今週のお題は「人生に影響を与えた1冊」とのことで、
投稿された記事をいくつか見ていると、とても高尚な記事が多かったので、
プログラミングを始めたきっかけとか、そういうことを書こうかと思ったのですが!
このお題はべつにそんな真面目なことばっかじゃないよなーと思ったので、今回はこちら


自分が漫画、アニメ、声優ラジオに目覚めた1冊

ケンコー全裸系水泳部 ウミショー

2005年から2008年にマガジンで連載されていた、はっとりみつるさんの漫画www.amazon.co.jp



普段はジャンプを読んでいたので、マガジンの漫画については知らなかったのですが、
2chまとめで深夜アニメにエロいのがあるという噂を目にして、
見て、すぐにはまり、アニメを見るし、漫画も全巻買うという流れに


生天目さんと豊崎さんのウミショーのラジオを聞くようになり、ラジオにもはまっていきました
この時はまさかこの後けいおん!で豊崎さんがあんなに有名になるなんて思っておらず、
いや実は俺こんな時から知っているだぜと鼻を高くしていた恥ずかしい思い出もあります


そして、そこからハルヒなども見るようになり、そのアニメのラジオを聞くようになり
音泉、超!A&G、ラジオ関西の声優ラジオも聞くようになりどっぷりはまっていきました

その後も漫画は色んなのを買い続けて、結構な数を読みました(1000冊くらい?


今はアニメは全く見なくなってしまいましたが、今でも漫画とラジオは趣味として続いております

以上

前回の今週のお題charlie1012.hatenablog.jp

学びたいことがいっぱい!

今週のお題「いま学んでみたいこと」

初めての今週のお題
学びたいことを5つほど書きました
上からモチベーション順!

アルゴリズム,競技プログラミング

大学生時代は趣味レベル競技プログラマーだったわけですが、
最近はめっきりやりらなくなってしまいました

ときどきやると実力が明らかに落ちてるのがわかるのが、ショックでしょうがない・・・!
アリ本も大昔に買っただけになってしまっているので、やろうかなと!

競技プログラミング系以外のアルゴリズムもやりたい!今週のお題「いま学んでみたいこと」
アルゴリズム強化月間を設けるぞー!


PHP

普段の仕事はPHPが中心なので、平日はほぼ毎日触っているわけなので、基本的には使えるわけです
ただもうちょっと深く身につけたいかなと、
PHPであんまり普段使っていない標準ライブラリとかから、
メモリ管理やどうやって実装されているかなどの根本を学びたいなと思っております

他のwebでよく使われる言語をやるよりは、
今はPHPを深くやろうかなという心境です


Androidアプリ

これは完全に業務の影響なのですが、
Androidアプリの運用開発に携わることにもなったので、
1つ2つくらいプライベートでアプリ作ってリリースまでやりたいなー的な!


Scala

上記で PHPを深くやろう と書いておきながら、ここでScala

Javaがそこそこ書けるので、Scalaもやっておこうかなぐらいの感じですけどね!
Scalaで関数型の書き方や考え方を身につけようかなと!
(あとはPHPだけで大丈夫なのという心配もあるよね)


コーヒー

ちょっと別の趣向でwww.excite.co.jp
これに行きたい


以上!

UbuntuにMySQLをインストールするところからテーブル作成までの方法

備忘録、第二弾!
コピペでUbuntuMySQLをインストールして、テーブル作成までOK

MySQLをインストール

user@ubuntu:~$ sudo aptitude update
user@ubuntu:~$ sudo aptitude install mysql-server //rootのパスワードが聞かれます

aptitudeのupdateを忘れないように。
古い状態だとMySQLのダウンロード元が404でインストールできなかったりします。

インストール確認
user@ubuntu:~$ mysql --version
mysql  Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.3

version情報が表示されればOKです

もし起動していなかったら

aptitubeやapt-getからのインストールであれば、自動で起動してくれているはずですが、
もし起動していなかったら、以下のコマンドで起動、停止、再起動あたりを試してみてください

user@ubuntu:~$ sudo service mysql start
user@ubuntu:~$ sudo service mysql stop
user@ubuntu:~$ sudo service mysql restart

MySQLにログイン

user@ubuntu:~$ mysql -u root -p

パスワード入力の問いかけがされるので、インストールの時に設定したパスワードを入力しましょう


データベースを作成

CREATE DATABASE blog;

まずはデータベースを作ります(blogの部分は作りたいデータベース名に適宜変更してください)


ユーザーを作成

rootで作業し続けるのは怖いので、blogDB用のユーザーを作りましょう

GRANT ALL ON blog.* TO 'user_name'@'localhost' IDENTIFIED BY '適当なパスワード';

localhostからログインするuser_nameユーザーを作り、blogDBに全権限を付与しています
hostやユーザー名、権限は適宜変更してください

権限の種類等はこちらのリンクが参考になります
権限の種類と設定されている権限の確認(SHOW GRANTS文) - ユーザーの作成 - MySQLの使い方

ログインユーザーの変更

テーブルを作成する前に、作成した作業用のユーザーでログインし直しましょう

exit; // rootでのログインを終了
user@ubuntu:~$ mysql -u user_name -p blog

またパスワード入力の問いかけがされるので、ユーザー作成の時に設定したパスワードを入力しましょう


テーブルを作成

作業用のユーザーでログインできたら、テーブルを作ります

CREATE TABLE `post ` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `inserted_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_insertedat` (`inserted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

テーブル作成時のSQLはこちらが参考になります
テーブルの作成 - MySQLの使い方


テーブルが出来ているか確認しましょう

show tables;

これでpostテーブルが表示されていれば、完了です!

補足

PHPからMySQLを使用する場合、php5-mysqlが必要です
aptitudeやapt-getでインストールしておきましょう
補足の補足
php5-mysqlaptitudeでインストールしようとすると

php5
php5-cli

この辺を依存関係の問題からremoveしろと言われることがありますが、
ここは大人しく一旦removeして、必要なものは再度インストールしなおせば大丈夫です

備忘録 第一弾はこちら

charlie1012.hatenablog.jp

通常SSHでVagrantにログインする方法

参考サイト
VagrantインスタンスにSSHでログインする - Qiita
基本的には参考リンク先の方法できます

備忘録として自分のブログにもまとめます

vagrant ssh

普段は上記のコマンドでsshログインができるので、通常のsshコマンドでログインすることは少ないのですが、
なにかのツール経由でログインしたい場合などは通常のSSHでログインすることになります

今回はSequel Proからログインしたかったのです

ここから参考サイトのおさらい

私の環境
実行環境:Mac OS X 10.10.2
VagrantfileでIPアドレスが 192.168.33.10に設定しています
Vagrant側のOS:ubuntu14.04

vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config

vagrant ssh で使用している設定をホストのSSHのconfigに追加する

ssh 192.168.33.10

上記のコマンドでログイン

Sequel Proの方にも設定

passwordログインでもいいのですが、今回は鍵認証で設定しております
f:id:gamu1012:20150830231615p:plain
Test connectionで接続を確認して、問題がなければお気に入りに登録しておきましょう

補足

実際にSequel ProでVagrant環境のDBにログインするだけなら、
ホストのSSHのconfigに設定を追加する必要はありません

vagrant ssh-config --host 192.168.33.10

このコマンドでportとuser,private keyのパスを確認して、Sequel Proに設定してあげれば、つながります

Vagrantで開発環境を構築する方法はこちら

charlie1012.hatenablog.jp