足跡-sokuseki-

りかの日進月歩の記録

ABC079 D Wall

D - Wall

問題概要

1つの数字を  i から  j に変えるコストを  c_{i,j} とする。
 H \times W 行列  A が与えられ、 A_{i,j} \neq -1 のとき上から  i 番目、左から  j 番目のマスに数字  A_{i,j} が書かれていて、  A_{i,j} = -1 のとき上から  i 番目、左から  j 番目のマスに数字が書かれていないことを意味する。
マスに書かれたすべての数字を1にする最小コストを答えよ。

制約
 1 \le H, W \le 200
 i \neq j のとき  1 \le c_{i,j} \le 10^3
 i = j のとき   c_{i,j} = 0
 -1 \le A_{i,j} \le 9

解法

数字を頂点番号だと思って、各頂点から頂点1への最短経路を求めます。(ワーシャルフロイドが一番書く量が少ないのでワーシャルフロイドを書いた)
あとはそれぞれの数字がマスにいくつ書かれているかを計算して、コストを掛けて出力する。

Submission #1965974 - AtCoder Beginner Contest 079

ARC083(ABC074) D Restoring Road Network

D - Restoring Road Network

問題概要

 N 次正方行列  A が与えられる。すべての  u, v について、 A  u  v 列成分が頂点  u と頂点  v の最短距離となるようなグラフが存在するかを判定する。また、存在する場合、そのようなグラフのうち辺のコストの総和が最小となるものについて、その総和を求めよ。

制約
 1 \le N \le 300
 i \neq j のとき  1 \le A_{i,j} = A_{j,i} \le 10^9
 i = j のとき   A_{i,j} = 0

解法

実質ワーシャルフロイド(?)

  1. 頂点  i から頂点  j に行く最短距離が、頂点  i から頂点  k を経由して頂点  j に行く最短距離よりも長いことはありえない*1、もしそうなっていたら、そのようなグラフは存在しないので-1を出力する
  2. 頂点  i から頂点  j に行く最短距離が、頂点  i から頂点  k を経由して頂点  j に行く最短距離と等しいならば、頂点  i と頂点  j の間にある辺は取り除いて良い

を実装する

(2は未証明だけど投げたら通ったのであんまり理解してないです)

Submission #1963963 - AtCoder Regular Contest 083

*1:距離の公理

ABC084 D 2017-like Number

400点以上の問題は積極的にブログに書こうと思います。

D - 2017-like Number

問題概要

 N  \frac{N+1}{2} 素数」を満たす奇数  N 2017に似た数と定義する。
 Q 個のクエリが与えられるので、それぞれのクエリに対して、 l_i \le x \le r_i かつ2017に似た数となる奇数  x の個数を答えよ。

制約
 1 \le Q \le 10^5
 1 \le l_i \le r_i \le 10^5

解法

方針は以下の通り。

  1.  N のとりうる上限(  10^5 )まで素数判定をする(試し割りだと間に合わないのでエラトステネスの篩を使う)
  2.  N のとりうる上限(  10^5 )まで2017に似た数判定をする
  3. 累積和を使って、「N以下の2017に似た数の個数」をすべて*1 N について求める
  4. 各クエリ  l_i, r_i に対して、  r_i 以下の2017に似た数の個数から l_i 以下の2017に似た数の個数を引いたものを出力する

Submission #1961699 - AtCoder Beginner Contest 084

感想

そすーそすー

*1:本当は奇数だけで良いが、場合分けが面倒なので

ACPC2017参加記

会津大学競技プログラミング合宿2017 : ATND に参加してきました。

 

day 0 

 

今年も会津の地に前日入りした。昼過ぎの京都発の新幹線に乗って、会津若松駅に着いたのが18時ごろだったので、やっぱり会津は遠いな〜と1年ぶりに思った。

新幹線の中では主にデレステをしていた。

 

ホテルは駅前だったので移動が楽だった。ホテルではデレステをしていた。

 

