2013/04/09

2013年4月5日は26年ぶりの特別な“ある日”らしい のをPowerShellで確かめてみた。

2013年4月5日は26年ぶりの特別な“ある日”らしい」というまとめを見た上司が一言。

「じゃ、次はいつ来るんだっけ?」

というわけで、PowerShellでワンライナーを組んで確かめてみました。

for ( $dt = (get-date).adddays(-365*30) ; $dt -le ((get-date).adddays(365*400)); $dt = $dt.adddays(1) ) { $digits = @{}; $dt.tostring("yyyyMMdd") -split "" | where {$_ -match "[0-9]" } | foreach { $digits[$_] += 1 }; if ( $dt.tostring("yyyyMMdd").length -eq $digits.count ) { echo $dt.tostring("yyyy/MM/dd"); } }


1983/04/25
1983/04/26
1983/04/27
1983/05/24
1983/05/26
1983/05/27
1983/06/24
1983/06/25
1983/06/27
1983/07/24
1983/07/25
1983/07/26
1984/03/25
1984/03/26
1984/03/27
1984/05/23
1984/05/26
1984/05/27
1984/06/23
1984/06/25
1984/06/27
1984/07/23
1984/07/25
1984/07/26
1985/03/24
1985/03/26
1985/03/27
1985/04/23
1985/04/26
1985/04/27
1985/06/23
1985/06/24
1985/06/27
1985/07/23
1985/07/24
1985/07/26
1986/03/24
1986/03/25
1986/03/27
1986/04/23
1986/04/25
1986/04/27
1986/05/23
1986/05/24
1986/05/27
1986/07/23
1986/07/24
1986/07/25
1987/03/24
1987/03/25
1987/03/26
1987/04/23
1987/04/25
1987/04/26
1987/05/23
1987/05/24
1987/05/26
1987/06/23
1987/06/24
1987/06/25 ☆
2345/06/17 ←次は2345年6月17日!!ずいぶん先ですねw
2345/06/18
2345/06/19
2345/07/16
2345/07/18
2345/07/19
2345/08/16
2345/08/17
2345/08/19
2345/09/16
2345/09/17
2345/09/18
2346/05/17
2346/05/18
2346/05/19
2346/07/15
2346/07/18
2346/07/19
2346/08/15
2346/08/17
2346/08/19
2346/09/15
2346/09/17
2346/09/18
2347/05/16
2347/05/18
2347/05/19
2347/06/15
2347/06/18
2347/06/19
2347/08/15
2347/08/16
2347/08/19
2347/09/15
2347/09/16
2347/09/18
2348/05/16
2348/05/17
2348/05/19
2348/06/15
2348/06/17
2348/06/19
2348/07/15
2348/07/16
2348/07/19
2348/09/15
2348/09/16
2348/09/17
2349/05/16
2349/05/17
2349/05/18
2349/06/15
2349/06/17
2349/06/18
2349/07/15
2349/07/16
2349/07/18
2349/08/15
2349/08/16
2349/08/17
2354/06/17
2354/06/18
2354/06/19
2354/07/16
2354/07/18
2354/07/19
2354/08/16
2354/08/17
2354/08/19
2354/09/16
2354/09/17
2354/09/18
2356/04/17
2356/04/18
2356/04/19
2356/07/14
2356/07/18
2356/07/19
2356/08/14
2356/08/17
2356/08/19
2356/09/14
2356/09/17
2356/09/18
2357/04/16
2357/04/18
2357/04/19
2357/06/14
2357/06/18
2357/06/19
2357/08/14
2357/08/16
2357/08/19
2357/09/14
2357/09/16
2357/09/18
2358/04/16
2358/04/17
2358/04/19
2358/06/14
2358/06/17
2358/06/19
2358/07/14
2358/07/16
2358/07/19
2358/09/14
2358/09/16
2358/09/17
2359/04/16
2359/04/17
2359/04/18
2359/06/14
2359/06/17
2359/06/18
2359/07/14
2359/07/16
2359/07/18
2359/08/14
2359/08/16
2359/08/17
2364/05/17
2364/05/18
2364/05/19
2364/07/15
2364/07/18
2364/07/19
2364/08/15
2364/08/17
2364/08/19
2364/09/15
2364/09/17
2364/09/18



とは言え、これだけだとなんのこっちゃだと思うのでばらして解説。


for ( $dt = (get-date).adddays(-365*30) ; $dt -le ((get-date).adddays(365*400)); $dt = $dt.adddays(1) ) {
 $digits = @{};
 $dt.tostring("yyyyMMdd") -split "" | where {$_ -match "[0-9]" } | foreach { $digits[$_] += 1 };
 if ( $dt.tostring("yyyyMMdd").length -eq $digits.count ) {
  echo $dt.tostring("yyyy/MM/dd");
 }

}

Get-Dateは現在日付を得るコマンドレット。これに対してAddDays関数を呼び出すことで一日ずつテストする日付を作ります。

次に $digits = @{} で連想配列(HashTable)を作成し、日付の文字を1桁ずつばらして(-split)、それぞれの個数を計算($digits[$_] += 1)しています。
最終的に $digits.count には各桁に利用された数字の種類数が溜まります。

