Calendar - for "REAL" programmers: Difference between revisions

m (→‎{{header|REXX}}: replaced tt tag along with /tt. -- ~~~~)
Line 574:
REALPROGRAMMERSTHINKINUPPERCASEANDCHEATBYUSINGPRINT
; // MAGICAL SEMICOLON</lang>
 
=={{header|Racket}}==
<lang racket>
#CI(MODULE ZZZ RACKET
(REQUIRE RACKET/DATE)
(DEFINE (CALENDAR YR)
(DEFINE (NSPLIT N L) (IF (NULL? L) L (CONS (TAKE L N) (NSPLIT N (DROP L N)))))
(DEFINE MONTHS
(FOR/LIST ([MN (IN-NATURALS 1)]
[MNAME '(JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY
AUGUST SEPTEMBER OCTOBER NOVEMBER DECEMBER)])
(DEFINE S (FIND-SECONDS 0 0 12 1 MN YR))
(DEFINE PFX (DATE-WEEK-DAY (SECONDS->DATE S)))
(DEFINE DAYS
(LET ([? (IF (= MN 12) (Λ(X Y) Y) (Λ(X Y) X))])
(ROUND (/ (- (FIND-SECONDS 0 0 12 1 (? (+ 1 MN) 1) (? YR (+ 1 YR))) S)
60 60 24))))
(LIST* (~A MNAME #:WIDTH 20 #:ALIGN 'CENTER) "SU MO TU WE TH FR SA"
(MAP STRING-JOIN
(NSPLIT 7 `(,@(MAKE-LIST PFX " ")
,@(FOR/LIST ([D DAYS])
(~A (+ D 1) #:WIDTH 2 #:ALIGN 'RIGHT))
,@(MAKE-LIST (- 42 PFX DAYS) " ")))))))
(LET* ([S '(" 11,-~4-._3. 41-4! 10/ ()=(2) 3\\ 40~A! 9( 3( 80 39-4! 10\\._\\"
", ,-4'! 5#2X3@7! 12/ 2-3'~2;! 11/ 4/~2|-! 9=( 3~4 2|! 3/~42\\! "
"2/_23\\! /_25\\!/_27\\! 3|_20|! 3|_20|! 3|_20|! 3| 20|!!")]
[S (REGEXP-REPLACE* "!" (STRING-APPEND* S) "~%")]
[S (REGEXP-REPLACE* "@" S (STRING-FOLDCASE "X"))]
[S (REGEXP-REPLACE* ".(?:[1-7][0-9]*|[1-9])" S
(Λ(M) (MAKE-STRING (STRING->NUMBER (SUBSTRING M 1))
(STRING-REF M 0))))])
(PRINTF S YR))
(FOR-EACH (COMPOSE1 DISPLAYLN STRING-TITLECASE)
(DROPF-RIGHT (FOR*/LIST ([3MS (NSPLIT 3 MONTHS)] [S (APPLY MAP LIST 3MS)])
(REGEXP-REPLACE " +$" (STRING-JOIN S " ") ""))
(Λ(S) (EQUAL? "" S)))))
 
(CALENDAR 1969))
</lang>
 
=={{header|REXX}}==