「トランプを3枚出してその積を103で割った余りの値の元素をいかに早く言うか」をGolangとMySQLで実装する

背景

こちらのツイートが流れてきたのでgolangで実装してみました。

「トランプを3枚出してその積を103で割った余りの値の元素をいかに早く言うか」

環境

CentOS Linux release 7.2.1511 (Core)

mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper

go version go1.6.3 linux/amd64

事前準備

環境変数

mysql用のdriverをgo getするためにも必要なのでGOPATHを設定します。

$ export GOPATH=<path>

またMySQLに接続するためのパスワードを環境変数から取得するため、設定します。

$ export MYSQL_PASSWD=<password>

MySQLのインストール

GoでMySQLに接続するにある go-sql-driver/mysql のインストール を行います。

$ go get github.com/go-sql-driver/mysql

データベースの構築

今回はgolangMySQLを叩いてみたかったので、データベースを構築しておきます。

データベース名: div3element

テーブル名: element

テーブルの構成は以下です。

mysql> show columns from element;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| n      | int(11)     | NO   | PRI | NULL    |       |
| symbol | varchar(2)  | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

nを原子番号として元素記号(symbol)、元素名(name)を引けるようにしています。

構築用のsqlこちら

実装

gist30613d82a059a6a51c518d0d4026c452

コードはgithubにもあげています。

使い方

コンパイルしてから、以下のように標準入力から3つの数字を入力すると、原子番号と元素名を返します。

$ ./main 12 13 11
Answer: 68, エルビウム

感想

MySQLとの連携もできたので個人的には満足しています。

トランプ想定なので1-13以外の数字が来た場合の処理とか追加したほうがよかったかもなぁと思っています。

余談ですが、このゲーム、名前付いてるんでしょうか。 名前があれば本記事のタイトルも悩まなくよかったんですが......。

Reference