← Home
For problem statement at 0-999/600-699/690-699/695/problemD.txt this is a correct solution, but verifier at 0-999/600-699/690-699/695/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func isLeap(y int) bool {
	return y%400 == 0 || (y%100 != 0 && y%4 == 0)
}

func daysInMonth(y, m int) int {
	if m == 2 {
		if isLeap(y) {
			return 29
		}
		return 28
	}
	if m == 4 || m == 6 || m == 9 || m == 11 {
		return 30
	}
	return 31
}

func timeToDate(t int64) (Y, M, D, H, Min, S, W int) {
	S = int(t % 60)
	Min = int((t / 60) % 60)
	H = int((t / 3600) % 24)
	days := t / 86400
	W = int((days+3)%7) + 1

	cycles := days / 146097
	Y = 1970 + int(cycles)*400
	days %= 146097

	for {
		dy := 365
		if isLeap(Y) {
			dy = 366
		}
		if days >= int64(dy) {
			days -= int64(dy)
			Y++
		} else {
			break
		}
	}
	M = 1
	for {
		dm := daysInMonth(Y, M)
		if days >= int64(dm) {
			days -= int64(dm)
			M++
		} else {
			break
		}
	}
	D = int(days) + 1
	return
}

func dateToTime(Y, M, D, H, Min, S int) int64 {
	var days int64 = 0
	Y_diff := Y - 1970
	cycles := Y_diff / 400
	days += int64(cycles) * 146097
	currY := 1970 + cycles*400
	for currY < Y {
		if isLeap(currY) {
			days += 366
		} else {
			days += 365
		}
		currY++
	}
	for m := 1; m < M; m++ {
		days += int64(daysInMonth(Y, m))
	}
	days += int64(D - 1)

	return days*86400 + int64(H)*3600 + int64(Min)*60 + int64(S)
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var reqSec, reqMin, reqHour, reqDay, reqDate, reqMonth int
	if _, err := fmt.Fscan(in, &reqSec, &reqMin, &reqHour, &reqDay, &reqDate, &reqMonth); err != nil {
		return
	}

	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}

	for i := 0; i < n; i++ {
		var t int64
		fmt.Fscan(in, &t)

		T := t + 1
		for {
			Y, M, D, H, Min, S, W := timeToDate(T)

			if reqMonth != -1 && M != reqMonth {
				if M < reqMonth {
					T = dateToTime(Y, reqMonth, 1, 0, 0, 0)
				} else {
					T = dateToTime(Y+1, reqMonth, 1, 0, 0, 0)
				}
				continue
			}

			valid := false
			c1 := (reqDate == -1 || D == reqDate)
			c2 := (reqDay == -1 || W == reqDay)
			if reqDate != -1 && reqDay != -1 {
				valid = (D == reqDate || W == reqDay)
			} else {
				valid = c1 && c2
			}

			if !valid {
				T = T - (T % 86400) + 86400
				continue
			}

			if reqHour != -1 && H != reqHour {
				if H < reqHour {
					T = T - (T % 86400) + int64(reqHour)*3600
				} else {
					T = T - (T % 86400) + 86400
				}
				continue
			}

			if reqMin != -1 && Min != reqMin {
				if Min < reqMin {
					T = T - (T % 3600) + int64(reqMin)*60
				} else {
					T = T - (T % 3600) + 3600
				}
				continue
			}

			if reqSec != -1 && S != reqSec {
				if S < reqSec {
					T = T - (T % 60) + int64(reqSec)
				} else {
					T = T - (T % 60) + 60
				}
				continue
			}

			fmt.Fprintln(out, T)
			break
		}
	}
}
```