元ネタ
久しぶりにQiitaを覗いてみたら流行ってるのかな?と思って他の人がやらなさそうなMathematicaで実装してみました。
コード
普通
name = InputString["契約書だよ。そこに名前を書きな。"];
Print[StringJoin["フン。", name, "というのかい。贅沢な名だねぇ。"]];
newname = RandomChoice[Characters[name]];
Print[StringJoin["今からお前の名前は", newname, "だ。いいかい、", newname, "だよ。分かったら返事をするんだ、", newname, "!!"]];
変数を意地でも使わない版
StringJoin["フン。", #, "というのかい。贅沢な名だねぇ。\n",
{"今からお前の名前は", #, "だ。いいかい、", #, "だよ。分かったら返事をするんだ、", #, "!!"} &@
RandomChoice[Characters[#]]] &@
InputString["契約書だよ。そこに名前を書きな。"]
簡単な解説
-
InputString
- ノートブックインターフェース上ではVBのInputBoxのようにユーザの入力プロンプトが表示されます。CLIだと標準入力から読み込みます。 -
Characters
- 引数の文字列を1文字ずつに分割したリストにします。例)"山田太郎"
->{"山", "田", "太", "郎"}
-
RandomChoice
- 引数のリストの中から1要素をランダムに選びます(こういった組込関数があるのがMathematicaの強み)。 -
StringJoin
-Characters
とは逆に、引数の文字列を結合した1つの文字列にします。
実行サンプル
Mathematicaのノートブック上で上記コードのどちらかをコピー&ペーストして[Shift] + [Enter]
正常系
クラッシュ湯婆婆
何も入れなかった場合はMathematicaでもちゃんとエラーになります。
「𠮷田」さん問題
自分が使っているのがMathematica 8と古いせいか、𠮷田さんに対しては無力。
最新のMathematica 12なら大丈夫と思われます(参考:すべてのUnicode文字を使う: Wolfram言語 12の新機能)。
CLIでワンライナー
CLIでワンライナーも可能です。
ただしマルチバイト文字に非対応のようです。行の途中で勝手に改行もされます。
$ math -run 'Print[StringJoin["フン。", #, "というのかい。贅沢な名だねぇ。\n", List["今からお前の 名前は", #, "だ。いいかい、", #, "だよ。分かったら返事をするんだ、", #, "!!"] &@ RandomChoice[Characters[#]]] &@ InputString["契約書だよ。そこに名前を書きな。\n"]];Quit[]'
Mathematica 8.0 for Linux x86 (64-bit)
Copyright 1988-2011 Wolfram Research, Inc.
契約書だよ。そこに名前を書きな。
山田太郎
フン。山田太郎というのかい。贅沢な名だねぇ。
今からお前の名前は�だ。いいかい、�だよ。分かったら返\
> 事をするんだ、�!!