今日は仕事始めですね

というわけで、昨日は体調不良で出来なかった書初めを行います。
お題は、誰からも示されなかったので、勝手に「ルーンファクトリーシリーズでの農作業の効率計算」ということで。
というのも、この動画シリーズのせいで、この正月、なんかルーンファクトリー(DS版初代)漬けの日々を過ごす羽目になったので。
というわけで、一部の人にしか使えないプログラムですが、書初めいってみよう:


//
// ルーンファクトリーの農作物の生産効率を計算するプログラム
//

#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>

#include <iostream>
#include <string>
using namespace std;
using namespace boost;
using namespace boost::algorithm;

int main()
{
	try
	{
		string buf;
		int price = 0;
		int glowing_days = 0, repeat_days = 0, glowable_days = 30;
		
		cout << "春の作物なら y と入力してください: ";
		getline( cin, buf );
		if( istarts_with( buf, "y" ) )
		{
			// 春の場合、前月の最終日に種を蒔けないので、最大栽培可能日数は 29 日
			glowable_days -= 1;
		}
		
		cout << "作物の値段を入力してください: ";
		getline( cin, buf );
		price = lexical_cast<int>( buf );
		
		cout << "成長日数を入力してください: ";
		getline( cin, buf );
		glowing_days = lexical_cast<int>( buf );
		
		cout << "連作日数を入力してください(連作なしならそのまま Enter ): ";
		getline( cin, buf );
		
		if( buf.empty() )
		{
			// 連作しない作物のとき
			int n = glowable_days / glowing_days;
			cout << "栽培できる回数: " << n << endl;
			
			// 毎回、種を作るために作物一つを潰さねばならない
			cout << "一ヶ月での生産高は: " << price * ( 8 * n ) << endl;
		}
		else
		{
			repeat_days = lexical_cast<int>( buf );
			
			// 連作する作物のときは、glowing_days - repeat_days の期間は栽培不能と考える
			glowable_days -= glowing_days - repeat_days;
			int n = glowable_days / repeat_days;
			cout << "栽培できる回数: " << n << endl;
			
			// 種を作るために潰さねばならない作物は、最後の一つのみでよい
			cout << "一ヶ月での生産高は: " << price * ( 9 * n - 1 ) << endl;
		}
	}
	catch( bad_lexical_cast& )
	{
		cout << "数字で答えてください\n";
		return -1;
	}
}

以上。
ポイントは、あくまで実際の利益を重視している点。
Wikiとかでは、1マス当りの効率を算出してるっぽいですが、タネは3x3の9マスに蒔くシステムになってる以上、9マスで一単位として計算するほうが現実的。
また、タネを毎回買う人より、タネメーカーを使う人の方が多いと思われるので、タネを作るために潰さねばならない作物も計算に入れています。
他にも、夏や秋の作物は、前月の最終日に種を蒔くことで、栽培日数を増やせるので、そのあたりも考慮に入れています。
逆に考慮していないのが、ぐんぐんグリーンでのレベル上げ。これはさまざまなパターンが考えられるし、フロンティアでは処理が違うので、あえて無視しました。実際には、カブ等の「連作不能だが、生産日数が少ない」=レベルが上がりやすい作物の方が効率的に資金を稼げる可能性がある、ということは明記しておきます。


・・・まぁ初代ならルビーを掘っていればお金に困ることは無いんだけどね(台無し