元ネタ
あまりこういうことはしないのですが、間違いなく私以外誰もやらないので。。。
しかしなんだかちょっと恥ずかしい。
- 元ネタ - @Nemesis さんのJavaで湯婆婆を実装してみる
Kinx ってなんだ?という方は以下をご覧ください。
「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」 でお届けしているスクリプト言語 Kinx。
- 参考
- 最初の動機 ... スクリプト言語 KINX(ご紹介)
- 個別記事へのリンクは全てここに集約してあります。
- リポジトリ ... https://github.com/Kray-G/kinx
- Pull Request 等お待ちしております。
コード
JavaScript 版 を見させていただいたところ、なんとブラウザ上での実行(←ある意味当たり前かも...)だったので 見た目は JavaScript の本領を発揮できず。しかたがないのでフルスクラッチ(といっても大したことはない)で作りました。
System.println("契約書だよ。そこに名前を書きな。");
var name = $stdin.readLine();
System.println("フン。%sというのかい。贅沢な名だねぇ。" % name);
var nameArray = name.split('');
var index = Integer.parseInt(Math.random() * 1000) % nameArray.length();
var newName = nameArray[index];
System.println("今からお前の名前は%1%だ。いいかい、%1%だよ。分かったら返事をするんだ、%1%!!" % newName);
契約書だよ。そこに名前を書きな。
千尋
フン。千尋というのかい。贅沢な名だねぇ。
今からお前の名前は千だ。いいかい、千だよ。分かったら返事をするんだ、千!!
ポイント
Kinx の String#split
は UTF-8 で分割するので、配列にしてから 1 文字切り出します。
未入力
クラッシュするようにしましたよ。
契約書だよ。そこに名前を書きな。
フン。というのかい。贅沢な名だねぇ。
Uncaught exception: No one catch the exception.
SystemException: Divide by zero
Stack Trace Information:
at <main-block>(yubaba.kx:7)
あえてクラッシュさせるために剰余計算させてます。本来は以下の部分、
var index = Integer.parseInt(Math.random() * 1000) % nameArray.length();
これは以下で良いです。
var index = Integer.parseInt(Math.random() * nameArray.length());
こうすると、クラッシュしないですが、配列要素が一つもないため nameArray[0]
で undefined が返り、以下のように表示されます。
契約書だよ。そこに名前を書きな。
フン。というのかい。贅沢な名だねぇ。
今からお前の名前は((null))だ。いいかい、((null))だよ。分かったら返事をするんだ、((null))!!
おわりに
色々実装されている皆さんのネタは楽しませていただきました。
本来はこういうことをあまりしない質なのですが、まぁ、Kinx は私以外誰もしないでしょうから、一瞬の気の迷いでやらせて頂きました。
ネタを提供していただいた @Nemesis さん(およびその他の方々)、ありがとうございました。