LoginSignup
4
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-12

元ネタ

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

久しぶりに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]

正常系

image.png

image.png

クラッシュ湯婆婆

何も入れなかった場合はMathematicaでもちゃんとエラーになります。

image.png

「𠮷田」さん問題

自分が使っているのがMathematica 8と古いせいか、𠮷田さんに対しては無力。
最新のMathematica 12なら大丈夫と思われます(参考:すべてのUnicode文字を使う: Wolfram言語 12の新機能)。

image.png

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.
契約書だよ。そこに名前を書きな。
山田太郎
フン。山田太郎というのかい。贅沢な名だねぇ。
今からお前の名前は�だ。いいかい、�だよ。分かったら返\

>   事をするんだ、�!!
4
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
4
2