Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

R言語で湯婆婆を実装する

はじめに

@Nemesis さんのJavaで湯婆婆を実装してみるという記事から話題になっている湯婆婆の実装をやってみたくなりました。自分が書ける言語でまだ実装されてなさそうな言語ないかなぁと探してみたところ、R言語による実装の記事はまだ出ていなさそう(もし出している方いたらすみません、私の調査不足です。)でしたので、やってみました。

コード

print("契約書だよ。そこに名前を書きな。")
name <- readline("名前: ")
print(paste("フン。", name, "というのかい。贅沢な名だねぇ。"))
rand = sample(1:nchar(name), 1)
newName = substring(name, rand, rand)
print(paste("今からお前の名前は", newName, "だ。いいかい、", newName, "だよ。分かったら返事をするんだ、", newName, "!!"))

コードの解説

契約書を渡す

print("契約書だよ。そこに名前を書きな。")

print関数を使うと出力ができます。

名前の入力

name <- readline("名前: ")

readline関数を使うと入力を行えます。入力で受け取った名前をnameという関数に入れます。

名前の確認

print(paste("フン。", name, "というのかい。贅沢な名だねぇ。"))

Rではpaste関数を使って文字列の結合ができます。

新しい名前を決める

rand = sample(1:nchar(name), 1)
newName = substring(name, rand, rand)

nchar関数を使うと文字列の長さを取得できます。
n:mとやるとnからmまで交差が1の等差数列を得ることができます。
sample(ベクトル, m)でベクトルから長さmの部分ベクトルが得られます。

substring(文字列, begin, last)で文字列からbegin番目からlast番目を部分文字列として取り出せます。今回はsubstring(name, rand, rand)でrand番目だけを取り出しています。

新しい名前を伝える

print(paste("今からお前の名前は", newName, "だ。いいかい、", newName, "だよ。分かったら返事をするんだ、", newName, "!!"))

名前の確認のところと大体同じです。

まとめ

湯婆婆をR言語を使って実装しました。知らなかった関数や忘れていた関数を思い出せる非常に良い試みでした。

参考

入力について

R-Tips 36.落穂ひろい http://cse.naro.affrc.go.jp/takezawa/r-tips/r/36.html

文字列操作関係

R-tips 17.文字列を操作する http://cse.naro.affrc.go.jp/takezawa/r-tips/r/17.html
hiratake55 の作業メモ R で文字列の長さを調べる http://hiratake55.hatenadiary.jp/entry/2016/08/31/R_で文字列の長さを調べる

乱数生成関係

竹中明夫 おまけ:さまざまなデータ列の生成 http://takenaka-akio.org/doc/r_auto/series.html
R-tips 60.確率分布と乱数 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/60.html

Freddy_me_me2
大学3年生。AtCoderやってます。コンテスト参戦記などをかけるといいなと思います。使っている言語は主にpython、C++。RやMATLABもたまに使います。大学でやってるデータ分析についても書きたい。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away