なんか合宿前の高揚感とガシャの引きによる高揚感で4時まで眠れず(ア

 

day 1 立命館大学セット

 

 

起床のプロなので7時半に起きた。

 

 

ホテルの無料朝食おいしい。

 

 

ヅに島村卯月の中の人が来るらしくて羨ましい。

 

 

初日なので自己紹介があって、(何かネタに走ろうかとも考えていたけど)普通に名前だけ言った。ウクニキアさん(@ukuku09)が面白かった。

 

コンテストは、立命館がジャッジ側だった。コンテストが始まってから、解説スライドを作りながら自分たちが考えた問題が解かれていくのを眺めてた。

 

コンテスト後にC問題の解説*1をした。

 

原案はAとCと若干B*2。Aはもともとシャトルランを題材にしていて、2回連続で線にたどり着けなかったら終了みたいなのを考えていたけど、シャトルランの定義が難しいということで丸付けになった。CはTwitterをしていたら降ってきたもの。Twitterから作問のインスピレーションを得ることが多い。

 

初日の懇親会は会津の人がたくさんいるテーブルにいたので、会津の人の話を聞いていた。その場にいないのにbeetさん(@beet_aizu)とうしさん(@ei1333)が話題にされていた。ツカサさん(@tsukasa_diary)と隣だったので北海道の話も聞いた。

 

ホテル帰ってかららずくん(@Luzhiled)とめる先輩(@ixmel)と一緒にデレステをした(DEGwerさんもいた)。

 

日付変わる前くらいに解散して明日の準備をしてからデレステをした。

 

 

 

 

 

結局グダグダ4時まで起きてた(ア

 

 

day 2 会津大学セット

 

 

 

朝起きるのが世界一下手なので二度寝して8時半に起きた。それでも起床のプロなので(?)無料朝食と集合時間には間に合った。

 

コンテストに問題を解く側として参加。

 

B問題を担当して、1時間くらいかけてバグらせながらACした。そのあとはDの考察に加わったり問題を読んだりしてたが、とくに貢献はできず。

 

 

解説はDとMが頭良すぎて素晴らしくてやばかった。

解説が終わってから懇親会会場に移動するまでの間にkzyKTさん(@kzyKT_M)とK問題について少し話した。

 

懇親会に移動するときに近くにうしさんがいたので少しお話しした。

 

 

が、話すのが苦手なのですぐにTwitterに逃げた。

 

 

 

2日目の懇親会は右隣にらずくん、左隣にkzyKTさん、正面にめる先輩がいて、途中でみんな揃ってデレステの宝くじとガシャをやり始めたのがハイライト。

 

 

 ホテル帰ってかららずくん(@Luzhiled)とめる先輩(@ixmel)と一緒にデレステをした。

 日付変わる前くらいに解散して明日の準備をしてからデレステをした。

 

3日目は集合が早いので早く寝ようと思っていたら気づいたら3時回ってた(ア

 

day 3 北海道大学セット

 

 早起きするのが世界一苦手なので7時半に起きた。それでも起床のプロなので(?)無料朝食と集合時間には間に合った。

 

 

コンテストに問題を解く側として参加。

 

 

チーム名は何かのアニメに出てくる高校の名前らしいです(よく知らず……

 

B問題担当で、問題を見た瞬間数学で内心*3ハイテンションだった。が、考えてみると難しすぎて、imulanさんと一緒に考察していた。1時間くらいかかったけど、0WAで通せた(実装したのはimulanさんなのでぼくが通したわけではない)のは良かった。

Bを通した段階で チームとしてはABCの3完でDの考察も結構進んでいて、その後特に貢献とかはできなくて、考察や実装を眺めていた。

 

 

おみやげを買って会津若松で電車に乗ろうとしたらうしさんとらずくんに会った。のでデレステをした。(立命館勢が乗り込んだ後に他のACPC参加者も乗ってきたので競プロer率がやばかった)

 

 

郡山で新幹線の乗り換えまで時間があったのでアニメイトに行った。広かった。

 

新幹線に乗ってる間はデレステをした。

 

 

まとめ

 

問題はあまり解けなかったけど、普段合わない競技プログラマーと直接会って交流できたのでよかった。とても楽しかった。

次の合宿は春のRUPCなので、それまでにもっと難しい問題を解けるようになりたい。

 

RCOさんのおかげでおいしい食事を食べられたので良かった。懇親会と牛丼ありがとうございました!

会津大学のみなさんもありがとうございました!

 

 

*1:会津合宿 2017 - 立命館大学情報理工学部プロジェクト団体RiPPro

*2:Bの原案はテセウスの船みたいな感じ

*3:三角形の内接円の中心ではない 

ICPC2017国内予選 参加記

ICPC国内予選に出ました。

参加記を書くまでが国内予選みたいな風習があるっぽいので書きます。

ACM-ICPC 2017 国内予選

 

予選前

 

去年のチームは同学年3人で組んでいたので今年も同学年で組むか〜となって、yebi君(@sigsigma19)としゅもん君(@shumon_84)と組むことに(去年とメンバーは違う)。

1回生たちも出るみたいだから負けたくない!って3人でずっと言ってた(これがフラグとなる)(たぶん)。

6月末に部内コンでチーム練を始めたら、1回生チームたちと互角の戦い(ほんまか?)をしていて、これはやばいとなる。

 

模擬国内は3人で出て、2完でした。B問題を担当してバグらせながら通した。

1回生に負けたのでお通夜だった。悲しいね。

f:id:wk1080id:20170715123629p:plain

 

本当に予選で1回生チームに負けることが現実的になったので、それから予選までの2週間はおびえていた。

部内コン(AOJ-ICPCの問題以外も含まれている)では1回生に負け続け精神的負担が大きかった。今年の1回生はプロが多い。っょぃ。

 

前日は(きっと使わないであろう)ライブラリをいくつか印刷した。あと、超健康児(?)なので日付が変わる前に寝た。

予選当日は普通に授業日だったので直前まで授業を受けていました。

 

 

予選開始

 

とりあえず問題文の印刷が終わるまでyebi君がA問題を解くという話だったので、A問題を任せる(といいつつ印刷に時間がかかっていたので3人で見てた)。O(N^2)の全探索が間に合うのでそれでいこうとなってyebi君が書いてA問題をAC。 そのころに問題文が来たので、B問題を読んだ。yebi君がC、しゅもん君はDを考え始める。B問題は前から見ていくだけでできるでしょ!wとなったのでコーディングを開始。が、実装が終わってサンプルを試すと合わなかったので、印刷クエリを投げて、yebi君に替わってCの実装をしてもらうことに。その間紙デバッグをしていた。Dはなんか二部マッチング臭がすると言われて、誰も書けないのでDは諦めるか〜みたいな話をした。しゅもん君には他の問題に目を通してもらうことにした。

Cの実装が終わってサンプルが合わないようだったので、コーディングを替わってもらった。Bはサンプル出力が合ったのでsubmitしたらWAでつらい気持ちになった。 印刷クエリを投げてyebi君に交代したら、Cが通った。プロ。

自分はというと、サンプルが合ってるのにWAでどこが間違っているかわからなかった(世界一頭が悪い)ので、しゅもん君にB問題をバトンタッチして他の問題を考察することにした。Eの構文解析は全くできる気がしなくてパスして、Fの折りたたむやつは去年の会津合宿の立命セットぽさを感じて(よく考えたらそうでもない)、無理そうな雰囲気を感じ取った。Gはdfsかbfsでできそうな感じがした。Hは幾何だから考えたくもないと思って放置。

一番できそうなGの考察をyebi君としていた。各部屋を1度しか通れないことから、対角線に移動するのは不可能だとわかるので、宝の取り方は左上->左下->右下->右上->左上の順番だけ考えればいいということがわかる。宝の場所に移動するまでに遠回りをすると通ることのできない場所が増えてしまうので、最短距離のルートで通ればいいんじゃないかとなる。しゅもん君の実装が終わり次第yebi君にGを実装してもらうことにしてHを考えてみる。

Hは移動する頂点と移動先の頂点を決めれば、2回の移動で頂点を重ねられることと、5回以上の操作が必要な場合はそこで計算をやめていいので、場合分けすればいけるか?となった(が、幾何ライブラリはあるものの使いこなせないので無理ゲー臭がしたので諦めた)(あと、幾何ライブラリを写すのに時間がかかりすぎる)。

しゅもん君がバグらせながらもB問題を通してくれたので、Gをyebi君に書いてもらう。

その間にEを少し考察したが、できそうにないので、しゅもん君とともに実装を見ていた。最後まで実装できずにコンテストが終了。

  

結果は3完99位でした。

 

f:id:wk1080id:20170715131642p:plain

 

 

なお1回生チームに負けた。先輩ってなんですか。後輩がプロなので先輩を名乗るのをやめたい気持ちでいっぱい。 

 

 

予選後

 

 

部室で菓子パしながらゲームとかで盛り上がってた。

22時くらいに警備員さんにはよ帰れって追い出されて辛かった。 

 

 

そういえば去年の国内予選でもBをバグらせてACできなかったなあとか思い出して悲しい気持ちになった。成長できてないじゃん。実質バグ担当。つらい。

 

次のチーム戦はおそらく会津合宿になるだろうから、それまでにもっと(主にグラフ系の)知識をつけたいなと思った(その前に簡単な問題をバグらせる癖を直したい)。

 

チーム名について

 

ICPC参加登録の直前まで名前がきまっていなくて、どうしようとなったときに、素数うさぎ関連にしないかということになって(ぼくが言い出したわけではない)、Prime Rabbitになった。が、某がごちうさ要素を入れてもいいんじゃないかとか言い始めたので、アルファベット数が575になる「prime rabbits house」を提案してみたらなぜかそれでいくことになった。なんでみんなそんなに素数うさぎが好きなんだろう……。

 

 

ABC008 C コイン

数学ができないので。
期待値問題は苦手です。

C: コイン - AtCoder Beginner Contest 008 | AtCoder

問題概要

 N 枚のコインを無作為に一列に並べる。左端から順に、そのコインよりも右側にある、そのコインに書かれた数  C_i の倍数が書かれたコインをすべてひっくり返す。最終的に表を向いている(偶数回反転した)コインの枚数の期待値を求めよ。

制約
 1 \le N \le 100
 1 \le C_i \le 10^9


満点解法

期待値は、起こりうる確率を足し合わせることで求められる。よって、各コインについて、並べ方によって表を向く確率を計算して、それを足し合わせるという方針。

今見ているコインをCとすると、Cをひっくり返すことに関わるコインはCの約数が書かれているコインのみである。よって、Cの約数が書かれているコインの数に注目する。

Cが表を向いている(偶数回ひっくり返えす)とき、Cの左側にはCの約数が書かれたコインが偶数枚ある。
このことから、Cの約数が書かれたコインの数をSとすると、
Cが表を向いている場合の数は

  • Sが奇数のとき  \frac{S+1}{2} 通り
  • Sが偶数のとき  \frac{S}{2}+1 通り

となる。
よって、Cが表を向いている確率は

  • Sが奇数のとき  \frac{ \frac{S+1}{2} }{S+1} = \frac{1}{2}
  • Sが偶数のとき  \frac{ \frac{S}{2} +1 }{S+1} = \frac{S+2}{2S+2}

であるので、これを各コインについて足し合わせればよい。

計算量は  O(N^2)


Submission #1241223 - AtCoder Beginner Contest 008 | AtCoder


感想

数学は苦手。
今回は解説を見たけど、期待値問題を自力で解けるようになりたい。

もしも日付を約分することができたなら



というツイートが流れてきて、「日付を約分できたら1年はどんな感じになるのかなあ」と思ったのがきっかけ。





ということで、プログラムを書いて計算しました。検証は

  1. 1年間には何種類の日付が存在するのか
  2. 1年間は最短で何日と言えるのか

です。あらかじめ言っておきますが、ソースコードの可読性は低いです。はい。言語はc++です。



Q. 1年間には何種類の日付が存在するのか




結論から言うと、231日です。



解法1

素数を高速に求めるエラトステネスの篩っぽいやり方で計算してみた。

#include<iostream>
using namespace std;

int main(void) {
  int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//各月の日数                              
  int ans=0;
  int date[13][32]={};
  for(int i=1;i<=12;i++){
    for(int j=1;j<=31;j++){
      if(days[i]<j)break;
      if(date[i][j])continue;
      ans++;
      for(int k=2;i*k<=12&&j*k<=days[i*k];k++)
        date[i*k][j*k]++;
    }
  }
  cout<<ans<<endl;
}
解法2

月と日の最大公約数が1のペアだけ数えればよくね?みたいになったので、gcdを計算する方法で書いた。
(互いに素の話をはじめに@kyo_math1729 さんがしていたのをすっかり忘れていた)

#include<iostream>
#include<algorithm>
using namespace std;

int main(void) {
  int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//各月の日数                              
  int ans=0;
  for(int i=1;i<=12;i++)
    for(int j=1;j<=31;j++){
      if(days[i]<j)break;
      if(__gcd(i,j)==1)ans++;
    }
  cout<<ans<<endl;
}

__gcd関数って便利ですね。





Q. 1年間は最短で何日と言えるのか


これまた結論から言うと、4日です。
@asagi_a4ac さんの言う通り、1/1 -> 1/2 (2/4) -> 2/5 (12/30) ->12/31 が最短でした。

(追記:これは日付を巻き戻すことを考慮していません。なので、たとえば、1/31に行くときに1/1 -> 2/2 -> 2/1 -> 1/31 という動きかたはしないものとしています。)

解法1

再帰関数に突っ込むという方法。12/31から戻っていくと、貪欲に計算できます(たぶん)。

#include<iostream>
#include<algorithm>
using namespace std;

int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//各月の日数                                

int date_num(int month,int day){
  int same_month=month/__gcd(month,day);
  int same_day=day/__gcd(month,day);
  if(same_month==1 && same_day==1)return 1;
  if(same_day==1){
    return date_num(same_month-1,days[same_month-1])+1;
  }else{
    return date_num(same_month,same_day-1)+1;
  }
}

int main(void) {
  cout<<date_num(12,31)<<endl;
}
解法2
dp[i][j]:=i月j日にたどり着ける最短日数

として、DP(動的計画法)で求める方法。

#include<iostream>
#include<algorithm>

using namespace std;
#define INF 1e9


int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//各月の日数                                

int main(void) {
  int i,j;
  int dp[13][32];

  for(int i=1;i<=12;i++)
    for(int j=1;j<=31;j++)
      dp[i][j]=INF; //初期化

  dp[1][1]=1;
  for(int i=1;i<=12;i++)
    for(int j=1;j<=31;j++){
      if(days[i]<j)break;
      if(days[i]==j){
        if(i==12)break;
        dp[i+1][1]=min(dp[i+1][1],dp[i][j]+1);
        break;
      }
      dp[i][j+1]=min(dp[i][j+1],dp[i][j]+1);
      for(int k=2;i*k<=12&&j*k<=days[i*k];k++)
        dp[i*k][j*k]=min(dp[i*k][j*k],dp[i][j]);
    }
  cout<<dp[12][31]<<endl;
}
おまけ

1年のそれぞれの日付が最短何日でたどり着けるのかを調べた。
使ったソースコードはこれ。最後の出力を少し変えただけ。

#include<iostream>
#include<algorithm>

using namespace std;
#define INF 1e9


int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//各月の日数                                

int main(void) {
  int i,j;
  int dp[13][32];

  for(int i=1;i<=12;i++)
    for(int j=1;j<=31;j++)
      dp[i][j]=INF; //初期化

  dp[1][1]=1;
  for(int i=1;i<=12;i++)
    for(int j=1;j<=31;j++){
      if(days[i]<j)break;
      if(days[i]==j){
        if(i==12)break;
        dp[i+1][1]=min(dp[i+1][1],dp[i][j]+1);
        break;
      }
      dp[i][j+1]=min(dp[i][j+1],dp[i][j]+1);
      for(int k=2;i*k<=12&&j*k<=days[i*k];k++)
        dp[i*k][j*k]=min(dp[i*k][j*k],dp[i][j]);
    }

 for(int i=1;i<=12;i++)
    for(int j=1;j<=31;j++){
      if(days[i]<j)break;
      cout<<i<<"月"<<j<<"日は"<<dp[i][j]<<"日目"<<endl;
    }
}


で、結果はこうなりました。

1月1日は1日目
1月2日は2日目
1月3日は3日目
1月4日は4日目
1月5日は5日目
1月6日は6日目
1月7日は7日目
1月8日は8日目
1月9日は9日目
1月10日は10日目
1月11日は11日目
1月12日は12日目
1月13日は13日目
1月14日は14日目
1月15日は15日目
1月16日は16日目
1月17日は17日目
1月18日は18日目
1月19日は19日目
1月20日は20日目
1月21日は21日目
1月22日は22日目
1月23日は23日目
1月24日は24日目
1月25日は25日目
1月26日は26日目
1月27日は27日目
1月28日は28日目
1月29日は29日目
1月30日は30日目
1月31日は31日目

2月1日は32日目
2月2日は1日目
2月3日は2日目
2月4日は2日目
2月5日は3日目
2月6日は3日目
2月7日は4日目
2月8日は4日目
2月9日は5日目
2月10日は5日目
2月11日は6日目
2月12日は6日目
2月13日は7日目
2月14日は7日目
2月15日は8日目
2月16日は8日目
2月17日は9日目
2月18日は9日目
2月19日は10日目
2月20日は10日目
2月21日は11日目
2月22日は11日目
2月23日は12日目
2月24日は12日目
2月25日は13日目
2月26日は13日目
2月27日は14日目
2月28日は14日目

3月1日は15日目
3月2日は16日目
3月3日は1日目
3月4日は2日目
3月5日は3日目
3月6日は2日目
3月7日は3日目
3月8日は4日目
3月9日は3日目
3月10日は4日目
3月11日は5日目
3月12日は4日目
3月13日は5日目
3月14日は6日目
3月15日は5日目
3月16日は6日目
3月17日は7日目
3月18日は6日目
3月19日は7日目
3月20日は8日目
3月21日は7日目
3月22日は8日目
3月23日は9日目
3月24日は8日目
3月25日は9日目
3月26日は10日目
3月27日は9日目
3月28日は10日目
3月29日は11日目
3月30日は10日目
3月31日は11日目

4月1日は12日目
4月2日は13日目
4月3日は14日目
4月4日は1日目
4月5日は2日目
4月6日は2日目
4月7日は3日目
4月8日は2日目
4月9日は3日目
4月10日は3日目
4月11日は4日目
4月12日は3日目
4月13日は4日目
4月14日は4日目
4月15日は5日目
4月16日は4日目
4月17日は5日目
4月18日は5日目
4月19日は6日目
4月20日は5日目
4月21日は6日目
4月22日は6日目
4月23日は7日目
4月24日は6日目
4月25日は7日目
4月26日は7日目
4月27日は8日目
4月28日は7日目
4月29日は8日目
4月30日は8日目

5月1日は9日目
5月2日は10日目
5月3日は11日目
5月4日は12日目
5月5日は1日目
5月6日は2日目
5月7日は3日目
5月8日は4日目
5月9日は5日目
5月10日は2日目
5月11日は3日目
5月12日は4日目
5月13日は5日目
5月14日は6日目
5月15日は3日目
5月16日は4日目
5月17日は5日目
5月18日は6日目
5月19日は7日目
5月20日は4日目
5月21日は5日目
5月22日は6日目
5月23日は7日目
5月24日は8日目
5月25日は5日目
5月26日は6日目
5月27日は7日目
5月28日は8日目
5月29日は9日目
5月30日は6日目
5月31日は7日目

6月1日は8日目
6月2日は9日目
6月3日は10日目
6月4日は11日目
6月5日は12日目
6月6日は1日目
6月7日は2日目
6月8日は2日目
6月9日は2日目
6月10日は3日目
6月11日は4日目
6月12日は2日目
6月13日は3日目
6月14日は3日目
6月15日は3日目
6月16日は4日目
6月17日は5日目
6月18日は3日目
6月19日は4日目
6月20日は4日目
6月21日は4日目
6月22日は5日目
6月23日は6日目
6月24日は4日目
6月25日は5日目
6月26日は5日目
6月27日は5日目
6月28日は6日目
6月29日は7日目
6月30日は5日目

7月1日は6日目
7月2日は7日目
7月3日は8日目
7月4日は9日目
7月5日は10日目
7月6日は11日目
7月7日は1日目
7月8日は2日目
7月9日は3日目
7月10日は4日目
7月11日は5日目
7月12日は6日目
7月13日は7日目
7月14日は2日目
7月15日は3日目
7月16日は4日目
7月17日は5日目
7月18日は6日目
7月19日は7日目
7月20日は8日目
7月21日は3日目
7月22日は4日目
7月23日は5日目
7月24日は6日目
7月25日は7日目
7月26日は8日目
7月27日は9日目
7月28日は4日目
7月29日は5日目
7月30日は6日目
7月31日は7日目

8月1日は8日目
8月2日は9日目
8月3日は10日目
8月4日は11日目
8月5日は12日目
8月6日は13日目
8月7日は14日目
8月8日は1日目
8月9日は2日目
8月10日は2日目
8月11日は3日目
8月12日は2日目
8月13日は3日目
8月14日は3日目
8月15日は4日目
8月16日は2日目
8月17日は3日目
8月18日は3日目
8月19日は4日目
8月20日は3日目
8月21日は4日目
8月22日は4日目
8月23日は5日目
8月24日は3日目
8月25日は4日目
8月26日は4日目
8月27日は5日目
8月28日は4日目
8月29日は5日目
8月30日は5日目
8月31日は6日目

9月1日は7日目
9月2日は8日目
9月3日は9日目
9月4日は10日目
9月5日は11日目
9月6日は12日目
9月7日は13日目
9月8日は14日目
9月9日は1日目
9月10日は2日目
9月11日は3日目
9月12日は2日目
9月13日は3日目
9月14日は4日目
9月15日は3日目
9月16日は4日目
9月17日は5日目
9月18日は2日目
9月19日は3日目
9月20日は4日目
9月21日は3日目
9月22日は4日目
9月23日は5日目
9月24日は4日目
9月25日は5日目
9月26日は6日目
9月27日は3日目
9月28日は4日目
9月29日は5日目
9月30日は4日目

10月1日は5日目
10月2日は6日目
10月3日は7日目
10月4日は8日目
10月5日は9日目
10月6日は10日目
10月7日は11日目
10月8日は12日目
10月9日は13日目
10月10日は1日目
10月11日は2日目
10月12日は2日目
10月13日は3日目
10月14日は3日目
10月15日は2日目
10月16日は3日目
10月17日は4日目
10月18日は5日目
10月19日は6日目
10月20日は2日目
10月21日は3日目
10月22日は3日目
10月23日は4日目
10月24日は4日目
10月25日は3日目
10月26日は4日目
10月27日は5日目
10月28日は6日目
10月29日は7日目
10月30日は3日目
10月31日は4日目

11月1日は5日目
11月2日は6日目
11月3日は7日目
11月4日は8日目
11月5日は9日目
11月6日は10日目
11月7日は11日目
11月8日は12日目
11月9日は13日目
11月10日は14日目
11月11日は1日目
11月12日は2日目
11月13日は3日目
11月14日は4日目
11月15日は5日目
11月16日は6日目
11月17日は7日目
11月18日は8日目
11月19日は9日目
11月20日は10日目
11月21日は11日目
11月22日は2日目
11月23日は3日目
11月24日は4日目
11月25日は5日目
11月26日は6日目
11月27日は7日目
11月28日は8日目
11月29日は9日目
11月30日は10日目

12月1日は11日目
12月2日は8日目
12月3日は9日目
12月4日は9日目
12月5日は10日目
12月6日は10日目
12月7日は11日目
12月8日は11日目
12月9日は12日目
12月10日は12日目
12月11日は13日目
12月12日は1日目
12月13日は2日目
12月14日は2日目
12月15日は2日目
12月16日は2日目
12月17日は3日目
12月18日は2日目
12月19日は3日目
12月20日は3日目
12月21日は3日目
12月22日は4日目
12月23日は5日目
12月24日は2日目
12月25日は3日目
12月26日は3日目
12月27日は3日目
12月28日は3日目
12月29日は4日目
12月30日は3日目
12月31日は4日目

面白いですね。ちなみに2/29は2/28から遷移するので15日目のはずです。

感想

こういうクソくだらないことを考えるのが結構楽しい。