ホーム

時計の角度を与えたら時間を割り出してくれるロジックを考える。

時計の角度を与えたら時間を割り出してくれるロジックを考える。

アナログ時計の実装で角度を与えたら時間を算出するプログラムを作ることになりました。具体的には、アナログ時計で12時の時刻の角度は0度もしくは360度になるので 0度もしくは360度を与えたら12時だよ と教えてくれるようなイメージです。なぜそんなプログラムを組むのか、とあるプロジェクトで必要になったからです。

辞書型を使う

僕がまず最初に考えたのは、ディクショナリーを使うことでした。下記のように角度と時間を辞書にして角度を与えたら時間が取れるというものです。正直、めちゃくちゃ賢くないやり方です。これ、今は時針だから良いですけど、分針や秒針になったらオワコンです。理想的には、関数にして、引数で角度であるintを受け取ったら、ごにょごにょ計算した結果、時間がでるという形にしたいですよね。

func AngleToTime() {
        var test = [0:12, 30:1, 60:2, 90:3, 12:4, 150:5, 180:6, 210:7, 240:8, 270:9, 300:10, 330:11]
        let testtest = 0
        print("今\(test[testtest]!)時だよ!")
    }

割り算を使う

0~359の角度を採るとき

0~ 29: 0時台 
30~ 59:1時台 
60~ 89:2時台 
…… 
330~359:11時台

となるわけですから角度÷30 の「商」が時を表す、はずです。この30は、360÷12 ですね。時針は1周を12分割しているのですから。では分針や秒針の場合は 360 ÷ 60で6と出して角度÷6で分もしくは秒が出せるってことになります。

実装

最終的には、下記のようになりました。辞書を使うことに比べたら本当に綺麗&短い&優秀!な最強のロジックになりました。ていうか、自分がアホすぎですね笑。もっと賢くならねばー!頑張るぞー!

//角度に30を割れば時間が出る
//角度に6を割れば分もしくは秒が出る
        
var MSvalue = 360
var Hvalue = 360

print("今\(Hvalue / 30)時だよ!")
print("今\(MSvalue / 6)分もしくは秒だよ!")

参考

いやー、本当に色々世の中には賢い人がいるんだなと脱帽です。ありがとうございました。

アナログ時計の実装で角度を与えたら時間を算出したい

アナログ時計の実装で角度を与えたら時間を算出したい

Pocket
LinkedIn にシェア

エンジニアにおすすめできる本

Card image cap
リーダブルコード

より良いコードを書くためのシンプルで実践的なテクニック

Card image cap
Webを支える技術

HTTP,URI,HTML,そしてREST

Card image cap
誰でもPythonで作れる

儲かるAIとソフトウェアの作り方

Card image cap
プログラマが知るべき97のこと

現場で使える実践哲学のマスターピース

Card image cap
情熱プログラマー

時代を超えて。ソフトウェア開発者の幸せな生き方

Card image cap
アジャイルサムライ

プログラミング達人開発者への道

Card image cap
Rubyを作った男 まつもとゆきひろ

コードの世界 スーパー・プログラマになる14の思考法

ご提供 sponsor
 

Meee!(ミー)は、ビジネスからプライベート利用まで、個人のスキルを気軽に売り買いできるスキルマーケットです。カテゴリや居住地から、検索することが可能です。

 

ランゲージエクスチェンジは、ネイティブスピーカーと気軽にマッチングできる言語交換プラットフォームです。あなたの地元に住む外国人を探したり、留学や海外移住の前に、現地のネイティブスピーカーと繋がることもできます!

宣伝
 

りょすけトークchは、仕事や私生活をより豊にするYouTubeチャンネルです。文献(本、映画、論文)から役に立つ情報をまとめ、生涯にわたり役に立つ哲学をお届けしています。是非、チャンネル登録してみてね

-ホーム

Copyright© offブログ! , 2021 All Rights Reserved Powered by AFFINGER5.