Ruby



第7回分


一度死んで開き直った





配列メソッドは今までの文字列を扱うメソッドのように用います
なので例えば授業資料の応用例で言うところの"collect"メソッドなどがありますが
山を作るプログラムの課題ならjoin / collectの2つがあれば大丈夫だと思います


map and collect
合ってるかしら

このように元々[1,2,3,4]の配列があったとき
最初のdo...endで全てに+1した配列を作って元々の配列に格納
次のdo...endで↑に+1したものを別の配列に格納
という形が出来ると思います。多分。


join は配列の中身を全部くっつけて1つの文字列にするのですが
そのくっつけた場所にjoin()の()で囲んだものを間に挟みこみます


join join
ジョインジョイントキィ

例えばこのような形で print で配列を出力すると普通は上の出力が帰ってきますが
改行文字を挟むことでprintでもそれぞれの要素が1行ずつ出力できるようになります。
putsで出力した方が早そうですけど。

他のものは適宜演習3で必要になったら習得してみてください
山を描くものの応用ならあまり必要ないかもしれませんが




範囲



範囲指定は(開始位置..終了位置)でできます
例えば1から15までの範囲を指定して、
2のn乗(n=1~15)したものを配列に入れるプログラムがこれです


square
2**1 ~ 2**15までが配列に

このように配列に入れて計算するのではなく、配列に入れた文字列を記号として捉えることで
演習2のような図形を描くことが可能になります。
これは次のセクションで紹介します




演習


山を描こう
さっきの2のn乗のものを少し改変して
"*" が n個出力されるものに書き換えてみましょう


mountain of *
なだらかな斜面を持つ*山

先ほどのものと形は結構似ています。
これで山と言っても良いかもしれませんが個人的には山といったらこの形がいいですね


center mountain
真ん中が尖っていて欲しい

これはcenterメソッドを用いて中央に揃えています
また、中央寄せが映えるように全ての行は奇数の*が並ぶように計算しています
レッツチャレンジ

3番は山や繰り返しに拘らなくても良さそうな感じの課題です
TAには何を要求する課題なのかはっきりと指示が来ていないので多分こういうのでもいいと思います
変化球というか飛び道具ですけど


smile face?
配列に1文字ずつ記号などを配置していく

32*32のドット絵などを作っても面白いかもしれません
手間は手間ですけど多分手動入力でも大丈夫のはずです





まとめ



配列に繰り返し"*"をぶち込んで山を描こう

  1. 繰り返しの除去 ⇒ イテレータを使おう
  2. 1~10などの範囲はまとめて表記できる
  3. 文字を整形して出力 ⇒ 図形を描く