2012年12月31日月曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13章(新しいクラスのオブジェクト), 13.6(練習問題の続き)オレンジの木 を解いてみる。

その他参考書籍

オレンジの木

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-

class OrangeTree
  def initialize
    puts "オレンジの木を植えました!"
    @height = 0
    @age = 0
    @orange_count = 0
    @alive = true
  end
  def height
    @height
  end
  def age
    @age
  end
  def one_year_passes
    puts "1年経過しました"
    if @age == 10
      @age = nil
      @height = nil
      @orange_count = nil
      @alive = false
    end
    if @alive
      @orange_count = 0
      @age += 1
      @height = 5 * @age
      if @age >= 5
        @orange_count = @age * 2
      end
    end
  end
  def count_the_orange
    if @alive
      return @orange_count
    else
      return "もう木は枯れているのでオレンジの実はありません"
    end
  end
  def pick_an_orange
    if @alive
      if @orange_count > 0
        @orange_count -= 1
        return "おいしいオレンジが採れました!"
      end
      return "採れる実はありません"
    else
      return "もう木は枯れているのでオレンジは採れません"
    end
  end
end

ot = OrangeTree.new

11.times do
  ot.one_year_passes
  puts "樹齢:#{ot.age} 高さ:#{ot.height} オレンジの実の数:#{ot.count_the_orange}"
  i = 1
  (ot.count_the_orange.to_i + 1).times do
    puts "#{i}: #{ot.pick_an_orange}"
    i += 1
  end
end

入出力結果(Terminal)

$ ./sample.rb
オレンジの木を植えました!
1年経過しました
樹齢:1 高さ:5 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:2 高さ:10 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:3 高さ:15 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:4 高さ:20 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:5 高さ:25 オレンジの実の数:10
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: 採れる実はありません
1年経過しました
樹齢:6 高さ:30 オレンジの実の数:12
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: 採れる実はありません
1年経過しました
樹齢:7 高さ:35 オレンジの実の数:14
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: 採れる実はありません
1年経過しました
樹齢:8 高さ:40 オレンジの実の数:16
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: おいしいオレンジが採れました!
16: おいしいオレンジが採れました!
17: 採れる実はありません
1年経過しました
樹齢:9 高さ:45 オレンジの実の数:18
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: おいしいオレンジが採れました!
16: おいしいオレンジが採れました!
17: おいしいオレンジが採れました!
18: おいしいオレンジが採れました!
19: 採れる実はありません
1年経過しました
樹齢:10 高さ:50 オレンジの実の数:20
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: おいしいオレンジが採れました!
16: おいしいオレンジが採れました!
17: おいしいオレンジが採れました!
18: おいしいオレンジが採れました!
19: おいしいオレンジが採れました!
20: おいしいオレンジが採れました!
21: 採れる実はありません
1年経過しました
樹齢: 高さ: オレンジの実の数:もう木は枯れているのでオレンジの実はありません
1: もう木は枯れているのでオレンジは採れません
$

ちなみにJavaScriptの場合。

コード(BBEdit)


var OrangeTree = function(){
  var age = 0;
  var height = 0;
  var orange_count = 0;
  var alive = true;
  this.get_age = function(){
    return age;
  };
  this.set_age = function(o){
    age = o;
  };
  this.get_height = function(){
    return height;
  };
  this.set_height = function(o){
    height = o;
  };
  this.get_orange_count = function(){
    return orange_count;
  };
  this.set_oranage_count = function(o){
    orange_count = o;
  };
  this.get_alive = function(){
    return alive;
  };
  this.died = function(){
    alive = false;
  };
};
OrangeTree.prototype.one_year_passes = function(){
  $('#pre0').append("1年経過しました\n");
  if(this.get_age() === 10){
    this.set_age(null);
    this.set_height(null);
    this.set_oranage_count(null);
    this.died();
  }
  if(this.get_alive()){
    this.set_oranage_count(0);
    this.set_age(this.get_age() + 1);
    this.set_height(5 * this.get_age());
    if(this.get_age() >= 5){
      this.set_oranage_count(this.get_age() * 2);
    }
  }
};
OrangeTree.prototype.count_the_orange = function(){
  if(this.get_alive()){
    return this.get_orange_count();
  } else {
    return "もう木は枯れているのでオレンジの実はありません";
  }
};
OrangeTree.prototype.pick_an_orange = function(){
  if(this.get_alive()){
    if(this.get_orange_count() > 0){
      this.set_oranage_count(this.get_orange_count() - 1);
      return "おいしいオレンジが採れました!";
    }
    return "採れる実はありません";
  } else {
    return "もう木は枯れているのでオレンジは採れません";
  }
};
var ot = new OrangeTree();
for(var i = 0; i < 11; i++){
  ot.one_year_passes();
  var n = ot.count_the_orange();
  $('#pre0').append(
    "樹齢:" + ot.get_age() + " 高さ:" + ot.get_height() +
    " オレンジの実の数:" + n + "\n");
  for(var j = 0; j < n + 1; j++){
    $('#pre0').append((j + 1) + ": " + ot.pick_an_orange() + "\n");
  }
}



