ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3955194 アルゴリズム java お店の営業時間を知る方法
質問者:namida6000 よろしくお願いいたします。

行いたい事
条件から、お店の営業時間(open)を知るプログラムの作成

以下の条件がテキストファイルより渡されます。

・曜日毎のopen時間
・月毎に決まった条件のopen時間、close時間
・特別な日のopen時間、close時間
(openは営業時間、closeは休業時間です。)

条件には、優先順位があります。
特別な日>月毎>曜日毎

曜日毎の設定で、営業時間になっていても、
特別な日として、休みを設定すれば、そちらが優先されます。

-----------------------------------------------------------------------
データ例.(実際は、決まったフォーマットで条件式が与えられています。)
・曜日毎の条件
月曜日〜金曜日 7:00〜19:00 open

・月毎の条件
毎月第3,4土曜日は 7:00〜12:00 open
毎月1日、15日は、7:00〜12:00 close

・特別な条件
特別なclose
4/29 5/3

特別なopen
5/1 19:00〜 22:00

-----------------------------------------------------------------------

この条件から、一定期間のお店の営業時間を表示する必要があります。

-----------------------------------------------------------------------
取得したい内容 4/26日から1週間の営業時間
4/26(土)07:00〜12:00
4/27(日)
4/28(月)07:00〜19:00
4/29(火)
4/30(水)07:00〜19:00
5/1 (木)12:00〜22:00
5/2 (金)07:00〜19:00
5/3 (土)

-----------------------------------------------------------------------

・データをどのようにもつか?
・どのように処理していくか?

恥ずかしながら、解法の手がかりすらつかめない状態です。

どなたか、ヒントや参考書、アルゴリズムなどを、ご教示していただけないでしょうか?

よろしくお願いいたします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/04/17 19:01
最新から表示回答順に表示

回答

ANo.3 > 条件には、優先順位があります。
> 特別な日>月毎>曜日毎

ある年月日がどの条件に当てはまるかを見ていく際、
大きく2とおりの方法があります。

1)優先順位の高い方から見ていき、条件に該当した時点でそこより低い順位のチェックを省略する。
2)優先順位の低い方から見ていき、条件に該当したらそれまでの判断結果を上書きする。

実行時間などに厳しい条件があるのでしたら1)の方法を選択するのでありましょうが、
おそらく今回の場合は1)2)どちらでも大差ないと思います。
考えやすい方を選んでよいと思います。

少しでもヒントになりましたでしょうか。
回答者:asuncion
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/18 16:38
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.2 ANo.1の通り、少なくとも

> ・特別な日のopen時間、close時間

には、年の情報が必要ですし、

> この条件から、一定期間のお店の営業時間を表示する必要があります。

この「一定期間」の条件にも年が必要ですね。

後は、あなたが説明した通りにプログラムを組めばいいだけです。
プログラミングは、何も特別なことではありません。他人に詳しく手順を説明するのと同じです。それを人間の言葉で書くか、プログラミング言語で書くかの違いだけです。
あなたの質問は、十分に手順を説明できていますから、後はプログラミング言語で書き下すだけです。
回答者:ken-etsu
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
08/04/17 23:17
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 ある月日が何曜日であるかを知るためには、年の情報が必要です。
ところが、投稿の中には見あたりません。
年の条件はどのように与えられますか?教えてください。
回答者:asuncion
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
08/04/17 20:17
この回答への補足asuncionさん、ありがとうございます。

説明不足で申し訳ございません。

表示を行う範囲の日時は、年月日を持っています。
入力画面で、範囲を指定します。

質問した内容の場合は、
開始日時 2008/04/26
終了日時 2008/05/03
を入力します。

また、取得するデータも年月日&日時を持っています。

特別な日の場合
close,2008/4/29 0:00,2008/4/30 0:00
(openまたはclose,開始時間,終了時間)

よろしくおねがいします。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示