# Delphi で湯婆婆を実装してみる --- tags: Delphi programming ネタ Pascal 湯婆婆 created_at: 2020-11-22 updated_at: 2020-11-24 --- # はじめに ネタに乗ってみました。 Delphi による湯婆婆は @e99h2121 さんが既に投稿されていたので、 - [Delphiで湯婆婆する (Qiita:@e99h2121)](https://qiita.com/e99h2121/items/0aba0ce4b5b4d1c27505) 私はコンソールアプリケーションで書いてみることにしました。 # コード **Delphi 10.4 Sydney** で書いてみました。 ```pascal:Yubaba.dpr program Yubaba; {$APPTYPE CONSOLE} uses System.SysUtils; begin Randomize; Writeln('契約書だよ。そこに名前を書きな。'); var name: string; Readln(name); Writeln('フン。', name, 'というのかい。贅沢な名だねぇ。'); var newNameIndex := Random(name.Length); var newName := name.Substring(newNameIndex, 1); Writeln('今からお前の名前は', newName, 'だ。いいかい、', newName, 'だよ。分かったら返事をするんだ、', newName, '!!'); end. ``` SysUtils を使わないようにすれば (標準ルーチンだけで書けば) 行数を減らせます。 ```pascal:Yubaba.dpr program Yubaba; {$APPTYPE CONSOLE} begin Randomize; Writeln('契約書だよ。そこに名前を書きな。'); var name: string; Readln(name); Writeln('フン。', name, 'というのかい。贅沢な名だねぇ。'); var newNameIndex := Random(Length(name)); var newName := Copy(name, newNameIndex + 1, 1); Writeln('今からお前の名前は', newName, 'だ。いいかい、', newName, 'だよ。分かったら返事をするんだ、', newName, '!!'); end. ``` 実行結果です。 ![image.png](./images/44655b52-b921-aac0-0fd5-ffb106909bb6.png) まぁ、そうなるな。 **See also:** - [標準ルーチンと入出力 (DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/%E6%A8%99%E6%BA%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3%E3%81%A8%E5%85%A5%E5%87%BA%E5%8A%9B) ## 追記 わざわざ `SubString()` や `Copy()` を使っているのは、空の文字列が入力された時にエラーになるからです。次のような書き方もできるのですが、空の文字列が入力された時にエラーになってしまいます。 ```pascal:Yubaba.dpr program Yubaba; {$APPTYPE CONSOLE} uses System.SysUtils; begin Randomize; Writeln('契約書だよ。そこに名前を書きな。'); var name: string; Readln(name); var newNameIndex := Random(Length(name)); var newName := name.Chars[newNameIndex]; Writeln('フン。', name, 'というのかい。贅沢な名だねぇ。', sLineBreak, '今からお前の名前は', newName, 'だ。いいかい、', newName, 'だよ。分かったら返事をするんだ、', newName, '!!'); readln end. ``` ```pascal:Yubaba.dpr program Yubaba; {$APPTYPE CONSOLE} begin Randomize; Writeln('契約書だよ。そこに名前を書きな。'); var name: string; Readln(name); Writeln('フン。', name, 'というのかい。贅沢な名だねぇ。'); var newNameIndex := Random(Length(name)); var newName := name[newNameIndex + 1]; Writeln('今からお前の名前は', newName, 'だ。いいかい、', newName, 'だよ。分かったら返事をするんだ、', newName, '!!'); end. ``` # おわりに いろんな言語のコードが読めて面白いですね。 **See also:** - [Delphi で前前前世 (Qiita)](./19f7bc80ec24e2019650.md)