回答編集履歴

2

誤記修正

2018/06/26 10:01

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  const isLeap=(y)=>{
56
56
 
57
- return (y%400==0)?true:(y%100==0)?y:(year%4==0);
57
+ return (y%400==0)?true:(y%100==0)?false:(y%4==0);
58
58
 
59
59
  };
60
60
 

1

サンプルコードの追加

2018/06/26 10:01

投稿

tkturbo
tkturbo

スコア5572

test CHANGED
@@ -31,3 +31,89 @@
31
31
 
32
32
 
33
33
  5.3の結果と4の結果を比較すれば解が出る。
34
+
35
+
36
+
37
+
38
+
39
+ ### 追記
40
+
41
+
42
+
43
+ javascriptで書いてみたけど、結構めんどくさかった。
44
+
45
+ ```javascript
46
+
47
+ (()=>{
48
+
49
+ var isBigTimeLag=(a={year:2018,month:6,day:26,hour:13,minute:3},
50
+
51
+ b={year:2018,month:6,day:26,hour:17,minute:53})=>{
52
+
53
+ const lag={hour:4,minute:20};
54
+
55
+ const isLeap=(y)=>{
56
+
57
+ return (y%400==0)?true:(y%100==0)?y:(year%4==0);
58
+
59
+ };
60
+
61
+ const getDayCountOfLastMonth=(y, m)=>{
62
+
63
+ return (m==3)?(isLeap(y)?29:28):((m!=2&&m%5==2)||(m%5==0))?30:31;
64
+
65
+ };
66
+
67
+ let baseYear = 2000;
68
+
69
+ while(baseYear < a.year && baseYear < b.year){ baseYear++; }
70
+
71
+ while(baseYear > a.year && baseYear > b.year){ baseYear--; }
72
+
73
+ const sumDays=(ymd)=>{
74
+
75
+ let day = 0;
76
+
77
+ for(let y = baseYear, m = 2; y <= ymd.year; y++,m=1){
78
+
79
+ for(; m <= (y==ymd.year?ymd.month:12); m++){
80
+
81
+ day += getDayCountOfLastMonth(y, m);
82
+
83
+ }
84
+
85
+ }
86
+
87
+ return day;
88
+
89
+ }
90
+
91
+ a.day += sumDays(a);
92
+
93
+ b.day += sumDays(b);
94
+
95
+ if(a.day != b.day){
96
+
97
+ [a.hour, b.hour]=[a.hour+(a.day>b.day?(a.day-b.day)*24:0),
98
+
99
+ b.hour+(b.day>a.day?(b.day-a.day)*24:0)];
100
+
101
+ }
102
+
103
+ a.minute += a.hour*60;
104
+
105
+ b.minute += b.hour*60;
106
+
107
+ let t = lag.hour*60 + lag.minute;
108
+
109
+ return (a.minute - b.minute < -1 * t)||(a.minute - b.minute > t);
110
+
111
+ };
112
+
113
+ console.log(isBigTimeLag());
114
+
115
+ })();
116
+
117
+ ```
118
+
119
+ 自作することのめんどくささよ。