Last active
June 1, 2021 09:19
-
-
Save conf8o/a79e49420f9c99d91de04020adc9edc2 to your computer and use it in GitHub Desktop.
競プロ用入力マクロ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; input | |
(define (my-read) | |
(let ([a (read)]) | |
(if (symbol? a) | |
(symbol->string a) | |
a))) | |
(define (my-read-line) | |
(let ([line (read-line)]) | |
(if (string=? "" line) | |
(my-read-line) | |
line))) | |
; input macro | |
(define-syntax solve | |
(syntax-rules (: list vec grid) | |
((_ [var : list n]) | |
(define var | |
(let loop ([i n]) | |
(if (zero? i) | |
() | |
(cons (my-read) (loop (- i 1))))))) | |
((_ [var : vec n]) | |
(define var | |
(let ([v (make-vector n)]) | |
(dotimes (i n) | |
(vector-set! v i (my-read))) | |
v))) | |
((_ [var : vec n m]) | |
(define var | |
(let ([v (make-vector m)]) | |
(dotimes (i m) | |
(solve [u : vec n]) | |
(vector-set! v i u)) | |
v))) | |
((_ [var : grid h]) | |
(define var | |
(let ([v (make-vector h)]) | |
(dotimes (i h) | |
(let ([row (list->vector (string->list (my-read-line)))]) | |
(vector-set! v i row))) | |
v))) | |
((_ (expr ...)) | |
(expr ...)) | |
((_ var) | |
(define var | |
(my-read))) | |
((_ expr1 expr2 ...) | |
(begin | |
(solve expr1) | |
(solve expr2 ...))))) | |
(solve | |
x y s | |
[l : list x] | |
[v : vec x] | |
[m : vec x y] | |
[g : grid y] | |
(print (list x y s l v m g))) | |
; 入力 | |
; 2 3 aaa | |
; 6 6 | |
; 7 7 | |
; 8 8 | |
; 9 9 | |
; 10 bb | |
; #.### | |
; #...# | |
; ###.# | |
; 出力 | |
; (2 3 aaa (6 6) #(7 7) #(#(8 8) #(9 9) #(10 bb)) #(#(# . # # #) #(# . . . #) #(# # # . #))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment