はじめに
ネタに乗ってみました。
Delphi による湯婆婆は @e99h2121 さんが既に投稿されていたので、
私はコンソールアプリケーションで書いてみることにしました。
コード
Delphi 10.4 Sydney で書いてみました。
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 を使わないようにすれば (標準ルーチンだけで書けば) 行数を減らせます。
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.
See also:
追記
わざわざ SubString()
や Copy()
を使っているのは、空の文字列が入力された時にエラーになるからです。次のような書き方もできるのですが、空の文字列が入力された時にエラーになってしまいます。
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.
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: