USING: kernel sequences math prettyprint memoize fry ;
IN: scratchpad
DEFER: gray
: gray-1 ( n -- seq )
drop
{ "0" "1" }
;
: prepend-each ( seq x -- seq' )
'[ _ prepend ] map
;
: gray-n ( n -- seq )
1 - gray
dup reverse!
[ "0" prepend-each ] [ "1" prepend-each ] bi*
append
;
MEMO: gray ( n -- seq )
dup 1 =
[ gray-1 ] [ gray-n ] if
;
3 gray .
4 gray .
5 gray .
VVNJTkc6IGtlcm5lbCBzZXF1ZW5jZXMgbWF0aCBwcmV0dHlwcmludCBtZW1vaXplIGZyeSA7CklOOiBzY3JhdGNocGFkCgpERUZFUjogZ3JheQoKOiBncmF5LTEgKCBuIC0tIHNlcSApCiAgICBkcm9wCiAgICB7ICIwIiAiMSIgfQo7Cgo6IHByZXBlbmQtZWFjaCAoIHNlcSB4IC0tIHNlcScgKQogICAgJ1sgXyBwcmVwZW5kIF0gbWFwCjsKCjogZ3JheS1uICggbiAtLSBzZXEgKQogICAgMSAtIGdyYXkKICAgIGR1cCByZXZlcnNlIQogICAgWyAiMCIgcHJlcGVuZC1lYWNoIF0gWyAiMSIgcHJlcGVuZC1lYWNoIF0gYmkqCiAgICBhcHBlbmQKOwoKTUVNTzogZ3JheSAoIG4gLS0gc2VxICkKICAgIGR1cCAxID0KICAgIFsgZ3JheS0xIF0gWyBncmF5LW4gXSBpZgo7CgozIGdyYXkgLgo0IGdyYXkgLgo1IGdyYXkgLg==