結果
| 問題 |
No.188 HAPPY DAY
|
| コンテスト | |
| ユーザー |
φλμ
|
| 提出日時 | 2018-05-29 21:42:56 |
| 言語 | Scheme (Gauche-0.9.15) |
| 結果 |
AC
|
| 実行時間 | 26 ms / 1,000 ms |
| コード長 | 2,513 bytes |
| コンパイル時間 | 34 ms |
| コンパイル使用メモリ | 6,688 KB |
| 実行使用メモリ | 16,128 KB |
| 最終ジャッジ日時 | 2024-06-30 08:03:33 |
| 合計ジャッジ時間 | 624 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
;;; no.188 HAPPY DAY
;;;
;;; カレンダーライブラリを使うでもいいけど、
;;; すべての日付を作り出してチェックするのがシンプルか。
;;;
;;; ありえないケースなどを予め省いてチェックの繰り返しを
;;; 減らしたりするのは実践的だけど、ここではやらない。
(define num-happy-days
(lambda ()
(let* ((end-day-list '(31 28 31 30 31 30 31 31 30 31 30 31)) ; 各月の終わりの日
(day-list-list (map (lambda (end) ; 日のデータの生成
(let loop1 ((days '()) (d 1))
(cond ((< end d)
(reverse days)
)
(else
(loop1 (cons d days) (+ d 1))
))))
end-day-list))
(dates-list-list (let loop2 ((dates-lists '()) ; 日付データの生成
(month 1)
(day-lists day-list-list)
)
(cond ((null? day-lists)
(reverse dates-lists)
)
(else
(loop2 (cons (map (lambda (day)
(list month day))
(car day-lists))
dates-lists)
(+ 1 month)
(cdr day-lists))
)
)))
)
;;(map print dates-list-list))))
(let ((happy-day? (lambda (date-pair)
(let ((digits (map digit->integer (string->list (number->string (cadr date-pair)))))
)
(if (= (car date-pair) (apply + digits))
#t
#f))))
)
(apply +
(map (lambda (dates-list)
(length (filter happy-day? dates-list))
)
dates-list-list))))))
(print (num-happy-days))
(flush)
φλμ