読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

13日の金曜日を数え上げる(LL Future Golf)

PHP


ふと、ブログ巡回してたら、ちょっち気になる記事を見つけた。

ほうほう、LL FutureでLL Golfなる企画をやってるのか。どれどれいっちょ試してみっかーと思って、ふとみた問題。

Hole3 - 13日の金曜日を数え上げる

今日から20013年12月31日までの、13日の金曜日とその総数を表示してください。

404 Not Found

なるほど、今日から20013年末までの13日の金曜日を数えればよいわけd・・・・・200・・・・
20013年!?


証拠ぎゃぞw




ふむ。


これは楽しそうな課題なのでやってみた(ぉ

ソースコード

<?php

for($d = new DateTime(), $d->setDate($d->format("Y"), $d->format("m"), 13),
    $end = new DateTime("9999-12-31"), $end->modify("+10014 year"),
    $i = 0;
    $d->format("U") < $end->format("U"); $d->modify("+1 month")) {
    if ($d->format("w") == 5) {
        echo $d->format("Y/m/d (金)") ."\n";
        $i++;
    }   
}

echo "\n総数:$i\n";

実行結果

2009/02/13 (金)
2009/03/13 (金)
2009/11/13 (金)
2010/08/13 (金)
2011/05/13 (金)
2012/01/13 (金)
2012/04/13 (金)
2012/07/13 (金)
2013/09/13 (金)
2013/12/13 (金)
(中略)
5268/07/13 (金)
5269/09/13 (金)
5269/12/13 (金)
5270/06/13 (金)
5271/02/13 (金)
5271/03/13 (金)
5271/11/13 (金)
5272/05/13 (金)
5273/01/13 (金)
5273/10/13 (金)
5274/04/13 (金)
5274/07/13 (金)
5275/09/13 (金)
5275/12/13 (金)
5276/03/13 (金)
(中略)
10009/02/13 (金)
10009/03/13 (金)
10009/11/13 (金)
10010/08/13 (金)
10011/05/13 (金)
10012/01/13 (金)
10012/04/13 (金)
10012/07/13 (金)
10013/09/13 (金)
10013/12/13 (金)
(中略)
20009/03/13 (金)
20009/11/13 (金)
20010/08/13 (金)
20011/05/13 (金)
20012/01/13 (金)
20012/04/13 (金)
20012/07/13 (金)
20013/09/13 (金)
20013/12/13 (金)

総数:30970

思うこと


ひとつ。

DateTimeオブジェクトのコンストラクタでは 10013-12-31 などと1万を超えるヤツは指定できない。どうやら、9999-12-31までしかだめなようだ。
でも、modifyでは1万以上の数字もバリバリOK。ということで、9999で初期化して+10014するというカンジにした。



ふたつ。

DateTimeオブジェクトで初期化して、その年・月を変えずに日を変えたいときなど、

$d->setDate($d->format("Y"), $d->format("m"), 13)

こんなウザったいことをしなきゃいけないのだろうか。なんかウザったいなほんと。それとも私が知らないだけ?



みっつ。

DateTimeオブジェクトは優秀。人類が滅びても、PHPは劣化しません。 (元ネタ:[PHP-users 33716] プログラムが劣化することはあるのでしょうか)


よっつ。

ていうか、今日がその月の13日以降だった場合だめなプログラム(ダメじゃん



いつつ。

ネタですよ。確信犯です。なのでどうかくに投稿せずにブログに投稿w

追記


そのいち。
総数かぞえてなかったよ>< ということで追記したよ>< → さらに間違ってたから修正したよ!!w


そのに。
しまったああ!ネタばっかり考えてたらGolfだってことわすれてたよ!!!!しらない!


そのさん。
しまったあああ!ネタなのに 20013のところ 10013 にしてしまうというボンミス!!!ネタの一番大事なところを間違えるだなんて・・・orz →修正。つか2万年でもぜんぜんイケましたPHP