pythonの場合。

sample.py

コード(BBEdit)

#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-

class OrangeTree:
    def __init__(self):
        print("オレンジの木を植えました!")
        self._height = 0
        self._age = 0
        self._orange_count = 0
        self._alive = True
    def get_height(self):
        return self._height
    def get_age(self):
        return self._age
    def one_year_passes(self):
        print("1年経過しました")
        if self._age == 10:
            self._age = None
            self._height = None
            self._orange_count = None
            self._alive = False
        if self._alive:
            self._orange_count = 0
            self._age += 1
            self._height = 5 * self._age
            if self._age >= 5:
                self._orange_count = self._age * 2
    def count_the_orange(self):
        if self._alive:
            return self._orange_count
        else:
            return "もう木は枯れているのでオレンジの実はありません"
    def pick_an_orange(self):
        if self._alive:
            if self._orange_count > 0:
                self._orange_count -= 1
                return "おいしいオレンジが採れました!"
            return "採れる実はありません"
        else:
            return "もう木は枯れているのでオレンジは採れません"

ot = OrangeTree()
for x in range(11):
    ot.one_year_passes()
    n = ot.count_the_orange()
    print("樹齢:{0} 高さ:{1} オレンジの実の数:{2}".format(
      ot.get_age(), ot.get_height(), n))
    if type(n) == type(10):
        for y in range(1, n + 2):
            print("{0}: {1}".format(y , ot.pick_an_orange()))

入出力結果(Terminal)

$ ./sample.py
オレンジの木を植えました!
1年経過しました
樹齢:1 高さ:5 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:2 高さ:10 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:3 高さ:15 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:4 高さ:20 オレンジの実の数:0
1: 採れる実はありません
1年経過しました
樹齢:5 高さ:25 オレンジの実の数:10
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: 採れる実はありません
1年経過しました
樹齢:6 高さ:30 オレンジの実の数:12
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: 採れる実はありません
1年経過しました
樹齢:7 高さ:35 オレンジの実の数:14
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: 採れる実はありません
1年経過しました
樹齢:8 高さ:40 オレンジの実の数:16
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: おいしいオレンジが採れました!
16: おいしいオレンジが採れました!
17: 採れる実はありません
1年経過しました
樹齢:9 高さ:45 オレンジの実の数:18
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: おいしいオレンジが採れました!
16: おいしいオレンジが採れました!
17: おいしいオレンジが採れました!
18: おいしいオレンジが採れました!
19: 採れる実はありません
1年経過しました
樹齢:10 高さ:50 オレンジの実の数:20
1: おいしいオレンジが採れました!
2: おいしいオレンジが採れました!
3: おいしいオレンジが採れました!
4: おいしいオレンジが採れました!
5: おいしいオレンジが採れました!
6: おいしいオレンジが採れました!
7: おいしいオレンジが採れました!
8: おいしいオレンジが採れました!
9: おいしいオレンジが採れました!
10: おいしいオレンジが採れました!
11: おいしいオレンジが採れました!
12: おいしいオレンジが採れました!
13: おいしいオレンジが採れました!
14: おいしいオレンジが採れました!
15: おいしいオレンジが採れました!
16: おいしいオレンジが採れました!
17: おいしいオレンジが採れました!
18: おいしいオレンジが採れました!
19: おいしいオレンジが採れました!
20: おいしいオレンジが採れました!
21: 採れる実はありません
1年経過しました
樹齢:None 高さ:None オレンジの実の数:もう木は枯れているのでオレンジの実はありません
$

0 コメント:

コメントを投稿