LoginSignup
5
2

More than 3 years have passed since last update.

Kinx で湯婆婆を実装してみる

Last updated at Posted at 2020-11-10

元ネタ

あまりこういうことはしないのですが、間違いなく私以外誰もやらないので。。。
しかしなんだかちょっと恥ずかしい。

Kinx ってなんだ?という方は以下をご覧ください。

「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」 でお届けしているスクリプト言語 Kinx

コード

JavaScript 版 を見させていただいたところ、なんとブラウザ上での実行(←ある意味当たり前かも...)だったので 見た目は JavaScript の本領を発揮できず。しかたがないのでフルスクラッチ(といっても大したことはない)で作りました。

yubaba.kx
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 さん(およびその他の方々)、ありがとうございました。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2