Skip to content

Instantly share code, notes, and snippets.

@conf8o
Last active June 1, 2021 09:19
Show Gist options
  • Save conf8o/a79e49420f9c99d91de04020adc9edc2 to your computer and use it in GitHub Desktop.
Save conf8o/a79e49420f9c99d91de04020adc9edc2 to your computer and use it in GitHub Desktop.
競プロ用入力マクロ
; 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