結果

問題 No.188 HAPPY DAY
ユーザー φλμφλμ
提出日時 2018-05-29 21:42:56
言語 Scheme
(Gauche-0.9.14)
結果
AC  
実行時間 19 ms / 1,000 ms
コード長 2,513 bytes
コンパイル時間 53 ms
コンパイル使用メモリ 5,328 KB
実行使用メモリ 12,244 KB
最終ジャッジ日時 2023-09-12 20:27:28
合計ジャッジ時間 572 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 19 ms
12,244 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

;;; 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)
0