結果
問題 | No.188 HAPPY DAY |
ユーザー | φλμ |
提出日時 | 2018-05-29 21:42:56 |
言語 | Scheme (Gauche-0.9.14) |
結果 |
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 |
(要ログイン)
ソースコード
;;; 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)