d21
parent
efc0c1bcd6
commit
f097b780c4
@ -0,0 +1,51 @@
|
||||
#lang br/quicklang
|
||||
(require "../helper.rkt" racket/sequence)
|
||||
(provide read-syntax (rename-out [#%mb #%module-begin]) ★ ★★)
|
||||
|
||||
(define (read-syntax path port)
|
||||
(define lines (port->lines port))
|
||||
(strip-context #`(module mod "main.rkt"
|
||||
#,(for/list ([datum (in-port read (open-input-string (car lines)))])
|
||||
datum)
|
||||
#,@(for/list ([line (in-list (cdr lines))])
|
||||
(for/list ([datum (string-split line)])
|
||||
datum)))))
|
||||
|
||||
(define-macro (#%mb (STARS ITERATIONS) (LH "=>" RH) ...)
|
||||
#`(#%module-begin
|
||||
(time (STARS ITERATIONS '(LH . RH) ...))))
|
||||
|
||||
(define (charify str) (map string->list (string-split str "/")))
|
||||
|
||||
(define (grid-size grid) (length (car grid)))
|
||||
|
||||
(define (grid-split grid size)
|
||||
(append*
|
||||
(for/list ([rowset (in-slice size grid)])
|
||||
(apply map list (map (λ (row) (slice-at row size)) rowset)))))
|
||||
|
||||
(define (enhance-grid grid rules)
|
||||
(let/ec exit
|
||||
(for*/fold ([rotations (list grid)])
|
||||
([i (in-range 4)])
|
||||
(define rot (apply map list (reverse (car rotations))))
|
||||
(cond
|
||||
[(hash-ref rules rot (λ () (hash-ref rules (map reverse rot) #f))) => exit]
|
||||
[else (cons rot rotations)]))))
|
||||
|
||||
(define (join-grids grids)
|
||||
(define side (sqrt (length grids)))
|
||||
(append*
|
||||
(for/list ([gridset (in-slice side grids)])
|
||||
(apply map append gridset))))
|
||||
|
||||
(define (★ iterations . rulepairs)
|
||||
(define rules (for/hash ([rp (in-list rulepairs)])
|
||||
(values (charify (car rp)) (charify (cdr rp)))))
|
||||
(for/fold ([grid (charify ".#./..#/###")]
|
||||
#:result (count (λ (c) (char=? c #\#)) (flatten grid)))
|
||||
([i (in-range iterations)])
|
||||
(define grid-pieces (grid-split grid (if (even? (grid-size grid)) 2 3)))
|
||||
(join-grids (map (λ (gp) (enhance-grid gp rules)) grid-pieces))))
|
||||
|
||||
(define ★★ ★)
|
@ -0,0 +1,109 @@
|
||||
#lang reader "main.rkt" ★ 5 ; 190
|
||||
../.. => #.#/###/#.#
|
||||
#./.. => ..#/.../###
|
||||
##/.. => .../.##/###
|
||||
.#/#. => #.#/##./.#.
|
||||
##/#. => #../#.#/..#
|
||||
##/## => #.#/#../###
|
||||
.../.../... => .###/..##/.#../###.
|
||||
#../.../... => ##.#/.###/#.../##.#
|
||||
.#./.../... => ..../#.##/..../.#.#
|
||||
##./.../... => ..#./#.../#.../.###
|
||||
#.#/.../... => ..##/####/#.#./..##
|
||||
###/.../... => .##./#.#./###./.#..
|
||||
.#./#../... => #..#/..#./...#/#.#.
|
||||
##./#../... => ##../.##./##.#/#..#
|
||||
..#/#../... => #.##/.##./##.#/.###
|
||||
#.#/#../... => ...#/#.##/..#./##..
|
||||
.##/#../... => #.#./..#./##.#/.#.#
|
||||
###/#../... => #..#/...#/..#./##.#
|
||||
.../.#./... => .#.#/#.../.##./.#.#
|
||||
#../.#./... => #.#./.##./..../.#.#
|
||||
.#./.#./... => .#../#.##/..##/..##
|
||||
##./.#./... => ..##/##.#/...#/..#.
|
||||
#.#/.#./... => ...#/.##./####/.#..
|
||||
###/.#./... => ###./####/...#/####
|
||||
.#./##./... => ...#/.#.#/#.#./#.#.
|
||||
##./##./... => ..../...#/#.#./...#
|
||||
..#/##./... => .##./#.../##.#/.#..
|
||||
#.#/##./... => .#../.#../...#/....
|
||||
.##/##./... => ..#./.##./####/.#..
|
||||
###/##./... => ##../.#.#/##../.#..
|
||||
.../#.#/... => ..#./.#../.#../.###
|
||||
#../#.#/... => ####/..../#..#/#...
|
||||
.#./#.#/... => #.##/##../##.#/##.#
|
||||
##./#.#/... => ###./..../#.##/###.
|
||||
#.#/#.#/... => ###./.#../#.#./#.#.
|
||||
###/#.#/... => ...#/#..#/#.#./..##
|
||||
.../###/... => .#../...#/...#/....
|
||||
#../###/... => ####/#.../##../.#.#
|
||||
.#./###/... => ...#/####/.##./#..#
|
||||
##./###/... => .###/##.#/..#./.#..
|
||||
#.#/###/... => ####/###./.###/.###
|
||||
###/###/... => .#.#/..##/..#./##..
|
||||
..#/.../#.. => #.../.###/###./...#
|
||||
#.#/.../#.. => ..../#.../##../..#.
|
||||
.##/.../#.. => ####/####/...#/####
|
||||
###/.../#.. => #.../.#../#.#./#.#.
|
||||
.##/#../#.. => ##../..#./.#../##.#
|
||||
###/#../#.. => ..../#..#/.###/.###
|
||||
..#/.#./#.. => ...#/##../.##./##..
|
||||
#.#/.#./#.. => #.##/.###/#.#./##.#
|
||||
.##/.#./#.. => ..../..../.#.#/#..#
|
||||
###/.#./#.. => ##../.#.#/.#.#/####
|
||||
.##/##./#.. => #.##/##.#/####/....
|
||||
###/##./#.. => ..../..##/#.#./.###
|
||||
#../..#/#.. => #.#./...#/#.##/.###
|
||||
.#./..#/#.. => ####/#.##/.#../.###
|
||||
##./..#/#.. => .##./..#./.#.#/##.#
|
||||
#.#/..#/#.. => .#.#/#.##/##../#...
|
||||
.##/..#/#.. => ..../.###/####/.#..
|
||||
###/..#/#.. => ##.#/##.#/..##/.#..
|
||||
#../#.#/#.. => #.##/###./##../....
|
||||
.#./#.#/#.. => ..../###./####/###.
|
||||
##./#.#/#.. => ##.#/#.##/##../#.##
|
||||
..#/#.#/#.. => .###/#.../.#../##..
|
||||
#.#/#.#/#.. => ##../##.#/#.../.##.
|
||||
.##/#.#/#.. => ...#/..#./.###/##.#
|
||||
###/#.#/#.. => #.../#.##/..##/..##
|
||||
#../.##/#.. => #.##/#.../.##./##..
|
||||
.#./.##/#.. => #.#./#.../..##/.#..
|
||||
##./.##/#.. => .###/.#.#/####/.#.#
|
||||
#.#/.##/#.. => ####/.#../##.#/.###
|
||||
.##/.##/#.. => .#../##.#/####/#.#.
|
||||
###/.##/#.. => #.##/#.../...#/....
|
||||
#../###/#.. => ###./.#.#/##../#..#
|
||||
.#./###/#.. => #..#/..##/..../....
|
||||
##./###/#.. => ..#./#.../...#/###.
|
||||
..#/###/#.. => ##../..##/##../#.##
|
||||
#.#/###/#.. => ..../..#./.###/##..
|
||||
.##/###/#.. => #..#/####/.#.#/.##.
|
||||
###/###/#.. => ###./#.##/##.#/.#..
|
||||
.#./#.#/.#. => #.../####/#.#./.##.
|
||||
##./#.#/.#. => ..##/..../.#.#/##..
|
||||
#.#/#.#/.#. => ####/..##/####/#...
|
||||
###/#.#/.#. => ##.#/#.#./.##./####
|
||||
.#./###/.#. => .#.#/.#.#/##.#/###.
|
||||
##./###/.#. => .#../###./#.##/#...
|
||||
#.#/###/.#. => #.../.###/.#../.#..
|
||||
###/###/.#. => #.#./.##./.###/####
|
||||
#.#/..#/##. => .#../#..#/###./#.##
|
||||
###/..#/##. => #.#./####/###./###.
|
||||
.##/#.#/##. => .#.#/...#/..../#.##
|
||||
###/#.#/##. => ...#/..../#.##/####
|
||||
#.#/.##/##. => ##../.#../.#.#/##..
|
||||
###/.##/##. => #.../#.#./#.#./#.#.
|
||||
.##/###/##. => ..../#.##/#.##/..##
|
||||
###/###/##. => ####/##.#/#..#/.##.
|
||||
#.#/.../#.# => ##.#/.#.#/####/.##.
|
||||
###/.../#.# => #..#/.#.#/#.../#..#
|
||||
###/#../#.# => ..##/###./.###/..##
|
||||
#.#/.#./#.# => #.##/#.#./##../...#
|
||||
###/.#./#.# => ..#./.###/..##/#...
|
||||
###/##./#.# => #.../...#/..##/.###
|
||||
#.#/#.#/#.# => #..#/.#../...#/#..#
|
||||
###/#.#/#.# => ###./#.../##../.##.
|
||||
#.#/###/#.# => ...#/..#./...#/#..#
|
||||
###/###/#.# => ###./####/.###/###.
|
||||
###/#.#/### => .###/.#../..../##.#
|
||||
###/###/### => #..#/.###/##../.##.
|
@ -0,0 +1,109 @@
|
||||
#lang reader "main.rkt" ★★ 18 ; 2335049
|
||||
../.. => #.#/###/#.#
|
||||
#./.. => ..#/.../###
|
||||
##/.. => .../.##/###
|
||||
.#/#. => #.#/##./.#.
|
||||
##/#. => #../#.#/..#
|
||||
##/## => #.#/#../###
|
||||
.../.../... => .###/..##/.#../###.
|
||||
#../.../... => ##.#/.###/#.../##.#
|
||||
.#./.../... => ..../#.##/..../.#.#
|
||||
##./.../... => ..#./#.../#.../.###
|
||||
#.#/.../... => ..##/####/#.#./..##
|
||||
###/.../... => .##./#.#./###./.#..
|
||||
.#./#../... => #..#/..#./...#/#.#.
|
||||
##./#../... => ##../.##./##.#/#..#
|
||||
..#/#../... => #.##/.##./##.#/.###
|
||||
#.#/#../... => ...#/#.##/..#./##..
|
||||
.##/#../... => #.#./..#./##.#/.#.#
|
||||
###/#../... => #..#/...#/..#./##.#
|
||||
.../.#./... => .#.#/#.../.##./.#.#
|
||||
#../.#./... => #.#./.##./..../.#.#
|
||||
.#./.#./... => .#../#.##/..##/..##
|
||||
##./.#./... => ..##/##.#/...#/..#.
|
||||
#.#/.#./... => ...#/.##./####/.#..
|
||||
###/.#./... => ###./####/...#/####
|
||||
.#./##./... => ...#/.#.#/#.#./#.#.
|
||||
##./##./... => ..../...#/#.#./...#
|
||||
..#/##./... => .##./#.../##.#/.#..
|
||||
#.#/##./... => .#../.#../...#/....
|
||||
.##/##./... => ..#./.##./####/.#..
|
||||
###/##./... => ##../.#.#/##../.#..
|
||||
.../#.#/... => ..#./.#../.#../.###
|
||||
#../#.#/... => ####/..../#..#/#...
|
||||
.#./#.#/... => #.##/##../##.#/##.#
|
||||
##./#.#/... => ###./..../#.##/###.
|
||||
#.#/#.#/... => ###./.#../#.#./#.#.
|
||||
###/#.#/... => ...#/#..#/#.#./..##
|
||||
.../###/... => .#../...#/...#/....
|
||||
#../###/... => ####/#.../##../.#.#
|
||||
.#./###/... => ...#/####/.##./#..#
|
||||
##./###/... => .###/##.#/..#./.#..
|
||||
#.#/###/... => ####/###./.###/.###
|
||||
###/###/... => .#.#/..##/..#./##..
|
||||
..#/.../#.. => #.../.###/###./...#
|
||||
#.#/.../#.. => ..../#.../##../..#.
|
||||
.##/.../#.. => ####/####/...#/####
|
||||
###/.../#.. => #.../.#../#.#./#.#.
|
||||
.##/#../#.. => ##../..#./.#../##.#
|
||||
###/#../#.. => ..../#..#/.###/.###
|
||||
..#/.#./#.. => ...#/##../.##./##..
|
||||
#.#/.#./#.. => #.##/.###/#.#./##.#
|
||||
.##/.#./#.. => ..../..../.#.#/#..#
|
||||
###/.#./#.. => ##../.#.#/.#.#/####
|
||||
.##/##./#.. => #.##/##.#/####/....
|
||||
###/##./#.. => ..../..##/#.#./.###
|
||||
#../..#/#.. => #.#./...#/#.##/.###
|
||||
.#./..#/#.. => ####/#.##/.#../.###
|
||||
##./..#/#.. => .##./..#./.#.#/##.#
|
||||
#.#/..#/#.. => .#.#/#.##/##../#...
|
||||
.##/..#/#.. => ..../.###/####/.#..
|
||||
###/..#/#.. => ##.#/##.#/..##/.#..
|
||||
#../#.#/#.. => #.##/###./##../....
|
||||
.#./#.#/#.. => ..../###./####/###.
|
||||
##./#.#/#.. => ##.#/#.##/##../#.##
|
||||
..#/#.#/#.. => .###/#.../.#../##..
|
||||
#.#/#.#/#.. => ##../##.#/#.../.##.
|
||||
.##/#.#/#.. => ...#/..#./.###/##.#
|
||||
###/#.#/#.. => #.../#.##/..##/..##
|
||||
#../.##/#.. => #.##/#.../.##./##..
|
||||
.#./.##/#.. => #.#./#.../..##/.#..
|
||||
##./.##/#.. => .###/.#.#/####/.#.#
|
||||
#.#/.##/#.. => ####/.#../##.#/.###
|
||||
.##/.##/#.. => .#../##.#/####/#.#.
|
||||
###/.##/#.. => #.##/#.../...#/....
|
||||
#../###/#.. => ###./.#.#/##../#..#
|
||||
.#./###/#.. => #..#/..##/..../....
|
||||
##./###/#.. => ..#./#.../...#/###.
|
||||
..#/###/#.. => ##../..##/##../#.##
|
||||
#.#/###/#.. => ..../..#./.###/##..
|
||||
.##/###/#.. => #..#/####/.#.#/.##.
|
||||
###/###/#.. => ###./#.##/##.#/.#..
|
||||
.#./#.#/.#. => #.../####/#.#./.##.
|
||||
##./#.#/.#. => ..##/..../.#.#/##..
|
||||
#.#/#.#/.#. => ####/..##/####/#...
|
||||
###/#.#/.#. => ##.#/#.#./.##./####
|
||||
.#./###/.#. => .#.#/.#.#/##.#/###.
|
||||
##./###/.#. => .#../###./#.##/#...
|
||||
#.#/###/.#. => #.../.###/.#../.#..
|
||||
###/###/.#. => #.#./.##./.###/####
|
||||
#.#/..#/##. => .#../#..#/###./#.##
|
||||
###/..#/##. => #.#./####/###./###.
|
||||
.##/#.#/##. => .#.#/...#/..../#.##
|
||||
###/#.#/##. => ...#/..../#.##/####
|
||||
#.#/.##/##. => ##../.#../.#.#/##..
|
||||
###/.##/##. => #.../#.#./#.#./#.#.
|
||||
.##/###/##. => ..../#.##/#.##/..##
|
||||
###/###/##. => ####/##.#/#..#/.##.
|
||||
#.#/.../#.# => ##.#/.#.#/####/.##.
|
||||
###/.../#.# => #..#/.#.#/#.../#..#
|
||||
###/#../#.# => ..##/###./.###/..##
|
||||
#.#/.#./#.# => #.##/#.#./##../...#
|
||||
###/.#./#.# => ..#./.###/..##/#...
|
||||
###/##./#.# => #.../...#/..##/.###
|
||||
#.#/#.#/#.# => #..#/.#../...#/#..#
|
||||
###/#.#/#.# => ###./#.../##../.##.
|
||||
#.#/###/#.# => ...#/..#./...#/#..#
|
||||
###/###/#.# => ###./####/.###/###.
|
||||
###/#.#/### => .###/.#../..../##.#
|
||||
###/###/### => #..#/.###/##../.##.
|
@ -0,0 +1,3 @@
|
||||
#lang reader "main.rkt" ★ 2 ; 12
|
||||
../.# => ##./#../...
|
||||
.#./..#/### => #..#/..../..../#..#
|
Reference in New Issue