条件分岐の問題の残り

閏年の判定プログラム

閏年の判定プログラムを完成させなさい.西暦の読み込みにはprompt()を使い,入力された西暦が閏年かどうか判定して結果をメッセージで表示します.

うるう年とは1年間が366日の年、2月29日がある年。4年に1回。

はてなキーワード曰く、
1. 西暦が400で割り切れる年はうるう年である。
2. 400で割り切れない場合、西暦が100で割り切れる年はうるう年ではない。
3. 100で割り切れない場合、西暦が4で割り切れる年はうるう年である。
4. 4で割り切れない場合、うるう年ではない。
らしい。

調べてみたら、確かに去年の2008年は2月29日があったぽい。ちなみに日記によると、去年のその日私は「のんびりまったりして」「夜は焼き豚屋行った」らしい。
余分な1日らしい1日の使い方をしてしまっていた(´∀`;)

あとwikipedia 曰く

近代オリンピックの夏季オリンピックは4年に1度、4で割り切れる年に開かれる。そのため100で割り切れて400で割り切れない年の1900年の第2回パリオリンピックを除き、閏年に開催されている。
そういやオリンピックもあった気がする!

さて、そんなで解答。自分のつくったへっぽこプログラムで西暦をつっこんではワクワクしてたのはここだけの話。

<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
  <title>うるう年の判定プログラム</title>
</head>
<body>
<script type="text/javascript">
   var n;
   n = prompt( "西暦を入力してください" );

  if ( n % 400 == 0 ) {
     document.write("その年はうるう年です.");
   }
   else if ( n % 100 == 0 ) {
     document.write( "その年はうるう年ではありません" );
  }
   else if ( n % 4 == 0 ) {
     document.write( "その年はうるう年です" );
  }
  else { 
     document.write( "その年はうるう年ではありません" );
   }
</script>
</body>
</html>

問9

西暦を入力し,その1年間は何時間か,また,何秒かを出力するプログラムを書きなさい.
うるう年の判定プログラムに、1年間の時間と秒を計算するプログラムを足せばよいのではないかと思われる。
・通常の年
1年は
24*365 時間
60*60*24*365 秒

・うるう年
1年は
24*366 時間
60*60*24*366 秒

これを電卓で計算して返す値に入れておけばバッチリなんやけど、きっとこの問題の主旨はプログラムで計算させるところにあると思われる。
ううむ・・・

<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
  <title>1年間の時間と秒</title>
</head>
<body>
<script type="text/javascript">
   var n ,h , s ;
   n = prompt( "西暦を入力してください" );
  if ( n % 400 == 0 ) {
     h = 24 * 366 ;
     s = 60 * 60 * 24 * 366 ;
     document.writeln("その1年間は", h ,"時間、また", s , "秒です.");
   }
   else if ( n % 100 == 0 ) {
     h = 24 * 365 ;
     s = 60 * 60 * 24 * 365 ;
     document.writeln("その1年間は", h ,"時間、また", s , "秒です.");
  }
   else if ( n % 4 == 0 ) {
     h = 24 * 366 ;
     s = 60 * 60 * 24 * 366 ;
     document.writeln("その1年間は", h ,"時間、また", s , "秒です.");
  }
  else { 
     h = 24 * 365 ;
     s = 60 * 60 * 24 * 365 ;
     document.writeln("その1年間は", h ,"時間、また", s , "秒です.");
   }
</script>
</body>
</html>

変数間違えて動かなくなっててんぱってたら、ハチロクチャットで助けてもらえた、thx( ´∀`) 私恥ずかしくてしねる。エラーコンソールなりfirebugを上手に使う。

そしてそこで「うるう秒」に関して指摘を受ける、うるう秒とか初めて知った。「紀元前はどうするんだ」「ていうか年代によって閏年の仕様が違う」とかあの人たちはいちいちすごい。
うう・・・><
id:harajune が書いてみてくれたやつ。

<script type="text/javascript">
    n = prompt( "西暦を入力してください" )-0;
   document.writeln("その1年間は", (n = (365 + (n%4 == 0 && n%100 != 0 || n%400 == 0))* 24) ,"時間、また", n * 3600 , "秒です.");
</script>

なんという2行!Σ(・ω・ノ)ノ だがしかし理解出来ない!!
というわけで、続きはこれの理解から。

こうやって短く書くことを「ゴルフ =codegolf」と言うらしく、できるだけ少ない文字数で同じ結果を得られるプログラムを書く遊びなんやって(・∀・)