paizaオンラインハッカソン7に参加してみた – メイド服(C++, Swift)

paizaオンラインハッカソン7に参加してみた – 猫(C++, Swift)に続いて、今回はC++及びSwiftでメイド服にチャレンジしてみたい。

今回のお題の目的

今回のお題は特定の時間に起きることを前提に、残業した時間に応じて睡眠時間を増やした時に、何時に寝ればいいのかを出力するというのが目的になっている。

今回では以下が使えるかが重要になってくる。

  • 時間型を使うかどうか
  • フォーマット書式を使うかどうか

サンプルコード

C++

cf: https://github.com/saitomarch/POH7/blob/master/cpp/maid.cpp

Swift

サンプル1

注: このコードはPOHの環境では動作に必要となるフレームワークが欠けているため動きません。

cf: https://github.com/saitomarch/POH7/blob/master/swift/maid.swift

サンプル2

cf https://github.com/saitomarch/POH7/blob/master/swift/maid_poh.swift

解説

今回はまず日数を取得、それをループの回数にした。

その後、残業した時間が分で入力されるため、それに応じて睡眠に必要な時間を計算する。基本的には睡眠に必要な時間は以下のようになる。

睡眠に必要な時間=(6時間)+(残業した時間÷3)

その後、7時に起きるということを想定して、寝る時間を計算した上で出力する。なお、この際、日付が変わった後の時間にする場合は0にリセットするという制約があるため、その点は要注意である。

なお、今回では、出力の仕方が若干変わっている。C++ではprintfが使えるため問題ないのだが、SwiftではPOHの環境ではFoundation Frameworkが使えないため、Objective-Cでいう+[NSString stringWithFormat:]に相当する処理が使えないため、独自に関数を指定して定義を行った。なお、Mac環境ではC++のようにフォーマットを使った解法ができるのだが・・・。

最後に

今回は言語によって比較的簡単に解けるかどうかが変わってくるかもしれない、今回の場合はSwiftでは使えるはずの命令が使えないという制約があり、それをどうやって克服するかがネックになったが、それができれば基本的には問題を読めば難なくクリアできるだろう。

ぜひともチャレンジしてみると良いだろう。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。