そして日付の桁数と、利用されている数字の種類数を比較し、同一であれば、各桁に利用されている数字が全て異なることが分かるのでechoで出力しています。

Powershellでもワンライナー芸できるのでお暇な方は是非。


<追記>
そもそも話題になった発端は、2013/4/5のような可変長の日付表示で数字が全部異なる場合だったのでスクリプトを修正しました。


for ( $dt = (get-date).adddays(-365*27) ; $dt -le ((get-date).adddays(365*27)); $dt = $dt.adddays(1) ) {
 $digits = @{};
 $dt.tostring("yyyyMd") -split "" | where {$_ -match "[0-9]" } | foreach { $digits[$_] += 1 };
 if ( $dt.tostring("yyyyMd").length -eq $digits.count ) {
  echo $dt.tostring("yyyy/M/d");
 }
}



1986/4/20
1986/4/23
1986/4/25
1986/4/27
1986/4/30
1986/5/2
1986/5/3
1986/5/4
1986/5/7
1986/5/20
1986/5/23
1986/5/24
1986/5/27
1986/5/30
1986/7/2
1986/7/3
1986/7/4
1986/7/5
1986/7/20
1986/7/23
1986/7/24
1986/7/25
1986/7/30
1987/2/3
1987/2/4
1987/2/5
1987/2/6
1987/3/2
1987/3/4
1987/3/5
1987/3/6
1987/3/20
1987/3/24
1987/3/25
1987/3/26
1987/4/2
1987/4/3
1987/4/5
1987/4/6
1987/4/20
1987/4/23
1987/4/25
1987/4/26
1987/4/30
1987/5/2
1987/5/3
1987/5/4
1987/5/6
1987/5/20
1987/5/23
1987/5/24
1987/5/26
1987/5/30
1987/6/2
1987/6/3
1987/6/4
1987/6/5
1987/6/20
1987/6/23
1987/6/24
1987/6/25
1987/6/30 ☆26年前!
2013/4/5 ←久しぶり!!
2013/4/6
2013/4/7
2013/4/8
2013/4/9 ←え、もう数字がダブるの…
2013/5/4 ←と思ったら結構すぐ来るのね…
2013/5/6
2013/5/7
2013/5/8
2013/5/9
2013/6/4
2013/6/5
2013/6/7
2013/6/8
2013/6/9
2013/7/4
2013/7/5
2013/7/6
2013/7/8
2013/7/9
2013/8/4
2013/8/5
2013/8/6
2013/8/7
2013/8/9
2013/9/4
2013/9/5
2013/9/6
2013/9/7
2013/9/8
2014/3/5
2014/3/6
2014/3/7
2014/3/8
2014/3/9
2014/5/3
2014/5/6
2014/5/7
2014/5/8
2014/5/9
2014/6/3
2014/6/5
2014/6/7
2014/6/8
2014/6/9
2014/7/3
2014/7/5
2014/7/6
2014/7/8
2014/7/9
2014/8/3
2014/8/5
2014/8/6
2014/8/7
2014/8/9
2014/9/3
2014/9/5
2014/9/6
2014/9/7
2014/9/8
2015/3/4
2015/3/6
2015/3/7
2015/3/8
2015/3/9
2015/4/3
2015/4/6
2015/4/7
2015/4/8
2015/4/9
2015/6/3
2015/6/4
2015/6/7
2015/6/8
2015/6/9
2015/7/3
2015/7/4
2015/7/6
2015/7/8
2015/7/9
2015/8/3
2015/8/4
2015/8/6
2015/8/7
2015/8/9
2015/9/3
2015/9/4
2015/9/6
2015/9/7
2015/9/8
2016/3/4
2016/3/5
2016/3/7
2016/3/8
2016/3/9
2016/4/3
2016/4/5
2016/4/7
2016/4/8
2016/4/9
2016/5/3
2016/5/4
2016/5/7
2016/5/8
2016/5/9
2016/7/3
2016/7/4
2016/7/5
2016/7/8
2016/7/9
2016/8/3
2016/8/4
2016/8/5
2016/8/7
2016/8/9
2016/9/3
2016/9/4
2016/9/5
2016/9/7
2016/9/8
2017/3/4
2017/3/5
2017/3/6
2017/3/8
2017/3/9
2017/4/3
2017/4/5
2017/4/6
2017/4/8
2017/4/9
2017/5/3
2017/5/4
2017/5/6
2017/5/8
2017/5/9
2017/6/3
2017/6/4
2017/6/5
2017/6/8
2017/6/9
2017/8/3
2017/8/4
2017/8/5
2017/8/6
2017/8/9
2017/9/3
2017/9/4
2017/9/5
2017/9/6
2017/9/8
2018/3/4
2018/3/5
2018/3/6
2018/3/7
2018/3/9
2018/4/3
2018/4/5
2018/4/6
2018/4/7
2018/4/9
2018/5/3
2018/5/4
2018/5/6
2018/5/7
2018/5/9
2018/6/3
2018/6/4
2018/6/5
2018/6/7
2018/6/9
2018/7/3
2018/7/4
2018/7/5
2018/7/6
2018/7/9
2018/9/3
2018/9/4
2018/9/5
2018/9/6
2018/9/7
2019/3/4
2019/3/5
2019/3/6
2019/3/7
2019/3/8
2019/4/3
2019/4/5
2019/4/6
2019/4/7
2019/4/8
2019/5/3
2019/5/4
2019/5/6
2019/5/7
2019/5/8
2019/6/3
2019/6/4
2019/6/5
2019/6/7
2019/6/8
2019/7/3
2019/7/4
2019/7/5
2019/7/6
2019/7/8
2019/8/3
2019/8/4
2019/8/5
2019/8/6
2019/8/7 ☆!!
2031/4/5 ☆10年以上またダブり続けるのね…
2031/4/6
2031/4/7
2031/4/8
2031/4/9
2031/5/4
2031/5/6
2031/5/7
2031/5/8
2031/5/9
2031/6/4
2031/6/5
2031/6/7
2031/6/8
2031/6/9
2031/7/4
2031/7/5
2031/7/6
2031/7/8
2031/7/9
2031/8/4
2031/8/5
2031/8/6
2031/8/7
2031/8/9
2031/9/4
2031/9/5
2031/9/6
2031/9/7
2031/9/8
2034/1/5
2034/1/6
2034/1/7
2034/1/8
2034/1/9
2034/5/1
2034/5/6
2034/5/7
2034/5/8
2034/5/9
2034/5/16
2034/5/17
2034/5/18
2034/5/19
2034/6/1
2034/6/5
2034/6/7
2034/6/8
2034/6/9
2034/6/15
2034/6/17
2034/6/18
2034/6/19
2034/7/1
2034/7/5
2034/7/6
2034/7/8
2034/7/9
2034/7/15
2034/7/16
2034/7/18
2034/7/19
2034/8/1
2034/8/5
2034/8/6
2034/8/7
2034/8/9
2034/8/15
2034/8/16
2034/8/17
2034/8/19
2034/9/1
2034/9/5
2034/9/6
2034/9/7
2034/9/8
2034/9/15
2034/9/16
2034/9/17
2034/9/18
2035/1/4
2035/1/6
2035/1/7
2035/1/8
2035/1/9
2035/4/1
2035/4/6
2035/4/7
2035/4/8
2035/4/9
2035/4/16
2035/4/17
2035/4/18
2035/4/19
2035/6/1
2035/6/4
2035/6/7
2035/6/8
2035/6/9
2035/6/14
2035/6/17
2035/6/18
2035/6/19
2035/7/1
2035/7/4
2035/7/6
2035/7/8
2035/7/9
2035/7/14
2035/7/16
2035/7/18
2035/7/19
2035/8/1
2035/8/4
2035/8/6
2035/8/7
2035/8/9
2035/8/14
2035/8/16
2035/8/17
2035/8/19
2035/9/1
2035/9/4
2035/9/6
2035/9/7
2035/9/8
2035/9/14
2035/9/16
2035/9/17
2035/9/18
2036/1/4
2036/1/5
2036/1/7
2036/1/8
2036/1/9
2036/4/1
2036/4/5
2036/4/7
2036/4/8
2036/4/9
2036/4/15
2036/4/17
2036/4/18
2036/4/19
2036/5/1
2036/5/4
2036/5/7
2036/5/8
2036/5/9
2036/5/14
2036/5/17
2036/5/18
2036/5/19
2036/7/1
2036/7/4
2036/7/5
2036/7/8
2036/7/9
2036/7/14
2036/7/15
2036/7/18
2036/7/19
2036/8/1
2036/8/4
2036/8/5
2036/8/7
2036/8/9
2036/8/14
2036/8/15
2036/8/17
2036/8/19
2036/9/1
2036/9/4
2036/9/5
2036/9/7
2036/9/8
2036/9/14
2036/9/15
2036/9/17
2036/9/18
2037/1/4
2037/1/5
2037/1/6
2037/1/8
2037/1/9
2037/4/1
2037/4/5
2037/4/6
2037/4/8
2037/4/9
2037/4/15
2037/4/16
2037/4/18
2037/4/19
2037/5/1
2037/5/4
2037/5/6
2037/5/8
2037/5/9
2037/5/14
2037/5/16
2037/5/18
2037/5/19
2037/6/1
2037/6/4
2037/6/5
2037/6/8
2037/6/9
2037/6/14
2037/6/15
2037/6/18
2037/6/19
2037/8/1
2037/8/4
2037/8/5
2037/8/6
2037/8/9
2037/8/14
2037/8/15
2037/8/16
2037/8/19
2037/9/1
2037/9/4
2037/9/5
2037/9/6
2037/9/8
2037/9/14
2037/9/15
2037/9/16
2037/9/18
2038/1/4
2038/1/5
2038/1/6
2038/1/7
2038/1/9
2038/4/1

一覧にしてみると、あんまりありがたくない感じがしますねぇ。。。。


0 件のコメント:

コメントを投稿